{
  "schemaVersion": "1.0",
  "item": {
    "slug": "video-production",
    "name": "Video Production",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/omerflo/video-production",
    "canonicalUrl": "https://clawhub.ai/omerflo/video-production",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/video-production",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=video-production",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "ORCHESTRATOR_SPEC.md",
      "README.md",
      "SKILL.md",
      "assets/timing_template.json",
      "dalle_generator.py",
      "references/platform-guide-veo3.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/video-production"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/video-production",
    "agentPageUrl": "https://openagent3.xyz/skills/video-production/agent",
    "manifestUrl": "https://openagent3.xyz/skills/video-production/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/video-production/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Video Production Skill",
        "body": "Generate cinematic video clips with Veo 3, review them in a browser preview, iterate with feedback, and assemble final A/B test videos — all with minimal token spend."
      },
      {
        "title": "Quick Start",
        "body": "cd ~/.openclaw/workspace/skills/video-production\n\n# 1. Generate all clips from storyboard\n.venv/bin/python3 scripts/batch_generate.py --storyboard /path/to/storyboard.json\n\n# 2. Open browser preview\n.venv/bin/python3 scripts/generate_preview.py --storyboard /path/to/storyboard.json\n\n# 3. (After feedback) Re-generate only revised scenes\n.venv/bin/python3 scripts/apply_feedback.py --storyboard storyboard.json --feedback feedback.json\n\n# 4. Assemble final video\n.venv/bin/python3 scripts/ffmpeg_assembler.py --storyboard storyboard.json"
      },
      {
        "title": "A/B Video Architecture",
        "body": "Target: 15-second videos, 3 clips × 5s each\n\n[HOOK: 5s] → [CORE: 5s] → [CTA/PAYOFF: 5s]\n     ↑                           ↑\n swap for A/B               swap for A/B\n\nEconomics:\n\n5 Veo prompts → 4 unique A/B videos (2 hooks × 1 core × 2 CTAs)\n7 prompts → 9 videos | 9 prompts → 16+ videos\nTransitions at 5s and 10s marks — clean for analytics"
      },
      {
        "title": "Pipeline Overview",
        "body": "storyboard.json\n      ↓\nbatch_generate.py     → clips/scene_01.mp4 ... scene_05.mp4\n      ↓\ngenerate_preview.py   → preview.html (opens in browser, zero tokens)\n      ↓\n[review + paste feedback JSON to Muffin]\n      ↓\n[Muffin suggests revised prompts, updates storyboard.json]\n      ↓\napply_feedback.py     → re-generates only 'revise' scenes\n      ↓\nffmpeg_assembler.py   → final_AA.mp4, final_BA.mp4, final_AB.mp4, final_BB.mp4\n\nToken cost: Only when writing storyboard + interpreting feedback. Preview, generation, and assembly are all zero tokens."
      },
      {
        "title": "Storyboard Format",
        "body": "{\n  \"project\": \"my-video\",\n  \"output_dir\": \"clips\",\n  \"final_output\": \"final.mp4\",\n  \"scenes\": [\n    {\n      \"id\": \"scene_01\",\n      \"role\": \"hook_a\",\n      \"label\": \"Hook A\",\n      \"order\": 1,\n      \"duration\": 5,\n      \"aspect_ratio\": \"16:9\",\n      \"prompt\": \"...\"\n    }\n  ],\n  \"_ab_combinations\": {\n    \"video_1_AA\": [\"scene_01\", \"scene_03\", \"scene_04\"],\n    \"video_2_BA\": [\"scene_02\", \"scene_03\", \"scene_04\"],\n    \"video_3_AB\": [\"scene_01\", \"scene_03\", \"scene_05\"],\n    \"video_4_BB\": [\"scene_02\", \"scene_03\", \"scene_05\"]\n  }\n}\n\nSee scripts/storyboard_template.json for full template."
      },
      {
        "title": "Feedback Format",
        "body": "Paste this JSON to Muffin after reviewing preview.html:\n\n{\n  \"scenes\": [\n    { \"id\": \"scene_01\", \"action\": \"approve\", \"notes\": \"\" },\n    { \"id\": \"scene_02\", \"action\": \"revise\", \"notes\": \"slower camera, warmer light\" }\n  ]\n}"
      },
      {
        "title": "Veo 3 API — Current Limits (Gemini API, verified 2026-02-23)",
        "body": "ParameterSupportedaspect_ratio✅number_of_videos✅negative_prompt✅duration_seconds❌ Broken (throws 400 even with valid values)fps❌ Vertex AI onlycompression_quality❌ Vertex AI onlyenhance_prompt❌ Vertex AI only\n\nModels: veo-3.1-generate-preview (best) | veo-3.1-fast-generate-preview | veo-3.0-generate-001\n\nSDK: google-genai (NOT google-generativeai)"
      },
      {
        "title": "Prompting Techniques",
        "body": "Motion in every sentence — Veo produces laggy output from static prompts. Every sentence should describe camera OR subject movement.\n\nCharacter continuity — Veo can't maintain exact characters across clips. Describe physical details explicitly in every scene that includes the same character.\n\n✅ \"The same client character from the opening — dark jacket, professional bearing, 30s-40s\"\n\nStitch continuity — For seamless cuts, open each prompt with the color/light state the previous clip ends on.\n\n✅ \"Warm amber light, a direct visual continuation from the post-production suite...\"\n\nSingle continuous shot — Each prompt is one continuous clip. Design it as one camera move that reveals multiple elements — not a montage description.\n\nContent policy — Environmental/prop-only scenes generate reliably. Stressed people on phones can silently return no video. Keep humans calm or describe the environment instead."
      },
      {
        "title": "Quota Management",
        "body": "When you hit the daily limit (429 RESOURCE_EXHAUSTED), use the quota watcher:\n\n# Sets a cron that retries every 30 min, texts Master when done\nchmod +x scripts/quota_watcher.sh\n\n# Add to crontab:\n(crontab -l 2>/dev/null | grep -v quota_watcher; \\\n echo \"*/30 * * * * /path/to/quota_watcher.sh >> /tmp/quota_watcher.log 2>&1\") | crontab -\n\nSee api-quota-watcher skill for the generic pattern."
      },
      {
        "title": "Scripts",
        "body": "ScriptPurposescripts/batch_generate.pyGenerate all scenes from storyboard, skip existingscripts/generate_preview.pyBuild preview.html with video players + feedback formscripts/apply_feedback.pyRe-generate only scenes marked 'revise'scripts/ffmpeg_assembler.pyStitch approved clips → final MP4 (cut or crossfade)scripts/quota_watcher.shRetry + notify cron for quota recoveryscripts/storyboard_template.jsonStarting storyboard template"
      },
      {
        "title": "Environment Setup",
        "body": "cd ~/.openclaw/workspace/skills/video-production\nuv venv .venv\nuv pip install google-genai Pillow requests\n\n# API key must be in ~/.zshenv:\nexport GOOGLE_API_KEY=\"AIza...\""
      },
      {
        "title": "Assembling A/B Combinations",
        "body": "After all scenes approved, run assembler for each combo:\n\n# Assemble all 4 A/B videos\nfor combo in AA BA AB BB; do\n  # Edit storyboard or pass scene list directly\n  .venv/bin/python3 scripts/ffmpeg_assembler.py \\\n    --storyboard storyboard.json \\\n    --output \"final_${combo}.mp4\"\ndone\n\nOr hardcode in _ab_combinations in storyboard.json — assembler reads it automatically."
      },
      {
        "title": "Format Adaptation",
        "body": "FormatNotes16:9 (master)Default — all scripts use this9:16 (vertical)Change aspect_ratio to \"9:16\" in storyboard1:1 (square)Change aspect_ratio to \"1:1\"\n\nGenerate separate storyboards per format for best results. Don't crop 16:9 to 9:16 in post — re-generate with proper aspect."
      },
      {
        "title": "What Veo 3 Does Well",
        "body": "Atmospheric/mood shots\nSmooth camera movements (push-in, crane, tracking)\nLighting transitions within a single clip\nOffice/studio/urban environments\nAbstract beauty (nature, space, product)"
      },
      {
        "title": "What Veo 3 Struggles With",
        "body": "Exact text on screen (add in post via After Effects/Resolve)\nMaintaining character consistency across clips\nVery fast montage within a single generation\nComplex multi-person scenes\nSpecific prop/brand details"
      },
      {
        "title": "Clean Slate Default",
        "body": "Every new campaign starts fresh. No inherited characters, no assumed cast, no prompt weights from previous runs. If you want continuity from a past campaign, explicitly say so:\n\n\"Use HERO_01 from the MMM campaign\""
      },
      {
        "title": "Character IDs (Bootstrap Defaults)",
        "body": "If no cast is defined, use these placeholders:\n\nHERO_01 — Primary UGC creator\nFRIEND_01 — Recurring side character\nHAND_MODEL_01 — Hands-only product handler\n\nFirst approved output becomes the canonical identity baseline for that campaign."
      },
      {
        "title": "Character Bible (Per Campaign)",
        "body": "When characters are defined, maintain a character_registry.json in the project folder:\n\n{\n  \"HERO_01\": {\n    \"identity\": {\n      \"age_range\": \"28-35\",\n      \"gender\": \"male\",\n      \"skin_tone\": \"...\",\n      \"hair\": \"...\",\n      \"build\": \"...\"\n    },\n    \"wardrobe\": {\n      \"preferred\": [],\n      \"avoid\": [],\n      \"signature\": \"\"\n    },\n    \"camera_rules\": {\n      \"preferred_framing\": \"medium close-up\",\n      \"avoid\": []\n    },\n    \"negative_constraints\": [],\n    \"reference_frames\": [],\n    \"phrase_weights\": {}\n  }\n}"
      },
      {
        "title": "CAST Block Injection",
        "body": "When characters are defined, every prompt must include:\n\nCAST:\n- HERO: HERO_01 (identity locked; must match reference frames exactly)\nDo not alter identity traits across frames or across future assets."
      },
      {
        "title": "Verification Thresholds",
        "body": "After generation, run vision model consistency check against reference frames:\n\n>= 85 → auto-pass\n75–84 → escalate to Master (Telegram), do not auto-regen\n<= 74 → auto-fail, apply stabilize patch, retry once → then escalate if still failing"
      },
      {
        "title": "Learning Loop",
        "body": "After every human review decision, update:\n\nApproved → increase weights for phrases that produced good consistency; add best frames to approved reference set\nRejected → identify drift attributes; downweight or ban phrases causing drift; add negative constraints\nBorderline → apply stabilize patch for that engine+character+scene combo"
      },
      {
        "title": "Generation Log",
        "body": "Append every attempt to generation_log.jsonl (never deleted):\n\n{\n  \"timestamp\": \"...\",\n  \"campaign\": \"...\",\n  \"scene_id\": \"...\",\n  \"engine\": \"veo-3.1-generate-preview\",\n  \"attempt\": 1,\n  \"characters\": [\"HERO_01\"],\n  \"prompt\": \"...\",\n  \"output\": \"clips/scene_01.mp4\",\n  \"verification_score\": 88,\n  \"drift_notes\": \"\",\n  \"decision\": \"auto_pass\",\n  \"human_outcome\": \"approved\",\n  \"worked_phrases\": [],\n  \"failed_phrases\": []\n}"
      },
      {
        "title": "Escalation Policy — Ask Before Guessing",
        "body": "Escalate to Master via Telegram (never silently loop) when:\n\nVerification score is borderline (75–84)\nCharacter is on a new engine for the first time\nScene type is new for that character+engine combo\nSame prompt has failed 2+ times in a row\n\nEscalation message must include: scene ID, engine, score, drift notes, and 2–3 options."
      },
      {
        "title": "Archive (Persists Across Campaigns)",
        "body": "Even though each campaign starts clean, these persist in the skill folder:\n\ngeneration_log.jsonl — full audit trail\napproved_references/ — canonical frames by campaign, available to load on request\ncampaign_phrase_weights/ — weight archives per campaign, loadable for continuity"
      }
    ],
    "body": "Video Production Skill\n\nGenerate cinematic video clips with Veo 3, review them in a browser preview, iterate with feedback, and assemble final A/B test videos — all with minimal token spend.\n\nQuick Start\ncd ~/.openclaw/workspace/skills/video-production\n\n# 1. Generate all clips from storyboard\n.venv/bin/python3 scripts/batch_generate.py --storyboard /path/to/storyboard.json\n\n# 2. Open browser preview\n.venv/bin/python3 scripts/generate_preview.py --storyboard /path/to/storyboard.json\n\n# 3. (After feedback) Re-generate only revised scenes\n.venv/bin/python3 scripts/apply_feedback.py --storyboard storyboard.json --feedback feedback.json\n\n# 4. Assemble final video\n.venv/bin/python3 scripts/ffmpeg_assembler.py --storyboard storyboard.json\n\nA/B Video Architecture\n\nTarget: 15-second videos, 3 clips × 5s each\n\n[HOOK: 5s] → [CORE: 5s] → [CTA/PAYOFF: 5s]\n     ↑                           ↑\n swap for A/B               swap for A/B\n\n\nEconomics:\n\n5 Veo prompts → 4 unique A/B videos (2 hooks × 1 core × 2 CTAs)\n7 prompts → 9 videos | 9 prompts → 16+ videos\nTransitions at 5s and 10s marks — clean for analytics\nPipeline Overview\nstoryboard.json\n      ↓\nbatch_generate.py     → clips/scene_01.mp4 ... scene_05.mp4\n      ↓\ngenerate_preview.py   → preview.html (opens in browser, zero tokens)\n      ↓\n[review + paste feedback JSON to Muffin]\n      ↓\n[Muffin suggests revised prompts, updates storyboard.json]\n      ↓\napply_feedback.py     → re-generates only 'revise' scenes\n      ↓\nffmpeg_assembler.py   → final_AA.mp4, final_BA.mp4, final_AB.mp4, final_BB.mp4\n\n\nToken cost: Only when writing storyboard + interpreting feedback. Preview, generation, and assembly are all zero tokens.\n\nStoryboard Format\n{\n  \"project\": \"my-video\",\n  \"output_dir\": \"clips\",\n  \"final_output\": \"final.mp4\",\n  \"scenes\": [\n    {\n      \"id\": \"scene_01\",\n      \"role\": \"hook_a\",\n      \"label\": \"Hook A\",\n      \"order\": 1,\n      \"duration\": 5,\n      \"aspect_ratio\": \"16:9\",\n      \"prompt\": \"...\"\n    }\n  ],\n  \"_ab_combinations\": {\n    \"video_1_AA\": [\"scene_01\", \"scene_03\", \"scene_04\"],\n    \"video_2_BA\": [\"scene_02\", \"scene_03\", \"scene_04\"],\n    \"video_3_AB\": [\"scene_01\", \"scene_03\", \"scene_05\"],\n    \"video_4_BB\": [\"scene_02\", \"scene_03\", \"scene_05\"]\n  }\n}\n\n\nSee scripts/storyboard_template.json for full template.\n\nFeedback Format\n\nPaste this JSON to Muffin after reviewing preview.html:\n\n{\n  \"scenes\": [\n    { \"id\": \"scene_01\", \"action\": \"approve\", \"notes\": \"\" },\n    { \"id\": \"scene_02\", \"action\": \"revise\", \"notes\": \"slower camera, warmer light\" }\n  ]\n}\n\nVeo 3 API — Current Limits (Gemini API, verified 2026-02-23)\nParameter\tSupported\naspect_ratio\t✅\nnumber_of_videos\t✅\nnegative_prompt\t✅\nduration_seconds\t❌ Broken (throws 400 even with valid values)\nfps\t❌ Vertex AI only\ncompression_quality\t❌ Vertex AI only\nenhance_prompt\t❌ Vertex AI only\n\nModels: veo-3.1-generate-preview (best) | veo-3.1-fast-generate-preview | veo-3.0-generate-001\n\nSDK: google-genai (NOT google-generativeai)\n\nPrompting Techniques\n\nMotion in every sentence — Veo produces laggy output from static prompts. Every sentence should describe camera OR subject movement.\n\nCharacter continuity — Veo can't maintain exact characters across clips. Describe physical details explicitly in every scene that includes the same character.\n\n✅ \"The same client character from the opening — dark jacket, professional bearing, 30s-40s\"\n\nStitch continuity — For seamless cuts, open each prompt with the color/light state the previous clip ends on.\n\n✅ \"Warm amber light, a direct visual continuation from the post-production suite...\"\n\nSingle continuous shot — Each prompt is one continuous clip. Design it as one camera move that reveals multiple elements — not a montage description.\n\nContent policy — Environmental/prop-only scenes generate reliably. Stressed people on phones can silently return no video. Keep humans calm or describe the environment instead.\n\nQuota Management\n\nWhen you hit the daily limit (429 RESOURCE_EXHAUSTED), use the quota watcher:\n\n# Sets a cron that retries every 30 min, texts Master when done\nchmod +x scripts/quota_watcher.sh\n\n# Add to crontab:\n(crontab -l 2>/dev/null | grep -v quota_watcher; \\\n echo \"*/30 * * * * /path/to/quota_watcher.sh >> /tmp/quota_watcher.log 2>&1\") | crontab -\n\n\nSee api-quota-watcher skill for the generic pattern.\n\nScripts\nScript\tPurpose\nscripts/batch_generate.py\tGenerate all scenes from storyboard, skip existing\nscripts/generate_preview.py\tBuild preview.html with video players + feedback form\nscripts/apply_feedback.py\tRe-generate only scenes marked 'revise'\nscripts/ffmpeg_assembler.py\tStitch approved clips → final MP4 (cut or crossfade)\nscripts/quota_watcher.sh\tRetry + notify cron for quota recovery\nscripts/storyboard_template.json\tStarting storyboard template\nEnvironment Setup\ncd ~/.openclaw/workspace/skills/video-production\nuv venv .venv\nuv pip install google-genai Pillow requests\n\n# API key must be in ~/.zshenv:\nexport GOOGLE_API_KEY=\"AIza...\"\n\nAssembling A/B Combinations\n\nAfter all scenes approved, run assembler for each combo:\n\n# Assemble all 4 A/B videos\nfor combo in AA BA AB BB; do\n  # Edit storyboard or pass scene list directly\n  .venv/bin/python3 scripts/ffmpeg_assembler.py \\\n    --storyboard storyboard.json \\\n    --output \"final_${combo}.mp4\"\ndone\n\n\nOr hardcode in _ab_combinations in storyboard.json — assembler reads it automatically.\n\nFormat Adaptation\nFormat\tNotes\n16:9 (master)\tDefault — all scripts use this\n9:16 (vertical)\tChange aspect_ratio to \"9:16\" in storyboard\n1:1 (square)\tChange aspect_ratio to \"1:1\"\n\nGenerate separate storyboards per format for best results. Don't crop 16:9 to 9:16 in post — re-generate with proper aspect.\n\nWhat Veo 3 Does Well\nAtmospheric/mood shots\nSmooth camera movements (push-in, crane, tracking)\nLighting transitions within a single clip\nOffice/studio/urban environments\nAbstract beauty (nature, space, product)\nWhat Veo 3 Struggles With\nExact text on screen (add in post via After Effects/Resolve)\nMaintaining character consistency across clips\nVery fast montage within a single generation\nComplex multi-person scenes\nSpecific prop/brand details\nCharacter Registry & Learning System\nClean Slate Default\n\nEvery new campaign starts fresh. No inherited characters, no assumed cast, no prompt weights from previous runs. If you want continuity from a past campaign, explicitly say so:\n\n\"Use HERO_01 from the MMM campaign\"\n\nCharacter IDs (Bootstrap Defaults)\n\nIf no cast is defined, use these placeholders:\n\nHERO_01 — Primary UGC creator\nFRIEND_01 — Recurring side character\nHAND_MODEL_01 — Hands-only product handler\n\nFirst approved output becomes the canonical identity baseline for that campaign.\n\nCharacter Bible (Per Campaign)\n\nWhen characters are defined, maintain a character_registry.json in the project folder:\n\n{\n  \"HERO_01\": {\n    \"identity\": {\n      \"age_range\": \"28-35\",\n      \"gender\": \"male\",\n      \"skin_tone\": \"...\",\n      \"hair\": \"...\",\n      \"build\": \"...\"\n    },\n    \"wardrobe\": {\n      \"preferred\": [],\n      \"avoid\": [],\n      \"signature\": \"\"\n    },\n    \"camera_rules\": {\n      \"preferred_framing\": \"medium close-up\",\n      \"avoid\": []\n    },\n    \"negative_constraints\": [],\n    \"reference_frames\": [],\n    \"phrase_weights\": {}\n  }\n}\n\nCAST Block Injection\n\nWhen characters are defined, every prompt must include:\n\nCAST:\n- HERO: HERO_01 (identity locked; must match reference frames exactly)\nDo not alter identity traits across frames or across future assets.\n\nVerification Thresholds\n\nAfter generation, run vision model consistency check against reference frames:\n\n>= 85 → auto-pass\n75–84 → escalate to Master (Telegram), do not auto-regen\n<= 74 → auto-fail, apply stabilize patch, retry once → then escalate if still failing\nLearning Loop\n\nAfter every human review decision, update:\n\nApproved → increase weights for phrases that produced good consistency; add best frames to approved reference set\nRejected → identify drift attributes; downweight or ban phrases causing drift; add negative constraints\nBorderline → apply stabilize patch for that engine+character+scene combo\nGeneration Log\n\nAppend every attempt to generation_log.jsonl (never deleted):\n\n{\n  \"timestamp\": \"...\",\n  \"campaign\": \"...\",\n  \"scene_id\": \"...\",\n  \"engine\": \"veo-3.1-generate-preview\",\n  \"attempt\": 1,\n  \"characters\": [\"HERO_01\"],\n  \"prompt\": \"...\",\n  \"output\": \"clips/scene_01.mp4\",\n  \"verification_score\": 88,\n  \"drift_notes\": \"\",\n  \"decision\": \"auto_pass\",\n  \"human_outcome\": \"approved\",\n  \"worked_phrases\": [],\n  \"failed_phrases\": []\n}\n\nEscalation Policy — Ask Before Guessing\n\nEscalate to Master via Telegram (never silently loop) when:\n\nVerification score is borderline (75–84)\nCharacter is on a new engine for the first time\nScene type is new for that character+engine combo\nSame prompt has failed 2+ times in a row\n\nEscalation message must include: scene ID, engine, score, drift notes, and 2–3 options.\n\nArchive (Persists Across Campaigns)\n\nEven though each campaign starts clean, these persist in the skill folder:\n\ngeneration_log.jsonl — full audit trail\napproved_references/ — canonical frames by campaign, available to load on request\ncampaign_phrase_weights/ — weight archives per campaign, loadable for continuity"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/omerflo/video-production",
    "publisherUrl": "https://clawhub.ai/omerflo/video-production",
    "owner": "omerflo",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/video-production",
    "downloadUrl": "https://openagent3.xyz/downloads/video-production",
    "agentUrl": "https://openagent3.xyz/skills/video-production/agent",
    "manifestUrl": "https://openagent3.xyz/skills/video-production/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/video-production/agent.md"
  }
}