Communitygithub.com

cgallic/kai-cmo-harness

Full-stack video production from script to rendered video. Combines script generation (optimized for TikTok/YouTube/Reels) with AI-powered video rendering using Remotion, AI voiceovers (Qwen3-TTS/ElevenLabs), music generation (ACE-Step), and browser-based demo recording. Multi-session project tracking with automatic intent reconciliation. Use when "create video", "produce video", "demo video", "product video", or any request to generate AND render video content.

kai-cmo-harness 是什麼?

kai-cmo-harness is a Claude Code agent skill that full-stack video production from script to rendered video. Combines script generation (optimized for TikTok/YouTube/Reels) with AI-powered video rendering using Remotion, AI voiceovers (Qwen3-TTS/ElevenLabs), music generation (ACE-Step), and browser-based demo recording. Multi-session project tracking with automatic intent reconciliation. Use when "create video", "produce video", "demo video", "product video", or any request to generate AND render video content.

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cgallic/kai-cmo-harness/tree/HEAD/harness/skills-v2/kai-video-production

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

/kai-video-production — a rendered MP4 that started as a script worth rendering

Kai root note: knowledge/, harness/, and scripts/ paths in this skill live in the Kai install, not the user's project. Resolve them against the first ancestor directory of this SKILL.md that contains a knowledge/ folder (the Kai plugin root, ~/.claude/kai, or the kai-cmo-harness repo). MARKETING.md, memory/, and any output files live in the current project. If a referenced scripts/ command is not available in this install, say so, skip it, and continue with the file-based guidance — never fabricate its output.

Studio-grade motion spots (a code-rendered hype launch spot, a walkthrough from real screenshots, or pain-point videos for a site, with the drop cut to the reveal) use /kai-motion-spot. This skill covers Remotion template production.

Objective

A finished video: an approved script, the assets it needs, synced audio, and a rendered MP4 at platform spec — with project.json describing the real state of the project on disk so the next session resumes without reconstruction.

Production amplifies a good script and cannot rescue a bad one. Script quality is settled before any asset is generated. Scope splits three ways: script only (stop at the script, user records), automated production (full render pipeline), hybrid (generate voiceover and slides, user supplies demos).

Done when

Work type social-post — floor E5/C2/O3 (harness/eco-floors.yaml), contract harness/skill-contracts/social-post.yaml. A render that will run as paid creative instead follows paid-ad-campaign (E5/C4/O4), which requires the platform policy reference loaded before the creative is submitted.

  • E5 — the video is live on the target platform and a non-actor read the permalink back against the approved cut. The MP4 in out/ is E1; human approval of the winning variant and the final cut is E3. This skill renders; it does not upload.
  • C2 — banned_word_check and four_us_score (10/16) clean on the script, plus both render checklists below.
  • O3 — reach, engagement rate, profile clicks, and link clicks read from platform insights at 7 days against a baseline recorded before publish.

Before rendering: script approved with strong hooks and no AI slop · all assets present, no missing demos or images · scene durations match narration · voiceover aligned to visuals · brand colors, fonts, and logo correct · transitions smooth · text contrast and size readable · preview walked through in Remotion Studio.

After rendering: resolution as specified · voiceover audible over music · file size within platform limits · format plays on the target platform.

