Hao0321/video-autopilot-kitPublic

Fill-in-your-own-data framework for YouTube / short-form video automation: CapCut JSON + ffmpeg tooling + an onboarding questionnaire. Ships with zero private data.

AI summary: Framework and methodology template for automating YouTube and short-form video creation.

Stars
1.7K
+17 today
Forks
285
Watchers
4
Open issues
0
Open PRs
2
Contributors
~1
Commits
24
Branches
1

PythonMITCreated Jun 1, 2026Last push 1d agoLatest release v0.11.0+201 stars this week+208 this month

Star history

since May 31, 2026
05001K1.5KMay 2026Jun 2026Jul 2026Aug 2026
1.7K stars as of Aug 7, 2026, tracked back to May 31, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 2 commits2026-06-02: 1 commit2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 1 commit2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 3 commits2026-06-16: 1 commit2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 1 commit2026-06-21: 0 commits2026-06-22: 1 commit2026-06-23: 5 commits2026-06-24: 0 commits2026-06-25: 1 commit2026-06-26: 0 commits2026-06-27: 1 commit2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 3 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 1 commit2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 1 commit2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
22 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Rising fast

    +201 stars this week

  • Actively maintained

    Pushed within 48 hours

  • Permissive license

    MIT

What video-autopilot-kit does

video-autopilot-kit provides a structured framework for automating video content creation using Python, ffmpeg, and CapCut. It is not just a script, but a methodology template where users answer a questionnaire about their specific channel to customize the output. The system generates purely programmatic video pipelines while ensuring no private data or analytics are committed to the repository. It relies entirely on public information and emphasizes a citation-first approach for referenced strategies.

Content creators, YouTubers, and video marketers looking to scale their production through automation. Users need basic Python knowledge to configure and run the programmatic pipelines.

  • ffmpeg pipeline: offers pure programmatic video processing and generation.
  • CapCut integration: automates editing workflows within the popular CapCut software.
  • Questionnaire customization: adapts the system to individual channels based on user input.
  • Strict privacy: ensures personal profiles and analytics data are kept strictly local.
  • Citation-first methodology: requires explicit links for any referenced third-party creator tactics.

Where teams use it

Shorts automation

Rapidly generate bulk short-form content for YouTube Shorts, TikTok, or Reels.

Channel scaling

Systematize video production for creators managing multiple niche channels.

Template-based editing

Standardize video formats and effects using repeatable ffmpeg and CapCut scripts.

Strategy documentation

Codify successful video strategies and KPI thresholds into a reproducible system.

Getting started: git clone https://github.com/Hao0321/video-autopilot-kit.git

README

main branch

🎬 video-autopilot-kit

一套框架式的 YouTube / 短影音自動化工具 + 方法論模板。 給你純程式 ffmpeg pipeline + CapCut 自動化的程式碼,加上一份「問卷」—— 你回答關於你自己頻道的問題,它就變成屬於你的系統。

⚠️ 不含任何人的私人數據 —— 後台讀數(自己的與別人的)/個人檔案一律不進 repo(profiles/config.py 是 gitignored 本機檔)。 兩類具名例外,兩類都是公開資訊不是私人數據:① LICENSE 與各 README 的作者署名; ② knowledge/ 引用第三方公開創作者/頻道時會直接寫名字(例如演算法檔引用的公開戰術、 teaching-niche-playbook.md 的參考頻道列),規矩是 citation-first:沒有可點的出處連結就不給數字。 voice 詞表、KPI 門檻與社群欄位要嘛是空白模板<fill in> / ______ / 產出檔的 {你的…} 佔位字樣),要嘛標示為「範例值」,你填你的。 反過來說:knowledge/ 裡的方法論原作者的實戰結論,那是刻意開源的部分 —— 是「怎麼想」,不是「他的數字」。

