跳到正文
Hacker News (official RSS)(github.com)·· 9 小時前精選AI 評分75

Show HN:將智慧電視變簡易後再賦予智慧功能

Show HN: Making a smart TV dumb and then smart

AI 導讀

此專案展示瞭如何將 webOS 智慧電視改造成可自訂主畫面與語音助手,透過 Linux 主機執行 Chromium 與本地語音模型。

  • 架構:Linux 主機執行 Chromium 與語音模型,TV 只負責顯示與遙控。
推薦理由

此工具示範如何利用 Linux 主機與本地語音模型,將 webOS 智慧電視改造成可自訂主畫面與語音助手,為開發者提供實作參考。

正文 · AI 翻譯

示範: https://anubhavmalhotra.com/vibing/r2d2-webos/r2d2-demo.mp4

閱讀此專案背後的故事: R2D2 for webOS

本機主畫面、私人遠端瀏覽器,以及按鍵即語音助手,適用於 webOS 電視。Linux 計算主機執行 Chromium 與語音模型;電視提供顯示、應用程式與遙控功能。

免責宣告

警告

電視元件以 root 身份執行,並修改特定韌體版本的廠商系統服務。此做法未獲支援,可能使保固失效,且可能使電視無法使用,直至重新啟動或恢復出廠設定。使用前請自行承擔風險。

  • keyfilter 修補、Home/idle 路由,以及原生語音捕捉會取代或掛鉤廠商服務。若出錯,可能導致遙控器、Home 或語音功能失效,直至電視恢復。
  • 韌體 SHA-256 指紋、程式碼偏移、符號名稱與修補錨點皆針對單一參考版本。請為您的韌體重新推算;切勿強行使用不相符的指紋。
  • 軟體以原樣提供,無任何保固;請參閱 LICENSE.md
  • 本專案獨立進行,並未與 LG Electronics、Lucasfilm Ltd.、The Walt Disney Company 或任何串流服務合作、獲得授權或贊助。產品與角色名稱為各自所有者之商標。

狀態

參考部署於單一 TV/韌體:Home、瀏覽器與遠端語音指令皆能完整執行。其他 TV、韌體、遙控器與主機組合尚未驗證。本倉庫提供原始碼與離線測試,並非通用根、韌體或主機安裝程式。

整體架構

  • 計算主機 (spark/ 在路徑中):一臺 aarch64 Linux 機器。它在私有顯示與音訊會話中渲染沙盒化的 Chromium 會話,並透過 LAN 將其串流至電視。它亦執行本機語音辨識與意圖模型,以及封閉式指令登錄檔。
  • 電視 (tv/, voice/tv/):Home 應用程式與瀏覽器檢視器,會將遠端輸入回傳給主機。root 捕捉所有者取得遙控器的語音按鍵,並以雙向 TLS 傳送受限音訊至主機。
  • 內容保護 (protection/):已釘定的過濾規則載入至每個可棄用的瀏覽器個人檔。

模型推論保持在本機。所請求的網站、搜尋、串流應用程式及可選的天氣資訊仍會聯絡其供應商;請參閱 SECURITY.md

需求

  • 建置機器:Python 3.10+ 與 Node.js 20+。
  • 計算主機:aarch64 Linux,使用非 root 服務帳號(UID 1000);啟用沙盒的 Chromium snap;Xvfb 用於私有 X 顯示;PipeWire、WirePlumber 與 GStreamer 外掛支援 WebRTC 路徑;FFmpeg 搭配硬體 HEVC 編碼,用於 MSE 與 AirPlay 路徑;具備 CUDA 能力的 GPU 與 Python 3.12,用於釘定本機模型(約 10 GB 權重)。
  • 電視:一臺您具備系統(root)存取許可權且可授權安裝套件的 webOS TV。原生捕捉亦需要符合該韌體版本的工具鏈與標頭檔。
  • 網路:電視與主機位於同一 LAN。測量吞吐量與延遲;名義連結速率並不代表播放品質。

本機建置

cp config/example.json config.local.json
# Edit the ignored file for your own devices.
python3 tools/build.py --config config.local.json --output dist/local --include-tests

輸出包含未簽署的 Home 套件、已渲染的主機服務、電視服務原始碼與檔案清單。建置不會安裝軟體或與裝置連線。輸出目錄必須為全新。

要啟用瀏覽器捷徑,請建立私有功能金鑰並將其傳遞給建置:

umask 077
python3 -c 'import secrets; print(secrets.token_hex(32), end="")' > browser.local.key
python3 tools/build.py --config config.local.json --browser-key-file browser.local.key --output dist/local-browser --include-tests

品牌標誌未隨附。Home 會顯示文字貼圖,除非你傳遞 --home-logos-file,一個私有 JSON 物件,對映 app ID 到 data: URI 標誌,且你有權使用。將該檔案及任何使用它建置的版本保持私有。

保持渲染輸出私有:其中包含部署位址,且可能包含瀏覽器功能。

測試

python3 -B -m unittest discover -s tests
node tests/test_protection_proof.js
node tests/test_home_core.js
python3 tools/privacy_check.py

UI 測試使用 Playwright 的 Chromium:

npm ci --ignore-scripts
npx --no-install playwright install chromium
npm run test:home
npm run test:browser

完整的離線檢查列於 CI 工作流程。離線檢查不會建立實體影片節奏、麥克風品質或與其他韌體版本的相容性。

部署主機

將完整渲染的 spark/ 樹階段化為由服務帳戶擁有的版本化目錄,然後在啟用會話管理器前執行其預檢查:

python3 -B "$RENDERED_SPARK/runtime/trial.py" --run --preflight-only

RENDERED_SPARK 指向已階段化的目錄。預檢查會檢查沙盒、顯示/音訊、內容保護、DNS 與清理。它不會安裝套件或驗證 TV 播放。沒有通用主機安裝程式;相依套件安裝與服務監督屬於主機管理。

執行階段將其功能金鑰與可選語音設定儲存在 $HOME/.local/share/baaz-browser/。baaz-browser 是為相容性保留的舊執行階段目錄名稱。將那些檔案以 0600 許可權儲存在私有目錄中。常駐語音還需要固定的模型快照、TLS 憑證以及本地配對的 TV 控制;請參閱 語音後端。

安裝至 TV

先透過 webOS 套件工作流程安裝 Home 套件並先以普通應用程式測試。更改 Home 與空閒路由是獨立步驟:離線 Home 計畫器從你的韌體捕捉狀態產生候選項與回滾負載。

語音捕捉遵循 local-capture 啟動契約。公開建置器不會取得裝置存取、修補系統檔案或啟動服務。保留原始檔案及在任何 UI 重新啟動終止的流程之外的恢復路徑。接著檢查遠端控制、現有應用程式、瀏覽器播放、連續語音按壓、待機/恢復與電源迴圈。

來源地圖

路徑 目的
tv/home/ Home 應用程式範本
tv/integration/ 離線 Home 與空閒返回計畫器
spark/ 瀏覽器、媒體傳輸與會話管理器
voice/ TV 捕捉、本地模型與驗證命令執行
protection/ 內容阻擋規則與可重現的擴充功能建置器
tools/ 私有建置、套件與隱私工具

將裝置設定、金鑰、韌體映像與執行階段資料保持在版本控制之外。安全邊界與報告載於 SECURITY.md。

授權

專案程式碼採 MIT 授權(LICENSE.md)。瀏覽器擴充功能、過濾工具與資料,以及兩個執行階段介面卡採 GPL-3.0-or-later;THIRD_PARTY_NOTICES.md 列出這些元件與上游屬性。