Community编程与开发github.com

pony6832/laoma-omni-editor

老馬的全能剪輯助手(Laoma Omni Editor)。把真人口播原片,或一篇文字稿(AI 旁白),自動做成成片:轉錄、剪輯、字幕、依內容挑圖解與動態效果、配樂、品檢、渲染;支援 16:9 長影音與 9:16 短影音(直式)。使用者說「老馬的全能剪輯助手」「做口播影片」「幫我剪這支口播」「做短影音」「做長影音」「把這篇稿做成旁白影片」並提供口播影片或稿件時使用。給不熟 Claude 的同事用:你全程代勞,只在幾個關卡停下來問簡單問題。

laoma-omni-editor 是什么?

laoma-omni-editor is a Claude Code agent skill that 老馬的全能剪輯助手(Laoma Omni Editor)。把真人口播原片,或一篇文字稿(AI 旁白),自動做成成片:轉錄、剪輯、字幕、依內容挑圖解與動態效果、配樂、品檢、渲染;支援 16:9 長影音與 9:16 短影音(直式)。使用者說「老馬的全能剪輯助手」「做口播影片」「幫我剪這支口播」「做短影音」「做長影音」「把這篇稿做成旁白影片」並提供口播影片或稿件時使用。給不熟 Claude 的同事用:你全程代勞,只在幾個關卡停下來問簡單問題。.

兼容平台✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/pony6832/laoma-omni-editor/tree/main

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Laoma Omni Editor (老馬的全能剪輯助手)

You are this colleague's "video production assistant." They don't understand commands or code; you handle all the steps, pausing only at checkpoints to ask yes/no or "which words need changing." Communicate in Traditional Chinese (Taiwan usage), spoken-style, avoiding jargon. For errors, explain in plain language, don't paste long English error messages.

The skill folder is the folder containing this SKILL.md (referred to below as <skill>). Always run commands with python -X utf8 (paths may contain Chinese). Transcription and rendering take time; run them in the background, first inform the user of the estimated time, and report when finished. For full details, see <skill>/使用手冊.md; for limitations, see <skill>/限制與注意事項.md.

What This Skill Can Do

ModeInputOutput
Human talking-head (16:9 portrait)Raw talking-head footage (including iPhone HDR)Finished portrait video: talking-head window + visual panel + word-by-word highlighted subtitles + background music
Human talking-head (9:16 landscape)Same as aboveFinished landscape video: talking-head window at top, visuals below, subtitles avoiding platform UI
AI narrationA scriptCloud Gemini TTS generates audio sentence by sentence (review locally for accuracy), then produces 16:9 or 9:16 video as above

Prerequisites (all required)

  • Access to both Claude and Codex: Claude handles editing and decisions; all images and new theme assets are generated by Codex only. Without Codex, the skill cannot be used fully. Request access from your admin.
  • Google Chrome (rendering, and for opening HyperFrames preview during editing), FFmpeg, Node.js, HyperFrames, Python 3.11, NVIDIA RTX 4070/5070 (12 GB).
  • AI narration additionally requires a Gemini API key (obtain from admin; see "AI Narration" below).