🧭 我該走哪條路?(3 秒決策樹)

  • 用 Mac / Linux?Path 1 Programmatic(純程式,跨平台,不碰 CapCut)
  • 要 CapCut 的特效 / 花字 / 雲端模板?Path 2 CapCut-assisted(Windows 優先;版本敏感,先看 TROUBLESHOOTING 的版本相容矩陣)
  • 只想全自動、不想開任何 GUI?Path 1 Programmatic

▶️ 60 秒看它跑(不用 CapCut、不用真素材)

想先看它真的會動examples/ 裡有自包含、可直接跑的 demo —— 用 ffmpeg 合成測試素材,不需要任何真實影片或 CapCut:

python examples/01_vertical_short.py      # 合成素材 → 完整 1080x1920 直式 Short
python examples/02_caption_broll_match.py # 零設定:b-roll 用內容命名就自動對位字幕
python examples/04_shorts_gate.py         # 直式 Shorts 閘門:壞剪法被擋 → 修好放行 → 換你的門檻放行 → 換平台也放行
python examples/05_interview_plan.py      # 訪談來賓閘門:沒來源的數據在「錄影之前」就被擋下
python examples/06_teardown.py            # 競品拆解數學:中位數騙人、標準差不騙人、換句÷剪點是拍攝決策

需求:Python 3.9+。04 / 05 / 06 連 ffmpeg 都不用(純 Python、零 pip install、零素材);01 需要 ffmpeg/ffprobe,03 另需 Pillow + numpy。細節見 examples/README.md

為什麼不一樣

市面上的「creator 系統」要嘛賣你某個人的設定(抄了對你沒用、還可能誤導), 要嘛太通用沒有方法論。這個 kit 給你骨架(經實戰的結構), SETUP.md 一區一區問你問題,用你的答案填滿它 —— 這樣它才真的是你的系統。

🆕 v0.11.0 新增 — 把「借來的數字」清出去

這一版沒有拿掉任何功能,拿掉的是借來的把握。四個地方犯的是同一種錯: 一個沒人量過的數字,掛上權威標籤,比沒有數字更糟 —— 因為你會信它。

  • Shorts 片長帶改平台感知 —— 死區是在 YT Shorts 上量出來的,套到 IG/FB 會擋掉正常的剪法。 改用 spec["platform"] 選帶(rules= 仍逐鍵優先);平台名打錯是擋下的失敗,不是靜默 fallback
  • 腳本 gate 的四層詞表改成出貨即空 —— 行話分級只能從你自己的逐字稿審計出來; 照抄別人的白名單 = 用別人的觀眾檢查你的稿。空表不擋你(只回一條 warn),load_vocab() 載你自己的
  • 演算法線補上合規層+「沒出處就不引用」 —— knowledge/ai-content-compliance.md(R26-R38 + 發布前 10 項 checklist) + 53 條分級法源;查無官方出處的門檻數字就地標記,不再與有出處的並排
  • 新工具 src/teardown.py —— 一個指令把競品直式短片拆成可比較的數字(刀速/刀距分布/換句速率/換句÷剪點/LUFS); OCR 是選配,沒裝只跳過字幕抽取、退出碼仍是 0

完整清單(含兩個靜默失敗修復)→ CHANGELOG

三條同構的生產線(v0.10 起)

以前這個 kit 只回答一件事:「怎麼把一支長片做好。」現在是三條生產線 —— 而且刻意長成同一個形狀知識層(為什麼這樣做)→ 機械閘門(不靠任何人記得)→ 一鍵驅動(幾個指令跑完)。 學會一條就等於學會三條;要加第四條(Podcast?教程系列?)也照這個骨架接。