Constraints

  • Human approval is required to move from the variant lab to full render. Renders cost compute and time; an unapproved concept does not get either.

  • Preflight variant lab runs before asset creation or rendering — 3 hook variants (each with platform, expected first-frame visual, and viewer promise), 2 structure variants for scene order or pacing, 2 CTA variants matched to the campaign goal, and 1 risk note per variant covering unsupported claims, brand mismatch, or approval needs. Write to workspace/video/projects/{name}/PREFLIGHT-VARIANTS.md, pick one winner, keep the rejected variants in the same file as the kill list.

    FactorScoreQuestion
    Hook strength1-5Does the opening create immediate attention?
    Message clarity1-5Is the core idea obvious after one watch?
    Proof density1-5Are claims supported by demo, quote, data, or source?
    Production fit1-5Can this be made with available assets and timeline?
    Brand safety1-5Does it avoid fake authority, risky claims, or unclear rights?
  • Read MARKETING.md from the project root before asking the user anything. If it does not exist, build it from the codebase — CLAUDE.md, README.md, PROJECT.md, package.json, landing pages, email/ad/analytics config — using the template from /kai-email-system, and confirm the draft.

  • Know these before producing: topic, platforms, format (talking head, screen recording, b-roll, animation, slides), length band, goal, and whether the user wants script only or a full render.

  • The filesystem is the source of truth. On resume, scan the project directory, compare to project.json, and correct statuses — asset-needed with the file present becomes asset-present; ready with the file missing becomes asset-missing. Flag every discrepancy to the user rather than rendering around it. Regenerate the project's CLAUDE.md status document after reconciliation.

  • Brand profiles auto-apply. Colors, fonts, and logo come from brands/{brand}/brand.json; voice settings from voice.json. Never re-specify a color or font inline that the brand file already defines.

  • Prerequisites are real blockers: Node.js 18+ (Remotion) and FFmpeg (encoding) are required. Cloud AI features need a Modal account ($30/month free compute) or RunPod (pay-per-second); ElevenLabs is optional for premium voices. /video-setup handles configuration. If a tool is not deployed in this install, say so — never describe output it did not produce.

  • Prefer the free or cheap tool. Qwen3-TTS and ACE-Step cover most work; premium providers are an explicit choice, not a default.

  • Nothing publishes. The render lands in out/; uploading is a separate approved step.

Context

NeedLoad / run
Video content mechanicsknowledge/playbooks/video-content-creation.md
TikTok · YouTube · Reelsknowledge/channels/tiktok-algorithm.md · knowledge/channels/youtube.md · knowledge/channels/instagram.md
Slide-scene design polishknowledge/frameworks/design/frontend-design.md
Product, ICP, voice, channelsMARKETING.md (project root)
Setup, recording, audio, review, design, cloning/video-setup · /record-demo · /generate-voiceover · /scene-review · /design · /voice-clone

Templates: product-demo (title, problem, solution, demo, CTA) · explainer (title, overview, sections, recap) · demo-walkthrough (screen recording with narration) · social-short (15–60s vertical) · testimonial (quote + visuals) · announcement (launches, releases, news). Reference material ships beside them — templates/product-demo/, templates/explainer/, templates/social-short/, and finished examples in examples/digital-samba-skill-demo/ and examples/schlumbergera/, each with source, rendered MP4, and production notes.

Project layout:

projects/{name}/
├── project.json          # state, scenes, assets, sessions
├── VOICEOVER-SCRIPT.md   # full narration
├── src/                  # Root.tsx, scenes/, config/ (timing, brand, assets)
├── public/               # audio/, demos/, images/, videos/
└── CLAUDE.md             # auto-generated status

project.json carries name, template, brand, created, updated, phase, a scenes[] array (id, type, duration, visual, narration, status), an audio block (voiceover: file/status/provider/speaker; music: file/status/preset), estimates.totalDurationSeconds, and a sessions[] log of date, phase, and summary. Lifecycle: planning → assets → review → audio → editing → rendering → complete.

Scene types: title · overview · demo · split-demo · problem · solution · feature · stats · testimonial · cta · credits.

Assets. Slides (title cards, bullets, stat visualizations, CTA screens) generate from the brand profile. Demos come from /record-demo (Playwright browser recording, --script demo-script.md --auto for scripted automation), an external MP4/MOV dropped into public/demos/, or Playwright screenshots. Images: python tools/flux2.py --prompt "..." --cloud modal for generation, python tools/image_edit.py --input photo.jpg --style ... for editing.

Audio.

python tools/voiceover.py --provider qwen3 --speaker Ryan --script VOICEOVER-SCRIPT.md --scene-dir public/audio/scenes --json
python tools/voiceover.py --provider elevenlabs --voice-id {ID} --script VOICEOVER-SCRIPT.md
python tools/music_gen.py --preset corporate-bg --duration 120 --bpm 90 --key "D Minor"
python tools/music.py --prompt "Upbeat corporate" --duration 120
python tools/sfx.py --preset whoosh   # also: pop, success