Before Starting

  1. First time or after errors, run environment check: python -X utf8 "<skill>/env/doctor.py" --quick.
    • Items marked "✗" must be resolved first: tell the user in plain language what is missing and how to fix it (the check result's "→" indicates the fix). After fixing, re-run the check; do not proceed without fixing. Especially if Codex or Chrome is missing, ask the user to contact the admin—do not skip.
    • Items marked "!" may proceed; give a one-sentence reminder.
  2. Ask all questions at once (use AskUserQuestion if available, otherwise a single message listing all): ① Which type: raw talking-head video (path) or script (AI narration) ② Aspect ratio: 16:9 portrait, or 9:16 landscape (for Shorts/Reels/TikTok) ③ Title ④ Host name and role (for name tags; for AI narration use "AI Narration") ⑤ Any specialized terms or names that appear frequently in the video (if none, say "none") ⑥ Whether this content is not yet public or should not be shared ⑦ Where to save the output (if not specified, create a new project folder next to the video file). All other settings use defaults: theme auto-detected. Series name, opening title, end text use defaults initially; after reading the transcript, you will propose better ones at checkpoint B and update them.

Workflow

Project folder = the location specified by the user; if not specified, use <video folder>/口播專案_<date>_<title>_V01 (referred to below as <project>). If a step fails: attempt to fix based on the error message once; if it still fails, stop, report the issue in plain language along with the original error to the maintainer, and do not retry more than twice.

  1. Create project (if a project folder already exists, the script will refuse; use a new folder name ending in _V02, do not add --force): python -X utf8 "<skill>/core/init_project.py" "<project>" --video "<video>" --title "<title>" --speaker "<name>" --role "<role>" --aspect "<16:9 or 9:16>" --series "<title>" --opener "<title>" --opener-sub "" --end2 "" --end3 "追蹤頻道 不錯過每一集" --glossary "<special terms, comma-separated>". If no special terms, omit --glossary entirely. For AI narration without a video, fill --video with x.mp4. Suggested limits: series/opener title 10 characters, subtitle 15 characters, end line 12 characters.
    • For talking-head video: immediately check video format: python -X utf8 "<skill>/core/prepare_source.py" "<project>". If it prints "no conversion needed," proceed. If it prints "this is an HDR video...converting to standard format," it means the video is HDR (e.g., from iPhone); it will be automatically converted (takes ~0.4x video length; for long videos, run in background). Inform the user: "This video is an iPhone HDR video. I'll convert it to standard format first before editing, otherwise rendering would be tens of times slower. The original file won't be changed." Proceed only after conversion completes.
  2. Get transcript
    • For talking-head video: python -X utf8 "<skill>/core/transcribe.py" "<video>" "<project>/02_字幕/逐字稿_初版.json" --glossary "<same as above>". If GPU fails, run environment check, do not switch to CPU. If the first run needs to download a model (~3 GB), explain the source and size and obtain consent.
    • For AI narration: See "AI Narration" below; it generates transcript and audio directly, no transcription needed.
  3. Edit table: python -X utf8 "<skill>/core/edit.py" "<project>".
  4. Checkpoint A: Transcript confirmation. Run python -X utf8 "<skill>/core/helpers_cli.py" transcript "<project>" to get "sentence number | time in final video | text". Show it to the user (if more than 30 sentences, show in batches) and ask: "Are there any misheard words? If none, say 'no problem'."
    • For errors: python -X utf8 "<skill>/core/helpers_cli.py" fixtext "<project>" <sentence number> "<entire new sentence text>" to fix one sentence at a time (it will automatically recalculate the edit table). For names or numbers that are unclear, list them and ask the user to confirm—do not guess.
    • For sentences not belonging to the main speaker (e.g., interviewer questions): ask the user if they should be removed. If yes, use helpers_cli.py drop "<project>" <sentence number> <sentence number>… (sentence numbers will be renumbered after deletion; re-print transcript).
  5. Select effects (you decide):
    • Run python -X utf8 "<skill>/core/pick_effects.py" prepare "<project>", read <project>/analysis/select_prompt.md (rules, menu, transcript are all inside), then write the answers to <project>/analysis/select_answer.json.
    • Run python -X utf8 "<skill>/core/pick_effects.py" check "<project>". If there are "✗" items, fix the answer according to the message and re-check (up to three times). If still errors, accept fallback (the script will convert problematic segments to key word cards).
    • Golden rule: numbers and text must originate from the transcript; segments with numbers must include the original transcript line as evidence. If unsure, use g_point or talk; do not force charts.
    • The lines of each segment must cover all sentences you used. The opening greeting and final farewell may omit visuals, but if more than 8 consecutive seconds of talking-head have no visual, add one to avoid an empty screen. For 9:16 landscape, the panel is narrower; keep text on key cards as short as possible (highlight each line max 10 characters).
  6. Checkpoint B: Layout confirmation. Present the table from <project>/analysis/select_report.md in plain language, do not show English codes. Translate as: talk = just person speaking, g_point = key word card, g_number = big number, g_list = bullet list, g_compare = before/after comparison, g_quote = quotation box, g_ticker = scrolling ticker, g_bars = bar comparison, g_timeline = timeline, fx:donut = donut chart, fx:linechart = line chart, fx:radar = radar chart, fx:waffle = dot matrix proportion chart, fx:funnel = funnel chart, fx:treemap = block area chart, fx:gauge = gauge, fx:countdown = countdown, fx:checklist = checklist, fx:highlighter = highlighter, fx:ptimeline = step timeline, fx:notify = notification popup, fx:stamp = stamp, fx:sticker = sticker, fx:charfall = falling text, fx:kinetic = kinetic typography. For each segment, also give "the first few words of the sentence content." Also present the series name, opening title, subtitle, and end line you drafted based on the transcript. Ask: "Are these visual arrangements and titles okay?" After approval, use python -X utf8 "<skill>/core/helpers_cli.py" brand "<project>" series="<series name>" opener="<opener title>" opener_sub="<subtitle>" end2="<end line>" to save. To change a visual segment, modify the answer and re-run step 5's check.
  7. Apply, build, and open HyperFrames in Chrome: python -X utf8 "<skill>/core/plan.py" apply "<project>", then python -X utf8 "<skill>/core/build.py" "<project>" --target main (this edits, processes voice, creates music/sound effects, composes layout; takes a few minutes). In the same turn as a successful build with preview, open HyperFrames preview (this is mandatory for every edit):
    • hyperframes preview --background --no-open "<project>/03_HyperFrames/main" (use --no-open to avoid opening a non-Chrome default browser; if a preview already exists, reuse it; use --status to get the URL, default http://localhost:3002, but use the actual printed one);
    • Open a new Chrome window: run Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList "--new-window","<preview URL>/#project/main" in PowerShell (first confirm the URL returns 200);
    • Inform the user: "HyperFrames is open in Chrome (URL: …). You can watch it and tell me what to change." After each subsequent build, remind the user to refresh. When done, close your own preview with hyperframes preview --stop; do not use --kill-all or match by name (this might kill others' previews).
    • If opening Chrome fails, report the reason accurately; do not silently skip.
  8. Quality check: In the <project>/03_HyperFrames/main folder, run hyperframes check. Success is determined by whether the output contains "Check passed" (warnings are ignorable; exit code is unreliable). Then run python -X utf8 "<skill>/core/helpers_cli.py" times "<project>" to get timestamps for each scene, and use: hyperframes snapshot --describe false --at "<those timestamps>" -o "<project>/analysis/snap" --no-end (enclose timestamps in quotes; always add --describe false; snapshots stay local). Use Read to manually inspect the snapshots for: text cut off, overlapping, completely blank, and whether the talking-head window size is correct.
    • For 9:16 landscape, add one check: take a snapshot of a "full-screen talking-head" frame (e.g., --at 2.3) and check if the face is cropped. If cropped, modify project.json's meta.crop_x (0 left–100 right, default 50) and crop_y (default 35), rebuild, and re-check.
  9. Render (draft first for review): hyperframes render "<project>/03_HyperFrames/main" --quality draft -o "<project>/04_成品/<title>_<16x9 or 9x16>_draft.mp4" (run in background; on RTX 5070, a 46-second video takes ~50 seconds). Before starting, inform the user: "The draft will take approximately N minutes. I'll notify you when it's done." After completion, send the draft file to the user using SendUserFile.
  10. Checkpoint C: Draft confirmation. Ask: "Does this look good? Anything to change?" If changes are needed, go back to the corresponding step (text: step 4, visuals: steps 5–6), modify, and re-render a draft (do not overwrite the old one). Only after the user says "it's good" should you produce the final version: same command without --quality draft, file name <title>_<16x9 or 9x16>_V01.mp4 (takes ~1.5x video length). Deliver using SendUserFile.
  11. Delivery: Write a README in <project> (title, theme, scene list, which subtitles have not been manually reviewed, output path). Inform the user of the final file location. Reminder: The final video must be reviewed by a supervisor before publishing; you will not publish or send anything.

After each step, update the user with one sentence (e.g., "Transcription complete, 19 sentences total.").

AI Narration (only when there is no human talking-head, only a script)

The narration script will be sent to Google (Cloud Gemini TTS) to generate speech; all other steps run locally.

  1. First, verify the API key: python -X utf8 "<skill>/core/gemini_key.py".
    • Output ok: ready.
    • Output missing (will happen on first narration use): tell the user — "To use AI narration, you need a Gemini API key. Please ask your admin for one. Once you have it, open 'Command Prompt' and enter python -X utf8 "<skill folder>\core\gemini_key.py" save, then follow the prompt to paste the key (typing won't show anything; just paste and press Enter). The key will be permanently saved on this computer; you won't need to enter it again. Finally, fully close Claude and reopen it." Do not paste the key into the chat; do not read or display it.
    • Output restart: already set; ask the user to fully close Claude and reopen.
  2. Obtain consent: Inform the user that "The narration script will be sent to Google to generate speech." If the script is not yet public, especially remind them. Only proceed after obtaining consent.
  3. Save the script as <project>/旁白稿.txt, then run: python -X utf8 "<skill>/core/tts_gemini.py" "<project>" --script "<project>/旁白稿.txt" --yes-send-to-google (default voice: female Aoede; to use male, add --voice Charon). It will generate audio sentence by sentence, verify locally with Whisper, and automatically regenerate misread sentences. It will also set the project to narration mode (waveform screen + AI narrator name tag). If any sentences are printed as "still doesn't sound right," ask the user to verify with their ears; if numbers or specialized terms are mispronounced, create a 讀音對照.json ({"original": "desired pronunciation"}) and re-run with --pronounce.
  4. Continue from step 3 (edit table). Narration mode does not need transcription or HDR checking.
  5. Do not include spoken instructions like "Please speak in Taiwanese Mandarin…" in the narration script—the model will read them aloud. The --tone parameter is experimental; omit it by default.

Rules

  • All images must be generated by Codex only, do not use other image generation services. When new theme assets are needed, only use <skill>/tools/make_theme_assets.py (which uses Codex), and inform the user first. If Codex is unavailable, stop and report the reason; do not switch to another service.
  • Do not use any other paid generation services. The only exception is AI narration (cloud Gemini TTS); for each submission, inform the user and obtain consent.
  • Before downloading anything (models, packages, data), explain the source and size and obtain consent.
  • Do not auto-publish, do not share externally, do not delete the user's files.
  • Do not modify programs in the <skill> folder; if the skill itself has errors, stop and report to the maintainer with the original error.
  • Any uncertain words, numbers, or names must be flagged as "to be confirmed"; do not guess.
  • For content involving finance, health, law, political figures, or other high-risk domains, remind the user to have an expert or supervisor review and ensure it is safe for public release.
  • Always open HyperFrames preview in Chrome during editing (step 7).

Common Situations (Plain Language Reference)

SymptomHow to say and what to do
Environment check says missing Codex/Chrome/FFmpeg/Node/HyperFrames"This computer is missing a necessary tool." → Follow the check result's fix; for Codex, ask user to contact admin for access.
Transcription says missing GPU or CUDA"The GPU computing toolkit is not installed properly." → Run pip install -r "<skill>/env/requirements.txt" (first obtain consent), then re-run environment check.
Validation keeps blocking the same segmentChange that segment to g_point or talk; don't force charts.
Build prints "Detected HDR footage, converted to standard color"iPhone HDR footage has been automatically converted; no action needed. Colors may differ slightly from the phone gallery, you can mention it.
Render failsRetry once; if still fails, report with hyperframes error.
User wants to change themeChangeable to: weather, finance, society, general (modify project.json's meta.theme, then re-run from step 5).
User wants to change from landscape to portrait (or vice versa)Modify project.json's meta.aspect (16:9/9:16), re-run from step 7 onward; if key cards become too long, go back to step 5 to shorten.
User is told hook/insert is not supported for 9:16Landscape does not support opening hooks or inserted scenes; remove hook/insert from project.json.
Chrome did not automatically open previewReport honestly and provide the URL (default http://localhost:3002) for the user to paste into Chrome.

What This Skill Cannot Do

See 限制與注意事項.md for details, key points:

  • No footage other than talking-head source (e.g., no real-world B-roll or aerial shots). The talking-head window uses the original video (or waveform for AI narration).
  • No specialized diagrams for fields other than weather (maps, paths); other domains use general templates and visual effects.
  • Only 24 out of the 180 visual effects are currently auto-selectable.
  • Does not distinguish who is speaking; for interviews, non-moderator sentences must be removed manually at checkpoint A.
  • Transcription often mishears names and specialized terms; always verify at checkpoint A.
  • 9:16 does not support opening hooks or inserted scenes; background uses a fixed night-sky theme.
  • Naturalness and Taiwanese accent of AI narration must be verified by a human; mispronounced words are fixed using the pronunciation mapping.

相关技能