生產線 知識層(為什麼) 機械閘門(擋在前面) 一鍵驅動
教學長片 knowledge/premium-motion-fx.mdknowledge/meta-lessons.md+腳本三支柱 script-style-framework.mdscript-retention-craft.md plan_gatescript_gate(觀眾語言 fail/節奏 warn)→ delivery_qa(profile='teaching_longform') src/longform_maker/ 各模組
直式 Shorts knowledge/shorts-mastery-2026.mdknowledge/vertical-teardown-method.md(怎麼量競品) src/longform_maker/shorts_gate.py 九條結構/字幕規則擋出片 + S-O 換句節奏 warn;片長帶平台感知(YT 的死區不套用到 IG/FB),純 Python src/shorts_autopilot.py scan → 看畫面填字 → build(含自動 QA 驗證圖)
線上訪談 knowledge/interview-show-playbook.md src/interview_gate.py I-A~I-E:沒來源的來賓數據不上鏡 src/interview_autopilot.py inviteplan(產 7 件套)→ build
  • 閘門共用外殼 src/longform_maker/gate_core.py —— 回傳結構 / assert 訊息 / self-test 印法一致, 你自己加的閘門 import 三個函式就跟內建的行為一模一樣(判定規則各自留在自己的檔,不集中才不會互相污染)
  • 經營層(v0.9 起):src/channel_tracker.py D2/D7/D28 快照排程+待辦、src/system_health.py 一鍵 GREEN/RED 健檢 → 接線指南 knowledge/ops-automation.md;爆款定義框架 knowledge/viral-playbook-framework.md
  • ⚠️ 兩道閘門裡的門檻數字都是範例校準值,不是宇宙常數 —— Shorts 片長帶 / 首刀秒數 / 非白字上限請用你自己的 3-5 支片重算 (做法見 SETUP.md 的「Shorts 規則校準」)

內容 —— 兩條 first-class path

這個 kit 有兩條同等地位的路,不是「主力 vs 次要」:

跟上面的「三條生產線」是不同的軸:生產線=你在做哪種片(長片 / Shorts / 訪談); path=你用什麼方式做(純程式 vs CapCut)。三條生產線都可以走 Path 1。

