無臉短片
你從一個主題完成一支垂直短片:腳本、語音、逐字同步字幕、動畫鏡頭、音效與音樂,並渲染成 MP4。
一切都用程式碼:Canvas 繪圖、Headless Chrome 擷取、ffmpeg、本地 Kokoro 語音、本地 Whisper 逐字時間、numpy 音效。沒有 AI 圖片或影片、沒有 API 金鑰、沒有點數。
SKILL = 此檔案所在資料夾。專案存放在 ~/faceless-shorts/<短片名稱>/。
| 風格 | 作品內容 | 長度 · 比例 |
|---|---|---|
深度解析 3D deep-dive | 旗艦風格,類似 Zack D. Films:雕塑般的 3D 人物於陽光場景中、發光的 X 光身體、穿越血管的鏡頭旅程、淺景深。「如果…?」的身體與科學解說 | 30-45 秒 · 9:16 |
夜間檔案 3D night-file | 未解之謎 / 真實犯罪:只有一盞燈的黑暗 3D 場景、無臉人物(主角散發紅光)、打字機日期、案件檔案插入 | 30-45 秒 · 9:16 |
透視內視 inside-out | 扁平 2D「如果…?」解說:簡單的主角、X 光剖面、醒目的 1-3 字字幕、俐落的剪接 | 25-40 秒 · 9:16 |
線條故事 stick-story | 「如果你…你會怎麼做?」生存步驟:有表情眼睛的線條人物、日夜變化的平面房間、金色步驟卡 | 30-45 秒 · 9:16 |
紙本地圖 paper-atlas | 剪紙歷史:羊皮紙地圖、深紅色路線、金色日期緞帶、時代人物 | 30-45 秒 · 9:16 |
奇幻故事 3D tall-tale | 有趣的真實故事:扁平 2D 卡通人物(大圓頭、墨水輪廓)在陽光燦爛的 3D 小鎮世界表演,鏡頭持續移動,單字字幕 | 40-60 秒 · 9:16 |
風格選擇:身體 / 健康 / 科學「如果…」→ 深度解析 3D(或想更輕快、快速的 2D 風格則選透視內視)· 詭異、無法解釋、真實犯罪、「1971年發生的事」→ 夜間檔案 3D · 生存、生活小撇步、「你應該這樣做」→ 線條故事 · 歷史事件、「X 是如何發生的」→ 紙本地圖 · 有趣或巧妙真實故事、騙局、漏洞、「這傢伙做了 X」→ 奇幻故事 3D。如果不明顯,詢問一次。
每種風格 = styles/<風格>/style-sheet.png(該風格自己程式碼繪製的風格一覽圖)+ STYLE.md(規則 + 引擎手冊)+
example/(一個可直接渲染的完整專案)。規劃前請完整閱讀該風格的 STYLE.md。
0. 首次在電腦上使用
執行 bash SKILL/scripts/setup.sh 直到顯示 All set(檢查 Node 22+、ffmpeg、Chrome;建立 ~/.faceless-shorts/venv;
下載 Kokoro 語音模型約 340 MB 和 Whisper small.en 約 0.5 GB)。用官方免費方式安裝缺少的項目,需要密碼的操作前必須詢問。
然後執行 bash SKILL/scripts/selftest.sh 直到顯示 SELFTEST PASSED:開啟聯絡表並裁剪出名稱,仔細檢視。
1. 輸入(只發一次訊息,使用預設值)
一次問齊所有未知項目:主題(或「你選 3 個點子」)、喜歡的格式的短片連結(可選)、長度(預設約 30 秒)、語音(SKILL/scripts/py SKILL/scripts/voice.py --list;預設 am_michael)、旁白模式:AI 語音(預設)· 使用者自己錄音(使用者看過腳本後自行錄音;words.py --audio)· 僅字幕(暫無語音;estimate.py)、音樂(內建背景音樂 · 無音樂 · 使用者自己的免版稅檔案)、結尾標語 / 帳號。「直接進行」= 使用所有預設值。
2. 計劃(只顯示一個畫面,然後等待)
顯示:標題 · 完整旁白,一行一個剪接段落,附字幕區塊(如果 *你 | 吞下 *口香糖?)· 鏡頭清單,一行一個(我們看到什麼、什麼在移動、落在哪個單詞上)· 你將新增的工具箱元件(若有)· 事實及其來源。
詢問 「開始製作?」 並等待。
腳本規則。 用一個人對朋友說話的實際方式寫作:完整、流暢的句子,使用連接詞(「嗯,」、「其中」、「但」、「所以」、「這表示」),而不是列出簡短的字幕式陳述。約 90-110 字用於 35 秒。
一行就是一個剪接,不是一個句子:在自然停頓處(逗號、「和」、「其中」)將每個句子拆分成 1-3 行,這樣畫面每隔 1.5-3.5 秒變化,而語音持續流暢(voice.py 一次性朗讀完整句子)。
結構:鉤子式提問,然後升級,一個迷思或驚喜,一個轉折(「但如果你…」),一個有力的結尾句,形成循環。
數字的寫法要像說出來一樣(「七」)。在腦中朗讀一遍:如果聽起來像字幕,就重寫。
僅限原創寫作:你可以喜歡某個格式,但絕對不能抄襲其他創作者的任何腳本或鏡頭。每個事實都必須經過可靠來源驗證(在 script.json 的 "sources" 中列出)。健康相關主題必須準確、不得有血腥或令人恐慌的錯誤資訊。
3. 製作
- 執行
bash SKILL/scripts/new_video.sh <風格> <短片名稱>,將範例複製到~/faceless-shorts/<短片名稱>/。 - 撰寫
script.json(行 + 字幕 + 間隔;詳見 STYLE.md)。 - 時間設定:
SKILL/scripts/py SKILL/scripts/voice.py <專案目錄>然後SKILL/scripts/py SKILL/scripts/words.py <專案目錄>(自行錄音:words.py <專案目錄> --audio 他們的.m4a;僅字幕:estimate.py <專案目錄>)。 - 改寫
src/shots.js:每行一個鏡頭(長行可用兩個),每個鏡頭用cut(i)放置,並在單詞上使用Wd('單詞', line)設定關鍵時刻。重複使用工具箱(src/core/kit.js);在該風格外觀下,於此處新增元件。 - 在專案中:
node tools/capture.mjs check(必須顯示 CHECK OK)→node tools/capture.mjs cues→SKILL/scripts/py tools/mix.py .→ QA(第 4 節)→node tools/capture.mjs video renders/<名稱>.mp4。 若要疊代單一鏡頭:使用node tools/capture.mjs frames review/f "4.2,4.6"並檢視。
4. QA:絕不提供未經你親自檢視的畫面
執行 node tools/capture.mjs sheet review/all.jpg 0.5 10(每 0.5 秒一個畫面,帶時間戳記),並閱讀整張聯絡表,
然後以完整尺寸檢視關鍵畫面。針對每個畫面提出以下問題:
- 畫面合理嗎? 每個鏡頭只能有一種視覺模式:如果身體是 X 光,那麼它全部都必須是 X 光(X 光身體上不應出現襯衫袖子)。道具必須隨著握持它們的物體移動(口香糖在手到達嘴巴之前一直留在手中)。任何事物都不能在原因出現前出現。
- 它與該時刻的旁白一致嗎? 畫面應在其對應台詞開始前改變;揭示效果應落在其對應的單詞上。
- 是否有任何碰撞? 移動中的物體不得穿過標籤、藥丸、字幕區域(y 1250-1550)或彼此意外相交。
- 字幕: 1-3 個單詞,恰好一個黃色單詞,拼寫正確,在該單詞被說出時顯示,並在手機上清晰可讀。
- 風格表: 僅使用指定的色板、平面形狀;X 光視圖用青色,危險用紅色。
- 音效: 語音清晰度高於音樂;效果音輕柔(無刺耳的滴答聲或嗶嗶聲)。 修正後,重新渲染聯絡表,並再次檢查。向使用者回報你發現並修正了哪些問題。
5. 交付
為使用者開啟 MP4 檔案。同時提供:若檔案大於 35 MB,則提供分享版本(ffmpeg -i in.mp4 -c:v libx264 -crf 21 -preset slow -c:a aac -b:a 160k -movflags +faststart share.mp4),最佳封面畫格(capture.mjs frames)、標題、字幕以及 5-8 個主題標籤。
對於自行錄音模式,也提供腳本及其每行時間標記,供使用者邊讀邊對時。提供一次精確修改的機會,並僅重新渲染修改的部分。
5b. 透過 Zapier 發佈到 YouTube(僅當使用者要求上傳時)
所有呼叫皆使用程式碼模式工具:在 execute 中以 tools.zapier.* 執行(不要像一般工具那樣直接呼叫)。已於一次真實上傳中驗證過;以下值為精確值。
- 連接。 如果
list_zapier_skills中有儲存用於上傳的技能,則使用它。否則,請確保已啟用 YouTube 應用程式:discover_zapier_actions({ app: "YouTube" })→enable_zapier_action({ selected_api: "YouTubeV4CLIAPI", app_display_name: "YouTube", action: "upload_video" })。 如果尚無連線,manage_zapier_connections({ selected_api: "YouTubeV4CLIAPI" })會回傳一個連接 URL 給使用者。 - 託管檔案。 該動作的
video/thumbnail參數需要一個 Zapier 伺服器可以擷取的 URL;本地路徑會默默地失敗。 將 MP4 放到一個臨時託管服務上,依以下順序嘗試(所有服務均於 2026-11-03 測試;Windows 請使用curl.exe):- a. litterbox(1 到 72 小時後過期,最高 1 GB):
curl -F "reqtype=fileupload" -F "time=1h" -F "fileToUpload=@renders/<名稱>.mp4" https://litterbox.catbox.moe/resources/internals/api.php→ 以純文字形式回傳直接 URL。 - b. uguu.se(約 3 小時後過期,適合小於 35 MB 的短片):
curl -F "files[]=@renders/<名稱>.mp4" https://uguu.se/upload→ 回傳 JSON;使用files[0].url(d.uguu.se/...連結)。 - c. catbox(永久,不會過期):與 (a) 相同呼叫,但不加
-F "time=1h"。公開永久,因此必須獲得使用者同意。 - 跳過以下服務(於 2026-11-03 驗證為故障,不要浪費重試次數):0x0.st(上傳已停用)、tmpfiles.org(連結會導向檢視頁面,非原始檔案)、gofile.io(原始下載需要帳戶憑證)、file.io(curl API 會重新導向至網頁應用程式)、bashupload.com、temp.sh(已失效)。
- 務必在使用 URL 前進行驗證:
curl -sSI <url>必須回傳 200/206 狀態碼,且內容類型為影片。絕不要未經檢查就相信主機的 JSON。 - 告知使用者此舉會將他們的影片放到一個會自動失效的公開臨時主機上。
- a. litterbox(1 到 72 小時後過期,最高 1 GB):
- 先確認。 此操作會寫入使用者的真實頻道,因此在執行前必須確認:標題、隱私狀態(私人 / 不公開 / 公開)以及類別。
如有需要,使用
inspect_zapier_actions({ tool_name: "youtube_upload_video", enum_property: "category_id" })來解析category_id。 喜劇 = 23(奇幻故事 3D 和深度解析 3D 的預設建議)、教育 = 27、寵物與動物 = 15。 - 上傳。
execute_zapier_write_action({ selected_api: "YouTubeV4CLIAPI", action: "upload_video", tool_name: "youtube_upload_video", params: { video: "<暫存 URL>", title, description(以 #shorts 結尾), tags: [5-8 個不帶 # 的主題標籤], category_id: "23", privacy_status, made_for_kids: false, embeddable: true, notify_subscribers: true, default_language: "en", license: "youtube" } }) - 回報。 結果包含
id;連結為https://www.youtube.com/watch?v=<id>。長度 60 秒或更短的垂直影片會自動變成 Short(無需額外欄位)。 為使用者開啟本地檔案(tools.browser.preview({ path: "renders/<名稱>.mp4" }))並以文字形式提供 YouTube URL。應用程式內瀏覽器經常無法載入 youtube.com 並顯示 ERR_ABORTED;這不代表上傳失敗。 - 縮圖。 不公開的上傳無法透過此動作設定自訂縮圖;若使用者之後將影片設為公開,可提供儲存的封面畫格。
新增風格(當使用者要求時)
建立 styles/<新風格>/ 資料夾,內含 style-sheet.png、STYLE.md(與 Inside Out 相同的章節:外觀規則、色板、格式、
引擎/工具包對應、元件、鏡頭結構、提示類型、QA 陷阱)以及一個完整的 example/。
複製 Inside Out 的 tools/、index.html、src/main.js、src/core/{lib,timing,captions}.js,然後建立新外觀的工具包和鏡頭。
共享腳本(voice、words、estimate、new_video、selftest)無需修改即可使用。在上面的表格中新增一行,然後執行 selftest.sh 直到每種風格都通過。
3D 風格(深度解析、夜間檔案、奇幻故事)
它們使用 three.js 在 Headless Chrome 中渲染真正的 3D 圖形。有顯示卡時速度快且畫質高。沒有顯示卡時(例如沒有 GPU 加速的筆記型電腦、雲端沙箱),請在 node tools/capture.mjs ... 前面加上 SOFTWARE_GL=1 QS='&res=0.6&aa=0&shadow=1024' FPS=24 來渲染(每幀約 2 秒;事先告知使用者渲染時間,在背景執行,並先用 sheet review/all.jpg 1 10 進行 QA)。它們的 STYLE.md 檔案中列有 3D API。
絕對禁止
使用 AI 生成圖片或影片;花費使用者的金錢或點數;未經使用者要求並確認,即上傳到 YouTube 或任何主機;抄襲其他創作者的腳本、鏡頭或畫面; 未經詢問即覆寫使用者的專案;交付未經你親自檢視的畫面。