看過的影片找不回來?我把「影片記憶」整套搬回自己電腦
從一支開源插件出發,把「看影片自動變成可搜尋的向量記憶」的整條鏈路——採集、嵌入、儲存、查詢——全部搬回本地的過程紀錄。一個晚上、三個坑、零雲端服務。

眾裡尋他千百度,驀然回首,那人卻在燈火闌珊處。
—— 辛棄疾《青玉案・元夕》(南宋)
那個畫面明明看過
你一定有過這種時刻:三週前看過一支教學影片,裡面某一分鐘的畫面正好是你現在需要的——某個設定介面、某張架構圖、某段示範。你記得畫面長什麼樣,卻想不起是哪支影片的第幾分鐘。搜尋救不了你,因為搜尋只認得標題和字幕,不認得你腦中那個畫面。於是你在進度條上來回拖,拖到心態全崩。
上週我看到 YouTube 頻道「小天fotos」發了一支影片,他把這個問題解掉了:一個瀏覽器插件(開源專案叫 Indexed),你看影片時它在背景把畫面和字幕每十秒切一段、各轉成一個數學座標——術語叫向量——存進索引。之後你用大白話問、用一句畫面描述問、甚至丟一張截圖問,它把候選片段連時間碼一起鋪出來,點下去直接跳到那支影片的那一秒。
看完我只有一個念頭:我要這個。
卡住我的那一步
裝之前我照習慣把它的架構看了一遍,卡在一個地方:這一版的向量要存到阿里雲的物件儲存服務。
先說清楚,這個設計本身沒有錯——作者算過帳,他近五小時影片的索引每月存儲費只要幾分錢人民幣,便宜到近乎免費。但「你看過哪些影片、看到第幾秒」這件事,本身就是一種對你的側寫。而我直說:我不信任中國的雲端服務,這種資料我不會放上去。這是我個人的信任判斷,你可以有不同的答案——但正因為答案因人而異,「只有這一條路」就成了問題。
一般到這裡有兩條路:等作者出本地版(他說在做了),或者放棄。我選了第三條:把原始碼打開看看,到底缺什麼。
缺的只是一小塊
這是整件事最有意思的轉折。讀完插件的原始碼我發現:本地模式的客戶端早就寫好了。插件裡有一個完整的分支,只要你在設定裡填一個本機網址,它就會把所有東西——影片片段、字幕、搜尋請求——送到那個網址,用的是八個很乾淨的 HTTP 介面。
它在等的,只是一台還沒被寫出來的伺服器。
所以那個晚上我做的事,嚴格說不是「造一個替代品」,是「把桌子的第四隻腳裝上」:
同一個插件,兩條路。差別只在右邊那兩格在誰的電腦裡。
伺服器本身不複雜:收到影片片段就抽一張代表畫面轉成向量,收到字幕就把文字轉成向量,全部存進一個嵌入式的本地向量資料庫;查詢時把你的問題轉成向量、找最近的鄰居。嵌入模型用 Google 開源的 SigLIP 2——支援中文查詢,而且在一台沒有獨立顯卡的普通筆電上,一段文字只要 0.06 秒、一張圖 0.3 秒(2026-08-28 實測),跟上「每十秒一片」的節奏綽綽有餘。
三個坑,一個晚上
過程不是一路順的,三個坑值得記:
第一個坑,選好的模型裝不上。 原本屬意另一家的開源模型,結果它的自訂程式碼跟新版工具鏈不相容——它引用的內部函式在新版裡被移除了。換成 SigLIP 2 反而更好:工具鏈原生支援,不用執行任何第三方動態程式碼,對一個要開源給別人裝的專案,這是安全性的升級不是妥協。
第二個坑,換模型後資料庫報天書。 測試時用的小模型輸出 64 維向量,正式模型輸出 768 維,兩者寫進同一個資料庫就炸出一串沒人看得懂的底層錯誤。修法不是把錯誤吞掉,是在啟動時就檢查維度、用人話報錯:「既有索引是 64 維,目前模型輸出 768 維,換了模型就要換資料目錄。」錯誤訊息是給三個月後的自己和陌生使用者看的。
第三個坑,我自己的測試污染了正式資料。 上一個坑的 64 維資料,正是我煙霧測試時留下的。測試資料和正式資料共用同一個目錄,是我自己埋的雷。教訓很老派但每次都有效:測試要有自己的沙盒。
修完這三個,端到端跑通:存入「顯示卡的散熱表現和跑分成績」這段字幕,用完全不同的措辭「GPU 溫度與效能測試」去查,它把正確的片段排在第一。
整個專案我開源在 bockybocky/indexed-local-server(MIT 授權):一個 Python 檔、零網頁框架依賴。歡迎拿去試——
- 照上游插件的說明把 Chrome 插件建起來、載入
git clone我的 repo,pip install -r requirements.txt,跑python server.py(首跑會下載約 1.5 GB 的模型)- 插件設定選「本地模式」、地址填
http://127.0.0.1:8321,開一支 YouTube 影片按下錄製
從此你的影片記憶只住在你的硬碟裡。裝的時候卡住、或有想法想聊,都歡迎開 issue 給我。
「這種功能就是要雲端」是哪來的
最後聊一個比程式碼更有意思的問題。我們有一個很深的預設:這種「AI 幫你記住一切」的功能,理所當然要連雲端、要訂閱、要把資料交出去。
這個信念有它的出身。過去十幾年它是對的:模型是封閉的、只在大公司的機房裡跑得動,你想要智慧功能,就得把資料送過去換。整個訂閱制軟體的時代都建立在這個交換上。
但支撐它的兩個前提,這兩年都鬆動了。開源權重的模型多到挑不完,而普通筆電的處理器已經跑得動其中夠好的那些。當「智慧」可以在你自己的機器上發生,「資料換功能」就從必然變成了選項——你還是可以選雲端,但那應該是你權衡後的選擇,不是唯一的路。
這次的專案就是一個小小的實證:同樣的功能,資料不出門的版本,一個晚上就補得出來。缺的從來不是技術,是有沒有人去看一眼「到底缺哪一塊」。
帶得走的一件事
想要一個工具卻卡在它的某個設計時,先去讀它的原始碼——你缺的可能不是整個替代品,而是一小塊別人早就留好接口的零件。
今天就能做的練習:挑一個你正在用、但有一點不滿的服務(不限軟體——訂閱、App、甚至一個生活流程都行),把你的不滿寫成一句話,然後問:「這個不滿對應到整個系統的哪一塊?那一塊能不能單獨換掉?」多數時候你會發現,讓你想整個放棄的,其實只是一個可以拆下來的零件。