路徑 模組 是什麼 平台
Path 1 — Programmatic(推薦採用者預設) src/longform_maker/ 教學長片模組 —— fx_lib premium 動態引擎(亞像素 Ken Burns / 雙層 bloom / light sweep / easing / 合成 SFX)、word_captions 字級時間字幕(M105)、screen_clean 螢幕錄影機械化清理(M104)。參數真值 → knowledge/premium-motion-fx.md Win / Mac / Linux
Path 1 — Programmatic src/silent_vlog_maker/ 純 ffmpeg pipeline —— 直式 Shorts(多色字幕 / BGM 高光起點 / 正規化)、靜音 vlog、素材清理 Win / Mac / Linux
Path 1 — Programmatic(v0.10) src/shorts_autopilot.py + src/longform_maker/shorts_gate.py 直式 Shorts 生產線 —— scan 正規化 9:16 + 抽接觸表 + 產 _plan.py 骨架 → 你(或 AI)看畫面填字build 過閘門、成片、自動 QA 出驗證圖。閘門本身純 Python(連 ffmpeg 都不用)。v0.11:片長帶改平台感知spec["platform"]rules= 仍優先),新增 S-O 換句節奏 warn Win / Mac / Linux
Path 1 — Programmatic(v0.10) src/interview_autopilot.py + src/interview_gate.py + templates/interview/ 線上訪談生產線 —— 來賓資訊 → 邀約訊息 / 主持台本 / 訪綱 / 準備包 / 授權書 / 錄製 checklist / 發布套件 / Shorts 切條,全部從模板 render;來賓數據沒來源就擋在錄製前 Win / Mac / Linux
Path 1 — Programmatic(v0.11) src/longform_maker/script_gate.pytemplates/style_profile.template.mdtemplates/audience_vocab.example.json 腳本線(錄音前擋稿) —— gate(text):觀眾語言 fail 級/留存節奏 warn 級。觀眾語言四層詞表隨 kit 出貨是空的(只能從你自己的逐字稿審計出來),空表時不掃詞、只回一條 lang.no_vocab warn,load_vocab("你的.json") 載你自己的。知識層 → script-style-framework.md(語氣)+script-retention-craft.md(觀眾語言+節奏) Win / Mac / Linux
Path 1 — Programmatic(v0.11) src/teardown.py 競品拆解 —— 一個指令量出刀速/刀距中位+標準差/換句速率/換句÷剪點節奏判讀/LUFS。統計那半邊純 Python;OCR(燒錄字幕抽逐字稿)是選配,缺套件只降級不崩潰。方法論+量測坑 → knowledge/vertical-teardown-method.md Win / Mac / Linux
Path 1 — Programmatic(v0.10) src/longform_maker/gate_core.pysrc/av_util.py 共用底座 —— 所有閘門的統一外殼(report / assert / self-test)+ autopilot 共用機械動作(subprocess / ffprobe 時長 / 抽幀 / 接觸表) Win / Mac / Linux
Path 1 — Programmatic src/capcut_helpers/QA gates 交付前機械化 QAdelivery_qa:頻閃·死空檔·caption-sync·全幀掃描 M91-M95 / broll_audit 占比 / caption_broll_matcher 對位)—— 純 ffmpeg/Python,不需要 CapCut,兩條 path 的成品都該過這關 Win / Mac / Linux
Path 2 — CapCut-assisted(作者本人主用) src/capcut_helpers/ 其餘 CapCut Desktop 自動化 —— 草稿 JSON 直改(draft I/O / 4-level 靜音 / 花字 / AI 字幕校正)+ AI 助手 + Computer Use 操作 CapCut 視窗(套模板 / 匯出)。版本敏感TROUBLESHOOTING Windows-first
共用 knowledge/ 影片製作知識庫 —— M1-M111 避坑大全 + 演算法 + SOP + 剪輯心法(索引 → knowledge/README.md
共用(v0.11) knowledge/ai-content-compliance.md-sources.md AI 內容合規 —— R26-R38 十三條規則 + 發布前 10 項 checklist(擬真揭露/原創貢獻/防模板化/深偽三不/語音克隆邊界/只引用有官方出處的數字)+ 53 條分級法源([official][reported][speculative])。⚠️ 截至 2026-07 的整理、各地法規不同、不是法律意見
共用 ▶️ examples/ 自包含可跑 demo —— ffmpeg 合成素材,60 秒看 pipeline 真的動(不用 CapCut/真素材)
共用 SETUP.md 從這開始 —— 回答問題讓系統變成你的
共用 templates/ voice / 品牌 / 演算法 / 社群 的空白填寫模板;v0.10 加 show_profile(節目設定)與 templates/interview/ 11 份訪談交付模板 —— 改話術改模板,不要改程式
共用 config.example.py 路徑設定範例(複製成 config.py 填你的,範例不含任何帳號名

誠實聲明:原作者的私人流程以 Path 2(CapCut) 為主 —— 但那是因為他的素材、模板、肌肉記憶都在 CapCut 上。 開源採用者多數應該從 Path 1 開始:跨平台、無 CapCut 依賴、不吃 CapCut 版本變動、全程可重現。 需要 CapCut 的花字/雲端模板時再上 Path 2。

Platform support

模組 Windows macOS
Programmatic(longform_maker / silent_vlog_maker / QA gates) ✅(路徑/字型由 src/platform_compat.py 探測;Linux 同)
CapCut 草稿 JSON 直改(capcut_helpers draft I/O) ✅ 本機親測 ⚠️ 路徑已支援(CAPCUT_USER_DATA env override + detect_draft_format()),自動化未在 Mac 實測
Computer Use GUI 自動化(套模板 / 匯出) ❌(CapCut Mac 無 AppleScript dictionary;見 TROUBLESHOOTING 的 Mac 節)

🚀 快速開始

  1. SETUP.md → 照問題把 templates/*.template.md 填成 profiles/*.md (或把整個 repo 丟給 Claude / ChatGPT,說「照 SETUP.md 問我問題,幫我生成 profiles/」)
  2. cp config.example.py config.py → 填你的素材 / 匯出路徑(走 Path 2 才需要 CapCut 路徑)
  3. 選路:Path 1 裝好 Python + ffmpeg 就能跑;Path 2 額外裝 CapCut Desktop + 開啟 AI 助手的 Computer Use(見下方需求)
  4. 開始用 src/ 的工具

需求

Path 1 — Programmatic(推薦採用者預設;Win / Mac / Linux)

  • Python 3.9+
  • ffmpeg / ffprobe(在 PATH 上)
  • 不需要 CapCut、不需要 Computer Use —— 整條 pipeline 都是可重現的程式碼
  • Mac/Linux:系統路徑與 CJK 字型由 src/platform_compat.py 自動探測(不要 hardcode 系統字型路徑)
  • 唯一需要 pip 套件的是 src/shorts_autopilot.py(一鍵直式 Shorts 流程):Pillow + numpy —— 用來分析畫面品質、拼接觸表、抽 QA 驗證圖。 規則閘門 src/longform_maker/shorts_gate.py 這個檔案本身是純 Python(連 ffmpeg 都不用), 只想用閘門就不必裝任何東西 → python examples/04_shorts_gate.py⚠️要平面 import(把 src/longform_maker/ 加進 sys.pathfrom shorts_gate import …, 範例 04 就是這樣寫的);走 from longform_maker.shorts_gate import … 會經過套件 __init__, 那裡會載入 fx_lib(需要 numpy + Pillow)。或直接把 shorts_gate.py + gate_core.py 複製走。
  • 訪談生產線(src/interview_autopilot.py / src/interview_gate.py)的訪前企劃全程純 Python —— 產 7 件套不需要 ffmpeg 也不需要 pip 套件;ffmpeg 只有錄完 build 才用得到 → python examples/05_interview_plan.py
  • 競品拆解 src/teardown.py兩個選配套件(其餘功能都不需要它們): rapidocr-onnxruntime(本機實測裝完約 25MB 量級,不拉 torch/paddle)+ opencc-python-reimplemented(簡轉繁)
    • 不裝會少什麼:只少「把對方燒錄字幕自動抽成逐字稿」這一段。刀速/刀距分布/ 換句速率/換句÷剪點判讀/LUFS 全部照跑,退出碼仍是 0,工具會印出安裝指令。
    • 只裝 OCR 沒裝 opencc → 逐字稿照抽,只是不做簡轉繁(會混雜簡體字)。
    • 統計那一半(rhythm_stats / pace_profile)是純 Python,連 ffmpeg 都不用 → python examples/06_teardown.py
    • ⚠️ OCR 只讀得動燒錄字幕(0.92-1.00),實景招牌準確率 ≈ 0,而且讀錯時信心值仍有 0.85-0.92 —— 門檻擋不掉。 所以它只能拿來讀別人的片, 不可以拿去自動生成你自己影片的品名/價格字幕 → 邊界說明見 knowledge/vertical-teardown-method.md §2-8

Path 2 — CapCut-assisted(作者本人主用;Windows-first、版本敏感)

  • CapCut Desktop 國際版(有 Pro 更好)—— 剪輯 / 套字幕 / 套模板在這。⚠️ 版本敏感:草稿 JSON 直改對版本有相容矩陣(剪映 CN 6.0+ 已加密不可直改)—— 動手前先讀 TROUBLESHOOTING,並用 detect_draft_format() 驗明文
  • AI 助手 + Computer Use(Claude Desktop / Claude Code 等)—— GUI 自動化(套雲端模板 / 匯出)必需;Mac 上沒有可用的等效機制(見 TROUBLESHOOTING 的 Mac 節)
  • Python 3.9+ 與 ffmpeg / ffprobe —— 匯出後的後製:BGM loop / 修剪到人聲尾 / player-safe 重編

(選用) AI 助手(Claude / ChatGPT)也能照 SETUP.md 自動把你的答案生成 profiles。

設計理念

一套創作系統最值錢的是結構與方法論,不是某個人的私人數字。 所以這個 repo 給你骨架,你用自己的血肉填滿。

License

MIT — 保留標註即可自由使用 / 修改 / 商用。

Author

Hao0321 Studio — 從一套實戰的個人創作系統抽出來的開源框架。

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

15 total
  1. **The tables ship empty on purpose.** This release adds the two things the kit was missing — how to write the script, and how to read the algorithm — plus a tool for measuring other people's vertical videos. ### Empty tables, and why The script gate checks your narration against an audience-vocabulary table: words your viewers actually use, words to substitute, jargon that needs a plain-language partner, jargon that never goes in a voiceover. Every one of those tables ships **empty**, with a documented method for building them from your own scripts. A vocabulary list derived from someone else's audience checks your writing against the wrong readers. Shipping a filled table would feel more generous and be worse. With an empty table the gate warns once and lets you through, so you can run first and build the table as you go. Same principle throughout: the two-machine model ships as shape, lifespan, and read-outs with a six-step SOP to calibrate the thresholds on your own 3–5 videos. Every threshold is `<fill in>`. ### OCR that only reads one direction `src/teardown.py` measures any vertical video — cut rate, caption change rate, the ratio between them, and an OCR-extracted cap

  2. **Making the wrong edit structurally impossible.** This release grows the kit from one production line into three — long-form, vertical Shorts, and interview show — each built the same way: a knowledge layer, a mechanical gate, and a one-command driver. ### The idea worth stealing, even if you never run this code `expand_caps()` binds captions to **segment indexes** and derives their timings from the segments. Nobody touches a timeline number. The bug it kills is a nasty one. A caption gate that checks "this caption must not span a cut" passes a whole file of captions that are each shifted one segment late — because every one of them *does* sit inside a segment. Just the wrong segment. The gate is green, the video is wrong, and you only find out when a human watches it. Bind to indexes instead and that class of error cannot be expressed. ### Two silent failures fixed (both were in previous releases) - **Fake green.** `final_delivery_qa` had no profile gate — passing only a video printed `DELIVER OK`. It now forces the full gate set and BLOCKs on missing inputs. The signature is also keyword-only after `video`, because the positional form that earlier docs showed bound `ass` →

  3. Making videos is half the job. v0.9 covers the other half: running the channel without relying on memory. **New** - `src/channel_tracker.py` — per-video D2/D7/D28 snapshot scheduling + pending-action tracking; one command prints what's due today - `src/system_health.py` — one-command health check (every module self-test + core files, single GREEN/RED) - `src/longform_maker/plan_gate.py` — packaging-first gate: no 8 title×thumbnail pairs = don't start writing - `src/longform_maker/script_gate.py` — pre-recording gate v2: cold-open rules + audience-language vocab tiers (fill-in-your-own) + retention-rhythm checks - `knowledge/viral-playbook-framework.md` — define "viral" with your own data; six-station hit-rate system; adversarial-verification methodology (CONFIRMED/PLAUSIBLE/REFUTED grading) - `knowledge/ops-automation.md` — wiring guide incl. daily scheduled AI patrol template with hard safety rules **Fixed** - cp950 console crash in invariants self-test; re-hook positions unified to 25/50/75 across docs Zero private data, as always — all vocab tables and thresholds are examples you replace with your own. See CHANGELOG for details.

  4. **Built from adopter feedback**: CapCut workflow pain points, CapCut version differences, Mac users, and many of you preferring the fully-programmatic pipeline. This release addresses all four. ## Highlights - **🖥️ Cross-platform (`src/platform_compat.py`)** — CJK font auto-discovery (Windows 微軟正黑 / macOS PingFang / Linux Noto), CapCut & Jianying **drafts-dir detection on Windows AND macOS**, per-platform ffmpeg screen-capture args (gdigrab / avfoundation / x11grab). 14 files de-hardcoded from Windows assumptions — existing Windows behavior unchanged. - **📦 CapCut version compatibility** — `draft_io.detect_draft_format()`: encrypted / newer-format drafts now fail with **clear guidance** (which versions keep editable JSON, and your two ways forward) instead of crashing mysteriously. Plus a version compatibility matrix in TROUBLESHOOTING. - **🛣️ Two first-class paths** — README repositioned honestly: **Path 1 = Programmatic** (cross-platform, no CapCut dependency — the recommended default for adopters, and the path many of you told us you prefer) / **Path 2 = CapCut-assisted** (Windows-first, version-sensitive). A 3-line "which path should I use?" decision tree up top + a platfor

  5. **The biggest visual-quality jump in the kit so far** — v0.6.0 fixed the sound, this one fixes the picture. ## Highlights - **`src/longform_maker/fx_lib.py`** — premium-motion engine: sub-pixel float Ken Burns (the anti-`zoompan`, zero integer jitter), double-layer additive bloom (4px+16px), 45° light sweep, full easing library (`ease_out_expo`/`smootherstep`/…), stagger scheduler, per-frame film grain + vignette, and a fully **synthesized SFX kit** (whoosh/pop/tick/riser/hit — no audio assets needed). Real self-test. - **`word_captions.py` (M105)** — captions from **whisper word-timestamps**: auto line-break at real pauses, mishear fixes *before* line-breaking, master-timeline (speed-aware) conversion, optional one-keyword-per-line emphasis. Never hand-guess long-segment splits again (they drift 2-3s). - **`screen_clean.py` (M104)** — screen recordings are default-toxic: enforced head+tail trim (recorder UI lives at *both* ends), chrome crop, blur-pad, and `blur_boxes` targeted blurs for center-frame UI text cropping can't save. - **4 new mechanical QA gates** in `delivery_qa`: caption-sync spot-check, full-frame contact sheets (edge strips can't see center-frame floaters), scene

Commits per week

last 52 weeks
80Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 3 commitsWeek of 2026-06-07: 1 commitsWeek of 2026-06-14: 5 commitsWeek of 2026-06-21: 8 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 3 commitsWeek of 2026-07-12: 1 commitsWeek of 2026-07-19: 1 commitsWeek of 2026-07-26: 0 commitsAug 3, 2025Jul 26, 2026
22 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 0 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 1 commitsMon 2:00 — 1 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 0 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 0 commitsMon 17:00 — 0 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 1 commitsMon 21:00 — 1 commitsMon 22:00 — 3 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 1 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 1 commitsTue 10:00 — 1 commitsTue 11:00 — 0 commitsTue 12:00 — 0 commitsTue 13:00 — 0 commitsTue 14:00 — 0 commitsTue 15:00 — 0 commitsTue 16:00 — 0 commitsTue 17:00 — 0 commitsTue 18:00 — 0 commitsTue 19:00 — 0 commitsTue 20:00 — 0 commitsTue 21:00 — 1 commitsTue 22:00 — 2 commitsTue 23:00 — 3 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 0 commitsWed 16:00 — 0 commitsWed 17:00 — 0 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 0 commitsWed 22:00 — 0 commitsWed 23:00 — 1 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 0 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 0 commitsThu 16:00 — 0 commitsThu 17:00 — 0 commitsThu 18:00 — 0 commitsThu 19:00 — 0 commitsThu 20:00 — 0 commitsThu 21:00 — 1 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 0 commitsFri 1:00 — 1 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 0 commitsFri 13:00 — 0 commitsFri 14:00 — 0 commitsFri 15:00 — 0 commitsFri 16:00 — 0 commitsFri 17:00 — 0 commitsFri 18:00 — 0 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 2 commitsFri 22:00 — 0 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 1 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 0 commitsSat 15:00 — 0 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 1 commitsSat 20:00 — 0 commitsSat 21:00 — 0 commitsSat 22:00 — 1 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits1 (5%)
Community commits21 (95%)

22 commits in total over the last year.

DateListRankStars gained
Jul 12, 2026daily#17+3