電影劇照搜尋器 是做什麼的?
將「我需要兩個人在爭吵後沉默坐著的劇照」這樣的描述,轉化為真實且附有來源的圖像檔案。任何 AI 代理、任何作業系統,無需任何憑證。
1. 請先閱讀:實際可行的範圍
沒有免費的公開 API 可以根據一句自然語言句子回傳精確的電影幀,尤其是帶有內嵌對話字幕的畫面。追求這種「銀彈」只是在浪費時間。真正有效的是管道式流程,由代理協調,由具備視覺能力的模型挑選幀:
請求 -> 事實查核 -> 選擇來源 -> 批次下載候選圖
-> 編號連絡表 -> 視覺選幀 -> 高解析度原始圖
-> 裁切字幕 / 合成字幕 -> 視覺再確認
-> 交付 + 來源清單
兩個不可妥協的後果:
- 視覺步驟不能省略。 僅憑檔名或文字猜測幀必然失敗。請將連絡表展示給具備視覺能力的模型(或人類)。
- 先事實查核。 廣為流傳的電影「事實」往往是錯的(請參閱
references/fact-check.md)。在搜尋之前,先驗證台詞/場景/集數。
2. 快速開始(最小設定檔,預設模式)
pip install -r requirements.txt
python scripts/still.py probe # 檢查哪些來源目前可連線
python scripts/still.py grab --out ./work \
--page "https://movie-screencaps.com/avatar-2009/page/114" \
--image-referer "https://movie-screencaps.com/" \
--limit 40
# -> ./work/candidates/*.jpg, ./work/contact_1.jpg, ./work/manifest.json
# 將 contact_1.jpg 展示給視覺模型,記下獲勝編號,然後:
python scripts/still.py sheet ./work/candidates # 重新產生編號連絡表
python scripts/still.py crop ./work/candidates/p1_02.jpg --bottom 100 -o ./work/clean.jpg
python scripts/still.py deliver ./work --picks examples/sample-picks.json \
--profile profiles/minimal.json --out ./delivery
務必先執行 probe: 來源的可用性會隨時間變動。如需完全離線執行,請參閱 examples/quickstart.md 的 D 節。--image-referer 通常是網站根目錄,而非文章網址。
若要搜尋一句台詞,quote 指令會回傳電影名稱及毫秒時間戳:
python scripts/still.py quote "I see you" --title Avatar
完整逐步說明:examples/quickstart.md。指令參考:scripts/still.py --help。
3. 在連上網路前決定路線
| 請求類型 | 優先選擇 | 備用方案 |
|---|---|---|
| 場景 / 氛圍(「爭吵後的沉默」、「兩個人背對彼此」) | 附有說明文字的編輯文章,或 FilmGrab 的精選幀 (grab) | 逐幀畫廊 + 視覺挑選 |
| 一句引述的台詞 / 「X 說 Y 的幀」 | quote → 時間戳 → 幀畫廊 → subtitle(標示為合成) | 來自編輯文章的含原生字幕的螢幕截圖 |
| 需要寬闊、乾淨、無字幕的封面藝術圖 | FilmGrab 精選幀 | 從觀看截圖 crop 下方 95-100 像素 |
| 使用者擁有本地影片檔案 | 可選的本地語意搜尋,請參閱 references/optional-adapters.md | — |
| 迷因 / 梗圖而非劇照 | 可選附錄,references/meme-optional.md | — |
請執行 probe。它是免費的,無需登入,能告訴你哪些來源在你的環境中返回 403 或無法連線,這樣你就不會重試一個已失效的主機。
4. 適用於所有代理的規則
- 無需憑證。 不要要求 API 金鑰、不要代表使用者登入、不要繞過付費牆或反機器人保護。收到 403 代表「切換來源」,並記錄在執行日誌中。
- 只下載實際回傳的 URL。 絕不憑空偽造圖像 URL。一個可連線的頁面不代表其圖像 CDN 也可連線:在信任整個畫廊之前,先驗證一張圖片。如果在一次 Referer 修正後圖片仍然返回 403,請切換來源 — 不要持續修改標頭。
- 記錄來源出處。 每張交付的圖像都需要包含來源頁面、圖像直接網址、電影名稱/年份,以及是否有任何字幕被裁切或合成。
grab會自動將這些資訊寫入manifest.json。 - 標記合成的字幕。 如果你添加了原始幀中不存在的字幕,請在說明中註明。切勿將其呈現為原生幀。
- 驗證而非假設解析度(預設寬度 >= 1000 像素),並在交付前使用檢視器開啟最終檔案檢查。
- 尊重設定檔。 超出上述範圍的行為(人工介入選擇、雙資料夾交付、強制事實查核、封面裁切預覽)由
profiles/*.json控制。不要靜默啟用額外規則。
5. 設定檔(可選行為)
預設的 profiles/minimal.json 是一個普通的通用管道:尋找候選圖、挑選一張、附上來源證明交付。其他所有功能均為選擇性加入。
python scripts/still.py rules --profile profiles/editorial-wechat.json
python scripts/still.py deliver ./work --picks picks.json \
--profile profiles/editorial-wechat.json --out ./delivery
editorial-wechat.json 綁定了人類編輯的工作流程:編號預覽和人工選擇(絕不自動完成)、雙資料夾交付且絕不刪除候選圖、強制事實查核、強制字幕/來源註解,以及一個 2.35:1 的封面裁切預覽。完整的結構定義請參閱 profiles/README.md。
6. 參考文件索引(漸進式揭露)
僅閱讀當前步驟所需的內容。
| 檔案 | 閱讀時機 |
|---|---|
references/workflow.md | 你需要完整的端到端標準作業程序和驗收清單 |
references/sources.md | 選擇來源,或某個來源停止運作 |
references/pitfalls.md | 當某個步驟失敗時;包含已知失效的主機和確切的失敗模式 |
references/image-ops.md | 連絡表、裁切、字幕合成、字型 |
references/fact-check.md | 任何引用台詞或描述特定場景的請求 |
references/delivery.md | 來源證明結構、雙資料夾佈局、版權界線 |
references/meme-optional.md | 使用者要求迷因而非劇照 |
references/optional-adapters.md | 本地影片庫,或其他需要登入/CLI 的工具 |
7. 驗收清單
- 在搜尋之前已對台詞/場景進行事實查核
- 已將編號連絡表提供給視覺模型或人類查看
- 最終圖像能正確開啟,且符合請求內容,而不僅僅是查詢文字
- 在
manifest.json中記錄了來源頁面 + 直接網址 + 電影/年份 - 已明確標記被裁切或合成的字幕
- 寬度 >= 1000 像素(或已說明偏差原因)
- 已記錄失效主機及因應措施,而非靜默重試
- 未刪除任何候選圖;保留所有中間產物
8. 範圍限制
此技能負責尋找和準備圖像。它不會發布任何內容、編輯使用者的稿件、代表使用者決定最終封面(除非設定檔說明人類已做出選擇),或授予任何重新散佈電影劇照的權利。版權界線請參閱 references/delivery.md。