無臉說明影片小紅書
這是一個獨立的短影片製作路由,專門處理「真實內容截圖卡 + 動態風景背景 + 本地 BGM」的小紅書草稿。它不修改、也不替換現有的 $explainer skill;後者仍負責 16:9、配音和完整講解片。
帳號核心讀者是想要個人創業、正在學習 AI、並具備基礎商業與 AI 理解的人。截圖只是證據入口,真正的內容價值是把截圖中的洞察翻譯成這類讀者能判斷、能執行的動作。
先鎖定邊界
- 每條內容對用戶交付只有兩個:一個可開啟的
.mp4,一個同標題的.md發佈稿;同一週可以把多條內容的成對檔案直接放進同一個週目錄,內部追溯 manifest 不計入交付且不放週目錄。 - 預設放在
說明小紅書XX/第N週/,同一週的成片和發佈稿直接放在週目錄,不建單條內容子目錄。 - 發佈稿始終是
publish_status: draft;最終交付前title_status必須是locked。預設不自動登入、上傳、發佈、評論、按讚或關注;只有編者明確要求時,才可把指定成片和發佈稿上傳到已登入的小紅書創作中心並儲存為草稿,絕不點擊發佈。若使用者明確確認候選帳號清單,可在已登入 X 中逐個手動關注,不能批次腳本化或藉此做互動增長。 - X 內容必須來自使用者提供的截圖,或使用者已登入的 X App 中可見的貼文。不能繞過驗證碼、付費牆或權限,也不能重排截圖文字、虛構帳號/數字/日期。
- 預設不寫 X 來源行,除非使用者另行要求;來源和許可只放在素材庫元資料中。
- 一張截圖就是唯一的資訊卡。不得疊加逐字字幕、標題條、貼紙、Logo、片頭、片尾、CTA、第二張卡或人物角色。
- 使用者沒有給出事實證據時,標題和文案只能做清楚標註的概括,不把推測寫成事實。
- 每條成片都要有一份放在週目錄之外的內部
run_manifest.json,記錄截圖、背景、BGM、目標人群、選題評分、標題候選、正文結構、審核包、雜湊和人工確認;它不是發佈檔案,也不能放進週目錄。
何時使用
當使用者說「做說明小紅書」「把 X 截圖做成影片」「動態風景當背景」「配一首 BGM」「給我影片和發佈稿」時使用本 skill。需要操作已登入桌面/X App 時,先讀取可用的 computer-use/瀏覽器控制 skill;媒體探測和渲染用本地 ffprobe、ffmpeg 或已獲授權的剪輯工具。只要缺少截圖、背景、合規 BGM 或會改變事實含義的標題依據,就停在 WAIT_DATA/WAIT_USER,不要自行補造。
輸入與輸出契約
標題、50 字正文和標籤的生成與審核規則見 content-generation-contract.md。該參考檔案是本 skill 的內容生產標準,不是可選靈感。
最小輸入
- 一張 X 截圖,或一個能在已登入 X App 中定位的貼文。
- 一張使用者上傳的佈局參考圖,用於鎖定
source_crop_rect_px;如果使用者明確確認 X 截圖本身就是佈局參考圖,才可複用同一檔案。 - 一段動態背景影片。使用者未提供時,可從 Pexels/Unsplash 的明確下載頁面取得,並儲存許可/來源記錄;不能只憑搜尋結果頁使用素材。
- 一首本地 BGM,或允許從本地
說明小紅書BGM素材庫選擇。授權不明的音訊不得進成片。
可選:主題、目標情緒、週編號、使用者指定標題、是否保留原帖中的可見圖片區域;影片時長不作為輸入,永久固定為 8 秒。
影片固定規範
- 畫布永久固定為
1080×1440 px(3:4),預設30 fps、H.264 影片、AAC 音訊。 - 影片時長永久固定為
8 秒;不得調整為其他時長。 - 動態背景全幅鋪滿,可輕微降亮/暗角/模糊以托住卡片;不得把背景凍結成靜幀。
- 截圖卡寬度永久固定為
880 px,畫布左右邊距永久固定為100 px(100 + 880 + 100 = 1080)。 - 截圖卡先按使用者參考圖鎖定來源截圖裁切範圍,再以「填充 + 裁切(cover)」方式鋪滿
880 px寬;嚴禁使用 pad、letterbox 或任何補空白。不得改寫、重排或遮蓋關鍵文字。 - 截圖卡高度由參考圖鎖定後的截圖比例自然決定:若
logical_card_height <= 1440,則final_card_height = logical_card_height且y = floor((1440 - final_card_height) / 2);若超過 1440px,則先按source_vertical_crop_px = floor((logical_card_height - 1440) / 2)做居中垂直裁切,final_card_height = 1440、最終y = 0。兩種情況都不規定固定上下留白,也不得縮小寬度或補空白。 - 最終截圖可見層統一使用
24 px圓角蒙版(按 1080×1440 輸出像素計),在卡片最外沿向內統一繪製2 px淺灰描邊#C9D1D8,並增加柔和投影:黑色、16%不透明度、模糊半徑12 px、偏移(0, 8 px)、預留擴展36 px。描邊與投影屬於截圖卡本身,不改變卡片 880px 外尺寸或增加第二個資訊層。未提供參考圖時停在WAIT_USER,不鎖定裁切矩形。 - 截圖卡預設從 0 秒出現,作為影片最前面的唯一資訊卡並保持到結束;若使用者明確要入場動效,也只能在這張卡自身上做輕微、可讀的變化。
- 畫面只有「背景 + 一張截圖卡」。禁止額外字幕、貼紙、來源條、片頭、片尾和第二張資訊層。
- 預設只有一條 BGM 音軌,不加旁白;音樂覆蓋全片並做短淡入/淡出,避免削波和突兀截斷。
發佈稿固定規範
Markdown 基名必須與影片完全相同:<標題>.mp4 與 <標題>.md。正文預設嚴格 50 個漢字;計數只算正文中的中文漢字,不計標題、標點、數字、英文、標籤和狀態欄位。若使用者明確選擇寬鬆模式,才可使用 45–65 字。稿件只保留:
publish_status: draft
title_status: locked
copy_length: exact_50
platform: xiaohongshu
content_review_status: claude_approved
content_review_agent: claude
content_generation_agent: claude
editorial_review_status: codex_approved
editorial_review_agent: codex
# 標題
正文(正好 50 個漢字,包含一個吸引人的鉤子和一個清楚的收束)
#標籤1 #標籤2 #標籤3
不要把 BGM 許可、下載連結或製作過程塞進讀者文案。需要留痕時寫入素材庫 index.json 或內部執行結果,不增加週交付檔案。
工作流
- 接收與核驗:確認截圖、獨立佈局參考圖(或使用者明確確認截圖兼作參考圖)、背景、主題、週編號和素材庫狀態;列出缺口。標題若包含數字、因果或收益承諾,先檢查截圖是否真的支援。
- 截取內容:使用者授權操作 X App 時只截取當前可見內容;把原始截圖唯讀複製到臨時工作區,成片驗收後清理臨時副本,不刪除使用者的原始截圖、原始影片或原始音樂。
- 篩選、選題與 Claude 初稿:後續自動化只從已確認的 X 帳號池讀取公開貼文,先過
content-generation-contract.md的截圖品質門檻;通過後建立topic_packet並評分,再讓 Claude 生成 5 個標題候選、1 個推薦標題、2 個備用標題、四段正文和 5 個標籤。編者已經指定標題時直接鎖定該標題,Claude 只生成正文和標籤。Claude 輸出始終是素材稿,不能直接交付。 - Codex 深度主編與成稿審核:Codex 必須重新思考 Claude 初稿,重點審核鉤子、抓眼程度、真實痛點、衝突、身份認領、記憶句、行動價值和證據邊界;必要時完整改寫,而不是只壓字數。完成正好 50 個漢字與 5 個標籤的機械檢查後,再把最終成稿送 Claude 做合規複核;Claude 不可用時才切 Hermes 並記錄
fallback_reason。只有editorial_review_status: codex_approved,且合規狀態為claude_approved或合法的hermes_approved,才可進入交付。 - 選背景:優先使用使用者提供的影片;外部素材只從明確授權的官方頁面下載並記錄來源。按 3:4 裁切/縮放,不改變截圖卡的閱讀區域。
- 選 BGM:先執行
audit_bgm.py,再從approved、sync_allowed=true、commercial_allowed=true的本地記錄中按情緒、能量、時長和人聲狀態篩選,在最高分的 3–5 首中用固定 seed 抽取一首。pending只能作為候選建議;製作/交付必須使用--confirmed-only且human_listen_status=confirmed。AI 不替人做最終選擇。CC BY 曲目還必須有可放置的歸屬文字,否則淘汰。 - 合成:從來源截圖、背景和 BGM 重建完整時間線,用 ffmpeg/剪輯工具輸出 1080×1440 MP4。若發現錯誤,回到來源素材重建,不在已渲染 MP4 上疊加修補。
- 驗收:用
ffprobe強制檢查比例、幀率、H.264/yuv420p、AAC、單音軌、音訊從 0 秒開始且覆蓋畫面、時長為 8 秒(允許封裝誤差 ±0.05 秒);抽幀確認卡片清晰、沒有額外文字層;檢查音訊無爆音、無靜音開頭和明顯人聲衝突;文字必須先通過 Codex 深度主編,再通過 Claude 合規複核,或在 Claude 連接失敗且記錄原因時通過 Hermes 備用複核。 - 歸檔:在
說明小紅書XX/第N週/直接寫入恰好一個 MP4 和一個 Markdown;把內部 manifest 放到週目錄之外。只清理本次執行產生的臨時副本、臨時幀、日誌和備份版本,不清理使用者原始素材;保留 manifest 中的來源、許可和雜湊記錄;保持本地草稿,不做外部發佈。 - 小紅書草稿箱(僅使用者明確要求時):優先接管使用者已登入的電腦 Google Chrome 小紅書創作中心,不把 Codex 內建瀏覽器的登入狀態當作電腦瀏覽器會話。確認創作中心已登入後,上傳指定
.mp4,填寫同標題和 Markdown 中的最終正文/5 個標籤,等待處理完成後點擊「儲存草稿」或等價按鈕。儲存後必須用頁面提示、草稿列表或標題回讀做權威驗證,並把draft_upload_status、時間和草稿識別碼寫入週目錄外的 manifest。遇到登入、驗證碼、風控、版權聲明或其他需要使用者判斷的頁面,停在WAIT_USER;不得代點「發佈」、定時發佈、同步發佈或做任何互動操作。
Hermes / 無臉說明驗收硬約束
每次交付都必須記錄事實證據,不能只憑「看起來差不多」放行:
- 畫布:
ffprobe必須為1080×1440。 - 水平幾何:抽幀或濾鏡日誌必須證明截圖卡
x=100、w=880、右邊距=100。 - 填充裁切:截圖卡不得出現 pad、letterbox、白邊或透明補白;溢出內容必須來自 cover 裁切。
- 垂直幾何:未超高時
y=floor((1440-final_card_height)/2);超高時先記錄居中source_vertical_crop_px,最終卡片高度為 1440 且y=0。 - 圓角、描邊、投影與層級:最終截圖可見層的蒙版半徑為
24px,卡片最外沿內描邊固定為2px #C9D1D8,投影固定為黑色16%、模糊12px、偏移(0,8px)、擴展36px;畫面只能有動態背景和一張截圖卡。 - 可續作:manifest 寫明上述幾何值、使用者參考圖路徑/雜湊、
source_crop_rect_px、驗收時間、首幀/中幀/末幀路徑與雜湊、濾鏡日誌路徑和next_state;缺參考圖或證據時停在WAIT_USER。
圓角、描邊和投影必須在截圖卡進入合成前完成:先在卡片最外沿向內繪製 2px #C9D1D8 描邊,再用 scripts/make_rounded_mask.py --width 880 --height FINAL_CARD_H --radius 24 --output rounded-mask.pgm 生成最終尺寸的 PGM 蒙版並 alphamerge;從同一個圓角卡片 alpha 生成擴展、模糊和偏移後的投影,再把投影與原卡片合成到背景。不能在已渲染 MP4 上補層。manifest 必須記錄描邊與投影的全部固定參數。
意圖入口
把下列短語當作穩定的內部路由,不要求使用者了解腳本參數:
/xhs-card-video make
/xhs-card-video make --source x-app --week auto --bgm random --confirmed-only --record
/xhs-card-video make --source <screenshot> --background <video> --bgm <bgm-id>
/xhs-card-video bgm init --count 100
/xhs-card-video bgm ingest <file-or-folder>
/xhs-card-video bgm confirm <bgm-id> --status confirmed
/xhs-card-video bgm audit
/xhs-card-video bgm pick --mood rainy --energy low-mid --seed <seed> --confirmed-only --record
/xhs-card-video audit <week-folder>
/xhs-card-video audit <week-folder> --title <標題> --manifest <run-manifest.json>
/xhs-card-video audit <week-folder> --manifest <run-manifest.json>
對應腳本在本 skill 的 scripts/ 中。腳本是可複用的輔助工具,不代表已經執行了外部發佈。
本地 BGM 素材庫
預設路徑:
{{CREATOR_ROOT}}/說明小紅書BGM素材庫/
優先使用環境變數 PROOF_EXPLAINER_XHS_BGM_LIBRARY 覆蓋;舊變數 EXPLAINER_XHS_BGM_LIBRARY 僅為相容保留。當前首批庫有 100 首,分為 10 類:專注與日常、雨夜與天氣、氛圍與夢境、深夜與霓虹、溫暖與慢節奏、爵士與書店、輕鬆與日常、東方與禪意、復古與律動、世界與電影感。100 首只是可調用素材池,不是小紅書熱門 Top 100,也不構成趨勢排名。
元資料最低要求
每首曲目在 index.json 中至少要有:
{
"id": "bgm-001",
"relative_path": "audio/01_專注與日常/bgm-001__track.mp3",
"source_page_url": "https://…",
"download_url": "https://…",
"source_platform": "openlofi|user_local|manual_other",
"license_class": "cc0|cc_by|site_custom|user_owned|reference_only|blocked",
"sync_allowed": true,
"commercial_allowed": true,
"standalone_redistribution_allowed": false,
"license_checked_at": "YYYY-MM-DD",
"license_snapshot_path": "licenses/…",
"license_snapshot_sha256": "…",
"rights_notes": "…",
"trend_status": "verified|unverified|not_claimed",
"duration_s": 12.3,
"sha256": "…",
"review_status": "approved|review|rejected",
"human_listen_status": "pending|confirmed|rejected"
}
只有 review_status=approved、sync_allowed=true、commercial_allowed=true,且許可類別明確的曲目才可入片。reference_only 只用於靈感記錄,blocked 不得調用。使用者提供的本地影片音訊預設是 review;只有使用者確認擁有權利或獲得授權後,才可改為 user_owned。單獨打包/轉賣音訊的權限與「嵌入成片」不同,不能預設推斷。
首批庫使用 Open Lo-Fi v1.0.0 的固定發佈包,目錄中保留上游 catalog、README、LICENSE 快照和 SHA-256。README 宣告 CC0 1.0,但第三方樣本/地區性權利不由本 skill 獨立審計;rights_notes 必須保留該 caveat。若來源是 Pixabay、Mixkit、OpenGameArt、DOVA 等,必須逐條讀取官方許可頁面,不能批次抓取或把預覽 URL 當正式授權/下載證明。不要下載或重新分發 XHS/TikTok/Instagram 的受限熱門音源。
選擇規則
random 不是無約束隨機:
許可與解碼不合格 → 淘汰
情緒匹配 +4
能量/節奏匹配 +3
時長、可循環、純音樂 +2
近期已經使用 -1
人聲與截圖卡衝突 -3
先保留得分最高的 3–5 首,再用固定 seed 選擇 1 首;把 bgm_id、seed、篩選理由寫入 selection_history.jsonl,不把執行日誌帶進週交付目錄。
週目錄、檔案名稱與狀態
說明小紅書XX/
└── 第N週/
├── <標題>.mp4
└── <標題>.md
第N週預設取當前 ISO 週;使用者指定週數時以使用者為準。- 檔名就是已確認標題。只替換系統禁止字元、換行和
/,不要悄悄改成編號。 - 週目錄只能有成對的 MP4/Markdown 檔案,不放臨時素材、日誌或子目錄;包含多條內容時,用
audit_delivery.py --title <標題>審核指定的一對檔案。 - 週目錄的父目錄必須正好是
說明小紅書XX,週名必須符合第1週–第53週;內部 manifest 放在{{CREATOR_ROOT}}/.xhs-card-video-runs/(或使用者指定的週目錄之外路徑)。 - 內部狀態可寫成:
state: INTAKE | WAIT_DATA | WAIT_USER | WAIT_REVIEW | BUILD | AUDIT | local_ready
source_status: captured | supplied | missing
bgm_status: approved_confirmed | approved_pending_listen | review | missing
title_status: locked | draft
publish_status: draft
draft_upload_status: not_requested | pending | saved | blocked
draft_upload_platform: xiaohongshu | none
draft_upload_at: <ISO-8601 or null>
draft_entry_identifier: <title/url/id or null>
copy_length: exact_50 | range_45_65
platform: xiaohongshu
content_review_status: pending | claude_approved | hermes_approved | rework_required
content_review_agent: claude | hermes | none
content_generation_agent: claude | hermes | none
editorial_review_status: pending | codex_approved | rework_required
editorial_review_agent: codex | none
run_manifest: <absolute path outside week folder>
delivery_path: <absolute week folder>
next_state: DONE | WAIT_DATA | WAIT_USER
只有兩個最終檔案都可開啟、audit_bgm.py 與 audit_delivery.py --manifest … 全部通過、人工畫面/試聽已確認且沒有外部發佈動作時,才能報告 local_ready。
失敗處理
- 缺截圖/背景/可用 BGM:報告具體缺口,停在
WAIT_DATA,不下載無授權替代物。 - 標題會改變原帖事實:停在
WAIT_USER,給出需確認的事實邊界。 - 音訊無法解碼、雜湊重複或許可欄位缺失:從候選池淘汰,執行
audit_bgm.py,不要「先用再說」。 - BGM 仍是
human_listen_status=pending、manifest 缺失/在週目錄內,或 CC BY 歸屬沒有放置位置:停在WAIT_USER/AUDIT,不得報告local_ready。 - 渲染比例、卡片可讀性或音軌不合格:刪除該次臨時輸出,從來源素材重建;不疊加修補層。
- 任何公開發佈、定時發佈或互動請求:保持 draft,並明確需要使用者親自確認/執行;本 skill 只在使用者明確要求時代為上傳到小紅書草稿箱,且必須停在「儲存草稿」,不代發。
參考檔案
references/xhs-video-contract.md:畫布、卡片、音訊和渲染約束。references/bgm-library-contract.md:目錄、許可、欄位和選擇演算法。references/delivery-checklist.md:交付前可執行驗收清單。references/run-manifest.md:週目錄外的來源、許可、雜湊和人工確認清單。references/content-generation-contract.md:目標讀者、選題評分、Claude 初稿、Codex 深度主編、標題/50字正文/5標籤機制,以及最終合規複核路由。scripts/install_openlofi.py:從固定官方 release 初始化首批 100 首素材池。scripts/select_bgm.py:篩選並 seeded-random 選擇,不改動音訊。scripts/ingest_bgm.py:把使用者本地音訊放入待審核 inbox,不預設授予權利。scripts/confirm_bgm.py:只按使用者明確指定的 ID 記錄人工試聽通過/拒絕,不替人做決定。scripts/audit_bgm.py:檢查索引、路徑、解碼、雜湊和許可欄位。scripts/audit_delivery.py:檢查週目錄兩檔案契約、draft 狀態、內容審核狀態、幾何證據和 MP4 基礎流資訊。