Qwen3 speakers: Ryan, Brad, Ava, Lily, Emily, Sam, Alex, Kevin, Zoe. Music presets: corporate-bg, upbeat-intro, dramatic-reveal, ambient-subtle, tension-build, inspirational-montage, tech-minimal, celebration-end. /voice-clone produces a custom brand voice.

Brand files. brand.json: colors (primary #3B82F6, secondary #10B981, background #111827, text #F9FAFB in the KaiCalls example), fonts.heading / fonts.body (family + weight), logo, style. voice.json: provider, speaker, tone, pace, and an elevenlabs block (voice_id, stability, similarity_boost).

Transitions — 7 custom plus 4 Remotion official, imported from @/lib/transitions:

TransitionEffectUse case
glitch()Digital distortion + RGB shiftTech aesthetic
rgbSplit()Chromatic aberrationEnergetic cuts
zoomBlur()Radial motion blurDramatic reveals
lightLeak()Cinematic lens flareProfessional polish
clockWipe()Radial sweep revealTime-based content
pixelate()Digital mosaicRetro/8-bit
checkerboard()Grid reveal (9 patterns)Clean, geometric
slide() fade() wipe() flip()Official RemotionStandard, subtle, directional, playful

Review and render.

cd projects/{name} && npm run studio     # Remotion Studio at localhost:3000
npm run render -- --quality=low          # preview
npm run render                           # final → out/{name}.mp4

Render options: --codec=h264 (default) or h265 (smaller) · --resolution=1080p (default) or 720p · --fps=30 (default) or 60. Timing adjustments live in config.ts.

Post-production: tools/addmusic.py (add music to an existing MP4) · tools/redub.py (swap voice) · tools/dewatermark.py --preset sora --cloud modal · tools/upscale.py --scale 2x --cloud modal.

Cloud GPU. Modal deploys via /video-setup: qwen3_tts ($0.01/video), flux2 ($0.02/image), music_gen ($0.05/track), sadtalker ($0.10/video), ltx2 ($0.23/clip), image_edit ($0.03/image), upscale ($0.01/image), dewatermark ($0.10/video). RunPod is the pay-per-second alternative (python tools/<tool>.py --setup per tool). A 60–90s video costs roughly $0.20 all-in — script ~$0.10, Qwen3 voiceover ~$0.01, ACE-Step music ~$0.05, FLUX.2 images ~$0.04, local Remotion render $0.00. Premium adds: ElevenLabs voiceover +$0.30, LTX-2 clip +$0.23, SadTalker +$0.10. Modal's Starter free tier covers 100+ videos/month.

Output goes to workspace/video/: _video-projects.md (index), projects/{name}/ (with out/{name}.mp4), scripts/ split by tiktok/, youtube/, reels/, and _production-guide.md.

Entry points: /kai-video script --platform tiktok --topic "..." (script only) · /kai-video produce --template product-demo --brand kaicalls (full pipeline) · /kai-video resume {name}. Downstream: /kai-repurpose for clips, /kai-social for scheduling, /kai-content-calendar for release timing, /kai-analytics for performance.

Common failures: "asset not found" — project.json paths disagree with the filesystem, reconcile · "audio out of sync" — adjust config.ts timing or regenerate the voiceover against the current script · "render fails" — check ffmpeg -version, confirm assets exist, run a low-quality preview first · "tool timeout on Modal" — check compute credits and modal app list, or fall back to RunPod · "brand colors not applied" — brand.json missing from brands/, brand name mismatch in project.json, or src/config/brand.ts needs regenerating.

Escalate when

  • The variant lab winner has not been approved and the next step would spend render or GPU compute.
  • Demo footage shows customer data, third-party UI, or anything whose rights are unconfirmed.
  • A claim in the narration needs a number with no source.
  • Reconciliation finds assets the project did not expect, or expected assets that vanished.
  • Prerequisites are missing (no Node 18+, no FFmpeg, no deployed cloud tools) and the user expects a rendered file.
  • The video is destined for a paid placement — the platform policy reference and the paid-ad-campaign floor apply before submission.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能