[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-google-cloud-story-generator":3,"mdc--a2gfcy-key":42,"related-org-google-cloud-story-generator":2165,"related-repo-google-cloud-story-generator":2345},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":37,"sourceUrl":40,"mdContent":41},"story-generator","generate multi-scene multimedia storybooks","Expert in generating full multi-scene multimedia storybooks (image, video, voice, and music) with dynamic duration probing, conversational tempo guardrails, a dedicated self-correcting Editor's QC Room, and pipeline flowcharts embedded in interactive reports.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"google-cloud","Google Cloud","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fgoogle-cloud.png","GoogleCloudPlatform",[13,17,20,23],{"name":14,"slug":15,"type":16},"Media","media","tag",{"name":18,"slug":19,"type":16},"Creative","creative",{"name":21,"slug":22,"type":16},"Vertex AI","vertex-ai",{"name":9,"slug":8,"type":16},1150,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fvertex-ai-creative-studio","2026-07-12T07:39:07.098694",null,349,[30,31,32,8,33,34,35,36,22],"chirp","gemini","gemini-tts","imagen","lyria","nano-banana","veo",{"repoUrl":25,"stars":24,"forks":28,"topics":38,"description":39},[30,31,32,8,33,34,35,36,22],"GenMedia Creative Studio is a generative media user experience highlighting the use of Gemini, Gemini Omni, Veo, Gemini Image 🍌, Gemini TTS, Chirp 3, Lyria and other generative media APIs on Google Cloud.","https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fvertex-ai-creative-studio\u002Ftree\u002FHEAD\u002Fexperiments\u002Fmcp-genmedia\u002Fskills\u002Fstory-generator","---\nname: story-generator\ndescription: Expert in generating full multi-scene multimedia storybooks (image, video, voice, and music) with dynamic duration probing, conversational tempo guardrails, a dedicated self-correcting Editor's QC Room, and pipeline flowcharts embedded in interactive reports.\nmetadata:\n  version: \"1.3.0\"\n  design_system: \"Material 3 Tonal (Emerald-Meadow & Cosmic-Science)\"\n---\n\n# Story Generator Skill (v1.3.0)\n\nThis skill allows an agent to design, generate, and composite a multi-scene storybook video using direct, native MCP tool calls. It implements a feedback-driven cognitive media engine. By combining upfront voiceover duration probing with dynamic video length selection, tempo clamping, and a dedicated quality-assurance audit (\"The Editor's QC Room\"), it guarantees studio-grade pacing and prevents typical AI audio-video desyncs.\n\n## Directory Structure\nConforming to the [Agent Skills Specification](https:\u002F\u002Fagentskills.io\u002Fspecification.md):\n```\nstory-generator\u002F\n├── SKILL.md            # Main metadata, co-creation instructions & FFmpeg blueprints\n├── scripts\u002F            # Executable orchestration & compilation utilities\n│   ├── generate_scene.py # Generates individual scenes with speed-fit and mixing\n│   ├── assemble_story.py # Normalizes codecs and concatenates scenes without desync\n│   ├── editors_quality_room.py # Evaluates and audits scene\u002Fmaster quality and speech rates\n│   ├── generate_pipeline_diagram.py # Compiles custom Graphviz DOT pipeline flowcharts\n│   ├── generate_report.py # Compiles interactive HTML report\n│   └── package_report.py # Packages report into a standalone zip file\n└── assets\u002F             # Reusable design tokens & static assets\n    ├── index.css       # Premium Material 3 stylesheet (Emerald\u002FCosmic)\n    └── fonts\u002F          # Font files (GoogleSansFlex.ttf)\n```\n\n---\n\n## 1. The Writers Room Interrogation (Co-Creation Phase)\n\nBefore generating any media, the agent must assume the persona of an **expert showrunner and creative co-director** and host an interactive co-creation session with the user. The goal is to draft a comprehensive **Story Bible** before generating any files.\n\n### 1.1 The Interrogation Process\nThe agent must present a structured inquiry covering **The Four Pillars of Media Interrogation**. Instead of just asking dry questions, the agent should propose imaginative style elements, plot quirks, or color schemes to inspire the user.\n\n#### Pillar 1: Narrative Scope & Custom Length\n*   **Narrative Scene Count**: Ask the user exactly how many scenes they want in their narrative (e.g., a short 3-scene story, a standard 5-scene story, or an epic 10+ scene odyssey). Do NOT constrain the length.\n*   **Arc Structure**: Let the user select the dramatic format:\n    1.  *Classic Hero's Journey*: Hook, call to adventure, trials, climax, and resolution.\n    2.  *Short-Form Arc*: Focused problem, quick struggle, and fast solution.\n    3.  *Tragic Fall*: Rise to prominence, pride\u002Ferror, rapid failure, and moral warning.\n    4.  *Rags to Riches*: Struggle against adversity, discovery, triumph, and giving back.\n    5.  *Custom \u002F Freestyle*: User-provided structural sequence.\n\n#### Pillar 2: Character Consistency Framework\n*   **Primary Character Portrait Prompt**: Co-create a detailed description of the protagonist to maintain visual consistency.\n    *   *Formula*: `[Species\u002FRole] + [Age\u002FMood] + [Distinct Costume] + [Defining Physical Features]`.\n    *   *Example*: \"A fluffy white Angora bunny wearing miniature round science safety goggles, a tiny leather tool belt, and an emerald-green vest. Extremely curious, bright pink twitching nose.\"\n*   **Supporting Cast**: Describe secondary characters and their visual relationship to the protagonist.\n\n#### Pillar 3: Multimedia & Production Aesthetics\n*   **Visual Art Medium**: (e.g., *3D Claymation \u002F Stop-Motion* [recommended for charming consistency], *Realistic Sci-Fi Cinematic*, or *Watercolor Sketch*).\n*   **Color Palette & Mood**: (e.g., \"Vibrant pasture greens and soft gold sunlight\" or \"Desaturated charcoal and glowing bioluminescent cyan\").\n*   **Soundtrack Genre & Tone**: (e.g., \"Whimsical acoustic guitar and playful tuba\" or \"Ethereal synth pads and slow, soft chimes\").\n*   **Voice Actor Cast**: (Prefer *Callirrhoe* for warm\u002Fsoothing female narration, *Fenrir* for resonant\u002Fdeep sci-fi narration, or *Kore* for playful\u002Fbright stories).\n\n#### Pillar 4: Audio Speed-Fitting Preference\n*   Confirm if the user wants the system to automatically speed-fit the narrator voice-over using the FFmpeg `atempo` filter if it runs longer than the video scene (recommended to avoid video stalling\u002Flooping).\n*   *Warning*: Inform the user that the showrunner will strictly clamp voiceover speedups at $1.25\\times$ to preserve natural speaker cadence. If a script is too wordy, the pipeline will instead loop the video or recommend text cuts in the Editor's QC Room.\n\n### 1.2 Interactive Loop\n1.  **Draft Proposed Story Bible**: Synthesize the user's answers and your creative suggestions into a formal Story Bible block.\n2.  **Await Explicit User Approval**: Present the story bible and scene-by-scene script. **Do NOT proceed to media generation until the user has explicitly approved the story bible.**\n\n---\n\n## 2. Scripting & Story Bible Schema\n\nOnce the user approves the story bible, format the scene-by-scene scripts in a structured `scenes.json` file. For each scene (1 to N), specify:\n*   **id**: Sequential scene index (1-indexed).\n*   **title**: Concise scene name.\n*   **narrator**: Text for the voice-over (keep under 800 characters for Gemini TTS limits).\n*   **music_prompt**: Specific background music prompt for Lyria.\n    *   *Rule*: Music prompts must automatically append the strict instrumental negative filter: `, strictly instrumental, no vocals, no voice, no singing, ambient background score` to avoid synthetic vocal artifacts.\n*   **image_prompt**: Nano Banana visual prompt incorporating the character descriptions and visual medium.\n*   **motion_prompt**: Veo 3.1 motion prompt describing camera movement and subject action.\n\n---\n\n## 3. Double-Engine Media Assembly Pipeline\n\nThis skill provides a **Double-Engine** media assembly pipeline. Any coding agent can either run the automated Python scripts or perform the exact manual FFmpeg commands directly in the shell if they want to override the pipeline.\n\n### Engine A: Manual Agent Command Blueprint (Raw FFmpeg)\nIf you are an agent executing these steps manually in the command line, use this step-by-step FFmpeg blueprint to compile individual scenes and concatenate them robustly:\n\n#### 1. Generate Voiceover & Probe Duration\nAlways run TTS generation first and retrieve the exact duration of the voice file:\n```bash\nffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 voice.wav\n```\n\n#### 2. Query Veo Video with Optimal Sizing\nCompare the voice duration ($D_{voice}$) and request a matching video length from Veo (either 4, 6, or 8 seconds):\n*   $D_{voice} \\le 4.2\\text{s} \\rightarrow$ Generate a **4-second** video clip.\n*   $D_{voice} \\le 6.2\\text{s} \\rightarrow$ Generate a **6-second** video clip.\n*   $D_{voice} > 6.2\\text{s} \\rightarrow$ Generate an **8-second** video clip.\n\nRetrieve the resulting video clip's exact duration:\n```bash\nffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4\n```\n\n#### 3. Calculate Speed-Fit Tempo and Determine Looping\nIf `voice_duration` ($D_{voice}$) is longer than `video_duration` ($D_{vid}$), calculate the required tempo ratio:\n$$\\text{tempo} = \\frac{D_{voice}}{D_{vid} - 0.5}$$\n*   **Tempo Guardrail**: If $\\text{tempo} \\le 1.25$, apply the `atempo` filter.\n*   **Tempo Clamp**: If $\\text{tempo} > 1.25$, drop the tempo back to `1.0` (natural speaking speed) and **loop** the background video clip indefinitely to fit.\n\n#### 4. Determine if Video has a Native Audio Track\nTo prevent FFmpeg filter crashes, check if the video has an audio stream:\n```bash\nffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 video.mp4\n```\n\n#### 5. Mix Audio Streams with Volume Ducking & Mathematical Capping\nCalculate the exact target output duration:\n$$\\text{out\\_duration} = \\frac{D_{voice}}{\\text{tempo}}$$\n\nRun the appropriate mixing command. *CRITICAL: We append `-stream_loop -1` to loop the video in case tempo clamping is active, and enforce the output duration strictly with `-t {out_duration}` to prevent blank trailing frames.*\n\n*   **Case A (Video has ambient sound)**: Duck video audio to 25%, apply speed-fit and boost to narration, duck music to 15%, and mix them:\n    ```bash\n    ffmpeg -y -stream_loop -1 -i video.mp4 -i voice.wav -i music.wav \\\n      -filter_complex \"[0:a]volume=0.25[bgv]; [1:a]atempo=1.20,volume=1.5[vo]; [2:a]volume=0.15[bgm]; [vo][bgv][bgm]amix=inputs=3:duration=first:dropout_transition=0[aout]\" \\\n      -map 0:v -map \"[aout]\" -t 7.345 -c:v libx264 -preset fast -pix_fmt yuv420p -c:a aac -ar 44100 scene_mixed.mp4\n    ```\n*   **Case B (Video is silent)**: Mix only the speed-fitted narration and the ducked background music:\n    ```bash\n    ffmpeg -y -stream_loop -1 -i video.mp4 -i voice.wav -i music.wav \\\n      -filter_complex \"[1:a]atempo=1.20,volume=1.5[vo]; [2:a]volume=0.15[bgm]; [vo][bgm]amix=inputs=2:duration=first:dropout_transition=0[aout]\" \\\n      -map 0:v -map \"[aout]\" -t 7.345 -c:v libx264 -preset fast -pix_fmt yuv420p -c:a aac -ar 44100 scene_mixed.mp4\n    ```\n\n#### 6. Pre-flight Normalization for Concat Desync Prevention\nBefore concatenating multiple video files, you **MUST** normalize their audio parameters to prevent audio drift, blank screens, or concatenation failures.\n*   **Normalize Segment WITH Native Audio**: Re-encode to standard `libx264` and `aac` at `44100Hz`:\n    ```bash\n    ffmpeg -i scene_mixed.mp4 -c:v libx264 -preset fast -c:a aac -ar 44100 -y norm_scene.mp4\n    ```\n*   **Normalize Segment WITHOUT Audio (Silent clips)**: Force-inject a silent mono track and re-encode:\n    ```bash\n    ffmpeg -i scene_mixed.mp4 -f lavfi -i anullsrc=cl=mono:r=44100 \\\n      -map 0:v -map 1:a -c:v libx264 -preset fast -c:a aac -shortest -y norm_scene.mp4\n    ```\n\n#### 7. Concatenate Normalized Segments Instantly\nSince all segments are perfectly normalized to the same video\u002Faudio codec configurations, stitch them instantly without re-encoding:\n```bash\n# Create concat_list.txt containing file paths:\n# file 'norm_scene_1.mp4'\n# file 'norm_scene_2.mp4'\nffmpeg -y -f concat -safe 0 -i concat_list.txt -c copy final_story.mp4\n```\n\n---\n\n### Engine B: Automated Scripting Blueprint\nFor fully automated and robust end-to-end execution, use the provided Python scripts in the `scripts\u002F` directory:\n\n#### 1. Generate Individual Scene Assets\nRun `generate_scene.py` for each scene (this can be executed concurrently in parallel subagents to maximize throughput):\n```bash\npython3 story-generator\u002Fscripts\u002Fgenerate_scene.py \\\n  --scene_id 1 \\\n  --narrator \"Barnaby the bunny woke up in his cozy earthy burrow...\" \\\n  --voice \"Callirrhoe\" \\\n  --music \"Gentle acoustic guitar theme\" \\\n  --image \"3D claymation, cartoon bunny with safety goggles...\" \\\n  --video \"The bunny stretches lazily, ears twitching\" \\\n  --out_dir \u002Fpath\u002Fto\u002Fproject_dir\n```\n*(This script automatically handles the voiceover-first ffprobe checks, dynamic video duration mapping, speed-clamping at 1.25x with auto-looping, vocal negative filtering, and explicit mathematical duration capping).*\n\n#### 2. Assemble and Stitch the Final Storybook\nRun `assemble_story.py` to normalize the generated clips and stitch them into the final storybook:\n```bash\npython3 story-generator\u002Fscripts\u002Fassemble_story.py \\\n  --project_dir \u002Fpath\u002Fto\u002Fproject_dir \\\n  --output_name final_story.mp4\n```\n\n---\n\n## 4. The Editor's Quality Control Room Stage\n\nTo ensure broadcast-quality narrative pacing and format adherence, the agent must run the QC stage immediately after stitching the master video.\n\n```bash\npython3 story-generator\u002Fscripts\u002Feditors_quality_room.py --project_dir \u002Fpath\u002Fto\u002Fproject_dir\n```\n\n### 4.1 Audits Conducted\n1.  **Format Verification**: Confirms that all scene files and the final master video are standard H.264 video with AAC, 44100Hz stereo audio.\n2.  **Narrator Speech Density Audit**: Computes the estimated speech-tempo ratio. If a scene requires a compression factor $> 1.50\\times$, it flags a `TEMPO` warning.\n3.  **A\u002FV Drift Detection**: Audits the compiled master video duration against the mathematical sum of the individual scene files. If the drift exceeds 0.5 seconds, it flags a `DRIFT` warning.\n4.  **Actionable Quality Report**: Outputs `quality_report.json` and a human-readable `quality_report.md` specifying actionable editorial feedback.\n\n### 4.2 Self-Correcting Feedback Loop\nIf the QC Room outputs `TEMPO` warnings, the agent should intercept this, present the actionable editorial notes to the user, and offer to automatically shorten the narration script for those specific scenes (aiming for under 12–14 words per 6-second segment) to maintain a natural, calm cadence.\n\n---\n\n## 5. Visual Pipeline Flowcharts\n\nEvery compiled project report includes a high-fidelity rendering of the Double-Engine media pipeline, visualized via Graphviz DOT.\n\n```bash\npython3 story-generator\u002Fscripts\u002Fgenerate_pipeline_diagram.py --project_dir \u002Fpath\u002Fto\u002Fproject_dir\n```\n\nThis command parses the workflow blocks and compiles `\u002Fpath\u002Fto\u002Fproject_dir\u002Freport\u002Fpipeline_diagram.dot` to an optimized `\u002Fpath\u002Fto\u002Fproject_dir\u002Freport\u002Fpipeline_diagram.webp` file, which is then embedded directly as a premium architecture dashboard card inside the compiled Material 3 HTML reports.\n",{"data":43,"body":47},{"name":4,"description":6,"metadata":44},{"version":45,"design_system":46},"1.3.0","Material 3 Tonal (Emerald-Meadow & Cosmic-Science)",{"type":48,"children":49},"root",[50,59,65,72,88,101,105,111,131,138,150,157,237,243,297,303,396,402,428,434,462,465,471,484,568,571,577,589,595,600,606,611,673,679,684,721,726,773,779,800,845,851,856,915,921,926,952,1322,1328,1340,1558,1564,1569,1656,1659,1665,1678,1684,1697,1879,1887,1893,1905,1957,1960,1966,1971,1999,2005,2079,2085,2097,2100,2106,2111,2138,2159],{"type":51,"tag":52,"props":53,"children":55},"element","h1",{"id":54},"story-generator-skill-v130",[56],{"type":57,"value":58},"text","Story Generator Skill (v1.3.0)",{"type":51,"tag":60,"props":61,"children":62},"p",{},[63],{"type":57,"value":64},"This skill allows an agent to design, generate, and composite a multi-scene storybook video using direct, native MCP tool calls. It implements a feedback-driven cognitive media engine. By combining upfront voiceover duration probing with dynamic video length selection, tempo clamping, and a dedicated quality-assurance audit (\"The Editor's QC Room\"), it guarantees studio-grade pacing and prevents typical AI audio-video desyncs.",{"type":51,"tag":66,"props":67,"children":69},"h2",{"id":68},"directory-structure",[70],{"type":57,"value":71},"Directory Structure",{"type":51,"tag":60,"props":73,"children":74},{},[75,77,86],{"type":57,"value":76},"Conforming to the ",{"type":51,"tag":78,"props":79,"children":83},"a",{"href":80,"rel":81},"https:\u002F\u002Fagentskills.io\u002Fspecification.md",[82],"nofollow",[84],{"type":57,"value":85},"Agent Skills Specification",{"type":57,"value":87},":",{"type":51,"tag":89,"props":90,"children":94},"pre",{"className":91,"code":93,"language":57},[92],"language-text","story-generator\u002F\n├── SKILL.md            # Main metadata, co-creation instructions & FFmpeg blueprints\n├── scripts\u002F            # Executable orchestration & compilation utilities\n│   ├── generate_scene.py # Generates individual scenes with speed-fit and mixing\n│   ├── assemble_story.py # Normalizes codecs and concatenates scenes without desync\n│   ├── editors_quality_room.py # Evaluates and audits scene\u002Fmaster quality and speech rates\n│   ├── generate_pipeline_diagram.py # Compiles custom Graphviz DOT pipeline flowcharts\n│   ├── generate_report.py # Compiles interactive HTML report\n│   └── package_report.py # Packages report into a standalone zip file\n└── assets\u002F             # Reusable design tokens & static assets\n    ├── index.css       # Premium Material 3 stylesheet (Emerald\u002FCosmic)\n    └── fonts\u002F          # Font files (GoogleSansFlex.ttf)\n",[95],{"type":51,"tag":96,"props":97,"children":99},"code",{"__ignoreMap":98},"",[100],{"type":57,"value":93},{"type":51,"tag":102,"props":103,"children":104},"hr",{},[],{"type":51,"tag":66,"props":106,"children":108},{"id":107},"_1-the-writers-room-interrogation-co-creation-phase",[109],{"type":57,"value":110},"1. The Writers Room Interrogation (Co-Creation Phase)",{"type":51,"tag":60,"props":112,"children":113},{},[114,116,122,124,129],{"type":57,"value":115},"Before generating any media, the agent must assume the persona of an ",{"type":51,"tag":117,"props":118,"children":119},"strong",{},[120],{"type":57,"value":121},"expert showrunner and creative co-director",{"type":57,"value":123}," and host an interactive co-creation session with the user. The goal is to draft a comprehensive ",{"type":51,"tag":117,"props":125,"children":126},{},[127],{"type":57,"value":128},"Story Bible",{"type":57,"value":130}," before generating any files.",{"type":51,"tag":132,"props":133,"children":135},"h3",{"id":134},"_11-the-interrogation-process",[136],{"type":57,"value":137},"1.1 The Interrogation Process",{"type":51,"tag":60,"props":139,"children":140},{},[141,143,148],{"type":57,"value":142},"The agent must present a structured inquiry covering ",{"type":51,"tag":117,"props":144,"children":145},{},[146],{"type":57,"value":147},"The Four Pillars of Media Interrogation",{"type":57,"value":149},". Instead of just asking dry questions, the agent should propose imaginative style elements, plot quirks, or color schemes to inspire the user.",{"type":51,"tag":151,"props":152,"children":154},"h4",{"id":153},"pillar-1-narrative-scope-custom-length",[155],{"type":57,"value":156},"Pillar 1: Narrative Scope & Custom Length",{"type":51,"tag":158,"props":159,"children":160},"ul",{},[161,172],{"type":51,"tag":162,"props":163,"children":164},"li",{},[165,170],{"type":51,"tag":117,"props":166,"children":167},{},[168],{"type":57,"value":169},"Narrative Scene Count",{"type":57,"value":171},": Ask the user exactly how many scenes they want in their narrative (e.g., a short 3-scene story, a standard 5-scene story, or an epic 10+ scene odyssey). Do NOT constrain the length.",{"type":51,"tag":162,"props":173,"children":174},{},[175,180,182],{"type":51,"tag":117,"props":176,"children":177},{},[178],{"type":57,"value":179},"Arc Structure",{"type":57,"value":181},": Let the user select the dramatic format:\n",{"type":51,"tag":183,"props":184,"children":185},"ol",{},[186,197,207,217,227],{"type":51,"tag":162,"props":187,"children":188},{},[189,195],{"type":51,"tag":190,"props":191,"children":192},"em",{},[193],{"type":57,"value":194},"Classic Hero's Journey",{"type":57,"value":196},": Hook, call to adventure, trials, climax, and resolution.",{"type":51,"tag":162,"props":198,"children":199},{},[200,205],{"type":51,"tag":190,"props":201,"children":202},{},[203],{"type":57,"value":204},"Short-Form Arc",{"type":57,"value":206},": Focused problem, quick struggle, and fast solution.",{"type":51,"tag":162,"props":208,"children":209},{},[210,215],{"type":51,"tag":190,"props":211,"children":212},{},[213],{"type":57,"value":214},"Tragic Fall",{"type":57,"value":216},": Rise to prominence, pride\u002Ferror, rapid failure, and moral warning.",{"type":51,"tag":162,"props":218,"children":219},{},[220,225],{"type":51,"tag":190,"props":221,"children":222},{},[223],{"type":57,"value":224},"Rags to Riches",{"type":57,"value":226},": Struggle against adversity, discovery, triumph, and giving back.",{"type":51,"tag":162,"props":228,"children":229},{},[230,235],{"type":51,"tag":190,"props":231,"children":232},{},[233],{"type":57,"value":234},"Custom \u002F Freestyle",{"type":57,"value":236},": User-provided structural sequence.",{"type":51,"tag":151,"props":238,"children":240},{"id":239},"pillar-2-character-consistency-framework",[241],{"type":57,"value":242},"Pillar 2: Character Consistency Framework",{"type":51,"tag":158,"props":244,"children":245},{},[246,287],{"type":51,"tag":162,"props":247,"children":248},{},[249,254,256],{"type":51,"tag":117,"props":250,"children":251},{},[252],{"type":57,"value":253},"Primary Character Portrait Prompt",{"type":57,"value":255},": Co-create a detailed description of the protagonist to maintain visual consistency.\n",{"type":51,"tag":158,"props":257,"children":258},{},[259,277],{"type":51,"tag":162,"props":260,"children":261},{},[262,267,269,275],{"type":51,"tag":190,"props":263,"children":264},{},[265],{"type":57,"value":266},"Formula",{"type":57,"value":268},": ",{"type":51,"tag":96,"props":270,"children":272},{"className":271},[],[273],{"type":57,"value":274},"[Species\u002FRole] + [Age\u002FMood] + [Distinct Costume] + [Defining Physical Features]",{"type":57,"value":276},".",{"type":51,"tag":162,"props":278,"children":279},{},[280,285],{"type":51,"tag":190,"props":281,"children":282},{},[283],{"type":57,"value":284},"Example",{"type":57,"value":286},": \"A fluffy white Angora bunny wearing miniature round science safety goggles, a tiny leather tool belt, and an emerald-green vest. Extremely curious, bright pink twitching nose.\"",{"type":51,"tag":162,"props":288,"children":289},{},[290,295],{"type":51,"tag":117,"props":291,"children":292},{},[293],{"type":57,"value":294},"Supporting Cast",{"type":57,"value":296},": Describe secondary characters and their visual relationship to the protagonist.",{"type":51,"tag":151,"props":298,"children":300},{"id":299},"pillar-3-multimedia-production-aesthetics",[301],{"type":57,"value":302},"Pillar 3: Multimedia & Production Aesthetics",{"type":51,"tag":158,"props":304,"children":305},{},[306,345,355,365],{"type":51,"tag":162,"props":307,"children":308},{},[309,314,316,321,323,329,331,336,338,343],{"type":51,"tag":117,"props":310,"children":311},{},[312],{"type":57,"value":313},"Visual Art Medium",{"type":57,"value":315},": (e.g., ",{"type":51,"tag":190,"props":317,"children":318},{},[319],{"type":57,"value":320},"3D Claymation \u002F Stop-Motion",{"type":57,"value":322}," ",{"type":51,"tag":324,"props":325,"children":326},"span",{},[327],{"type":57,"value":328},"recommended for charming consistency",{"type":57,"value":330},", ",{"type":51,"tag":190,"props":332,"children":333},{},[334],{"type":57,"value":335},"Realistic Sci-Fi Cinematic",{"type":57,"value":337},", or ",{"type":51,"tag":190,"props":339,"children":340},{},[341],{"type":57,"value":342},"Watercolor Sketch",{"type":57,"value":344},").",{"type":51,"tag":162,"props":346,"children":347},{},[348,353],{"type":51,"tag":117,"props":349,"children":350},{},[351],{"type":57,"value":352},"Color Palette & Mood",{"type":57,"value":354},": (e.g., \"Vibrant pasture greens and soft gold sunlight\" or \"Desaturated charcoal and glowing bioluminescent cyan\").",{"type":51,"tag":162,"props":356,"children":357},{},[358,363],{"type":51,"tag":117,"props":359,"children":360},{},[361],{"type":57,"value":362},"Soundtrack Genre & Tone",{"type":57,"value":364},": (e.g., \"Whimsical acoustic guitar and playful tuba\" or \"Ethereal synth pads and slow, soft chimes\").",{"type":51,"tag":162,"props":366,"children":367},{},[368,373,375,380,382,387,389,394],{"type":51,"tag":117,"props":369,"children":370},{},[371],{"type":57,"value":372},"Voice Actor Cast",{"type":57,"value":374},": (Prefer ",{"type":51,"tag":190,"props":376,"children":377},{},[378],{"type":57,"value":379},"Callirrhoe",{"type":57,"value":381}," for warm\u002Fsoothing female narration, ",{"type":51,"tag":190,"props":383,"children":384},{},[385],{"type":57,"value":386},"Fenrir",{"type":57,"value":388}," for resonant\u002Fdeep sci-fi narration, or ",{"type":51,"tag":190,"props":390,"children":391},{},[392],{"type":57,"value":393},"Kore",{"type":57,"value":395}," for playful\u002Fbright stories).",{"type":51,"tag":151,"props":397,"children":399},{"id":398},"pillar-4-audio-speed-fitting-preference",[400],{"type":57,"value":401},"Pillar 4: Audio Speed-Fitting Preference",{"type":51,"tag":158,"props":403,"children":404},{},[405,418],{"type":51,"tag":162,"props":406,"children":407},{},[408,410,416],{"type":57,"value":409},"Confirm if the user wants the system to automatically speed-fit the narrator voice-over using the FFmpeg ",{"type":51,"tag":96,"props":411,"children":413},{"className":412},[],[414],{"type":57,"value":415},"atempo",{"type":57,"value":417}," filter if it runs longer than the video scene (recommended to avoid video stalling\u002Flooping).",{"type":51,"tag":162,"props":419,"children":420},{},[421,426],{"type":51,"tag":190,"props":422,"children":423},{},[424],{"type":57,"value":425},"Warning",{"type":57,"value":427},": Inform the user that the showrunner will strictly clamp voiceover speedups at $1.25\\times$ to preserve natural speaker cadence. If a script is too wordy, the pipeline will instead loop the video or recommend text cuts in the Editor's QC Room.",{"type":51,"tag":132,"props":429,"children":431},{"id":430},"_12-interactive-loop",[432],{"type":57,"value":433},"1.2 Interactive Loop",{"type":51,"tag":183,"props":435,"children":436},{},[437,447],{"type":51,"tag":162,"props":438,"children":439},{},[440,445],{"type":51,"tag":117,"props":441,"children":442},{},[443],{"type":57,"value":444},"Draft Proposed Story Bible",{"type":57,"value":446},": Synthesize the user's answers and your creative suggestions into a formal Story Bible block.",{"type":51,"tag":162,"props":448,"children":449},{},[450,455,457],{"type":51,"tag":117,"props":451,"children":452},{},[453],{"type":57,"value":454},"Await Explicit User Approval",{"type":57,"value":456},": Present the story bible and scene-by-scene script. ",{"type":51,"tag":117,"props":458,"children":459},{},[460],{"type":57,"value":461},"Do NOT proceed to media generation until the user has explicitly approved the story bible.",{"type":51,"tag":102,"props":463,"children":464},{},[],{"type":51,"tag":66,"props":466,"children":468},{"id":467},"_2-scripting-story-bible-schema",[469],{"type":57,"value":470},"2. Scripting & Story Bible Schema",{"type":51,"tag":60,"props":472,"children":473},{},[474,476,482],{"type":57,"value":475},"Once the user approves the story bible, format the scene-by-scene scripts in a structured ",{"type":51,"tag":96,"props":477,"children":479},{"className":478},[],[480],{"type":57,"value":481},"scenes.json",{"type":57,"value":483}," file. For each scene (1 to N), specify:",{"type":51,"tag":158,"props":485,"children":486},{},[487,497,507,517,548,558],{"type":51,"tag":162,"props":488,"children":489},{},[490,495],{"type":51,"tag":117,"props":491,"children":492},{},[493],{"type":57,"value":494},"id",{"type":57,"value":496},": Sequential scene index (1-indexed).",{"type":51,"tag":162,"props":498,"children":499},{},[500,505],{"type":51,"tag":117,"props":501,"children":502},{},[503],{"type":57,"value":504},"title",{"type":57,"value":506},": Concise scene name.",{"type":51,"tag":162,"props":508,"children":509},{},[510,515],{"type":51,"tag":117,"props":511,"children":512},{},[513],{"type":57,"value":514},"narrator",{"type":57,"value":516},": Text for the voice-over (keep under 800 characters for Gemini TTS limits).",{"type":51,"tag":162,"props":518,"children":519},{},[520,525,527],{"type":51,"tag":117,"props":521,"children":522},{},[523],{"type":57,"value":524},"music_prompt",{"type":57,"value":526},": Specific background music prompt for Lyria.\n",{"type":51,"tag":158,"props":528,"children":529},{},[530],{"type":51,"tag":162,"props":531,"children":532},{},[533,538,540,546],{"type":51,"tag":190,"props":534,"children":535},{},[536],{"type":57,"value":537},"Rule",{"type":57,"value":539},": Music prompts must automatically append the strict instrumental negative filter: ",{"type":51,"tag":96,"props":541,"children":543},{"className":542},[],[544],{"type":57,"value":545},", strictly instrumental, no vocals, no voice, no singing, ambient background score",{"type":57,"value":547}," to avoid synthetic vocal artifacts.",{"type":51,"tag":162,"props":549,"children":550},{},[551,556],{"type":51,"tag":117,"props":552,"children":553},{},[554],{"type":57,"value":555},"image_prompt",{"type":57,"value":557},": Nano Banana visual prompt incorporating the character descriptions and visual medium.",{"type":51,"tag":162,"props":559,"children":560},{},[561,566],{"type":51,"tag":117,"props":562,"children":563},{},[564],{"type":57,"value":565},"motion_prompt",{"type":57,"value":567},": Veo 3.1 motion prompt describing camera movement and subject action.",{"type":51,"tag":102,"props":569,"children":570},{},[],{"type":51,"tag":66,"props":572,"children":574},{"id":573},"_3-double-engine-media-assembly-pipeline",[575],{"type":57,"value":576},"3. Double-Engine Media Assembly Pipeline",{"type":51,"tag":60,"props":578,"children":579},{},[580,582,587],{"type":57,"value":581},"This skill provides a ",{"type":51,"tag":117,"props":583,"children":584},{},[585],{"type":57,"value":586},"Double-Engine",{"type":57,"value":588}," media assembly pipeline. Any coding agent can either run the automated Python scripts or perform the exact manual FFmpeg commands directly in the shell if they want to override the pipeline.",{"type":51,"tag":132,"props":590,"children":592},{"id":591},"engine-a-manual-agent-command-blueprint-raw-ffmpeg",[593],{"type":57,"value":594},"Engine A: Manual Agent Command Blueprint (Raw FFmpeg)",{"type":51,"tag":60,"props":596,"children":597},{},[598],{"type":57,"value":599},"If you are an agent executing these steps manually in the command line, use this step-by-step FFmpeg blueprint to compile individual scenes and concatenate them robustly:",{"type":51,"tag":151,"props":601,"children":603},{"id":602},"_1-generate-voiceover-probe-duration",[604],{"type":57,"value":605},"1. Generate Voiceover & Probe Duration",{"type":51,"tag":60,"props":607,"children":608},{},[609],{"type":57,"value":610},"Always run TTS generation first and retrieve the exact duration of the voice file:",{"type":51,"tag":89,"props":612,"children":616},{"className":613,"code":614,"language":615,"meta":98,"style":98},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 voice.wav\n","bash",[617],{"type":51,"tag":96,"props":618,"children":619},{"__ignoreMap":98},[620],{"type":51,"tag":324,"props":621,"children":624},{"class":622,"line":623},"line",1,[625,631,637,642,647,652,657,662,668],{"type":51,"tag":324,"props":626,"children":628},{"style":627},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[629],{"type":57,"value":630},"ffprobe",{"type":51,"tag":324,"props":632,"children":634},{"style":633},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[635],{"type":57,"value":636}," -v",{"type":51,"tag":324,"props":638,"children":639},{"style":633},[640],{"type":57,"value":641}," error",{"type":51,"tag":324,"props":643,"children":644},{"style":633},[645],{"type":57,"value":646}," -show_entries",{"type":51,"tag":324,"props":648,"children":649},{"style":633},[650],{"type":57,"value":651}," format=duration",{"type":51,"tag":324,"props":653,"children":654},{"style":633},[655],{"type":57,"value":656}," -of",{"type":51,"tag":324,"props":658,"children":659},{"style":633},[660],{"type":57,"value":661}," default=noprint_wrappers=1:nokey=",{"type":51,"tag":324,"props":663,"children":665},{"style":664},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[666],{"type":57,"value":667},"1",{"type":51,"tag":324,"props":669,"children":670},{"style":633},[671],{"type":57,"value":672}," voice.wav\n",{"type":51,"tag":151,"props":674,"children":676},{"id":675},"_2-query-veo-video-with-optimal-sizing",[677],{"type":57,"value":678},"2. Query Veo Video with Optimal Sizing",{"type":51,"tag":60,"props":680,"children":681},{},[682],{"type":57,"value":683},"Compare the voice duration ($D_$) and request a matching video length from Veo (either 4, 6, or 8 seconds):",{"type":51,"tag":158,"props":685,"children":686},{},[687,699,710],{"type":51,"tag":162,"props":688,"children":689},{},[690,692,697],{"type":57,"value":691},"$D_ \\le 4.2\\text{s} \\rightarrow$ Generate a ",{"type":51,"tag":117,"props":693,"children":694},{},[695],{"type":57,"value":696},"4-second",{"type":57,"value":698}," video clip.",{"type":51,"tag":162,"props":700,"children":701},{},[702,704,709],{"type":57,"value":703},"$D_ \\le 6.2\\text{s} \\rightarrow$ Generate a ",{"type":51,"tag":117,"props":705,"children":706},{},[707],{"type":57,"value":708},"6-second",{"type":57,"value":698},{"type":51,"tag":162,"props":711,"children":712},{},[713,715,720],{"type":57,"value":714},"$D_ > 6.2\\text{s} \\rightarrow$ Generate an ",{"type":51,"tag":117,"props":716,"children":717},{},[718],{"type":57,"value":719},"8-second",{"type":57,"value":698},{"type":51,"tag":60,"props":722,"children":723},{},[724],{"type":57,"value":725},"Retrieve the resulting video clip's exact duration:",{"type":51,"tag":89,"props":727,"children":729},{"className":613,"code":728,"language":615,"meta":98,"style":98},"ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4\n",[730],{"type":51,"tag":96,"props":731,"children":732},{"__ignoreMap":98},[733],{"type":51,"tag":324,"props":734,"children":735},{"class":622,"line":623},[736,740,744,748,752,756,760,764,768],{"type":51,"tag":324,"props":737,"children":738},{"style":627},[739],{"type":57,"value":630},{"type":51,"tag":324,"props":741,"children":742},{"style":633},[743],{"type":57,"value":636},{"type":51,"tag":324,"props":745,"children":746},{"style":633},[747],{"type":57,"value":641},{"type":51,"tag":324,"props":749,"children":750},{"style":633},[751],{"type":57,"value":646},{"type":51,"tag":324,"props":753,"children":754},{"style":633},[755],{"type":57,"value":651},{"type":51,"tag":324,"props":757,"children":758},{"style":633},[759],{"type":57,"value":656},{"type":51,"tag":324,"props":761,"children":762},{"style":633},[763],{"type":57,"value":661},{"type":51,"tag":324,"props":765,"children":766},{"style":664},[767],{"type":57,"value":667},{"type":51,"tag":324,"props":769,"children":770},{"style":633},[771],{"type":57,"value":772}," video.mp4\n",{"type":51,"tag":151,"props":774,"children":776},{"id":775},"_3-calculate-speed-fit-tempo-and-determine-looping",[777],{"type":57,"value":778},"3. Calculate Speed-Fit Tempo and Determine Looping",{"type":51,"tag":60,"props":780,"children":781},{},[782,784,790,792,798],{"type":57,"value":783},"If ",{"type":51,"tag":96,"props":785,"children":787},{"className":786},[],[788],{"type":57,"value":789},"voice_duration",{"type":57,"value":791}," ($D_$) is longer than ",{"type":51,"tag":96,"props":793,"children":795},{"className":794},[],[796],{"type":57,"value":797},"video_duration",{"type":57,"value":799}," ($D_$), calculate the required tempo ratio:\n$$\\text{tempo} = \\frac{D_}{D_ - 0.5}$$",{"type":51,"tag":158,"props":801,"children":802},{},[803,820],{"type":51,"tag":162,"props":804,"children":805},{},[806,811,813,818],{"type":51,"tag":117,"props":807,"children":808},{},[809],{"type":57,"value":810},"Tempo Guardrail",{"type":57,"value":812},": If $\\text{tempo} \\le 1.25$, apply the ",{"type":51,"tag":96,"props":814,"children":816},{"className":815},[],[817],{"type":57,"value":415},{"type":57,"value":819}," filter.",{"type":51,"tag":162,"props":821,"children":822},{},[823,828,830,836,838,843],{"type":51,"tag":117,"props":824,"children":825},{},[826],{"type":57,"value":827},"Tempo Clamp",{"type":57,"value":829},": If $\\text{tempo} > 1.25$, drop the tempo back to ",{"type":51,"tag":96,"props":831,"children":833},{"className":832},[],[834],{"type":57,"value":835},"1.0",{"type":57,"value":837}," (natural speaking speed) and ",{"type":51,"tag":117,"props":839,"children":840},{},[841],{"type":57,"value":842},"loop",{"type":57,"value":844}," the background video clip indefinitely to fit.",{"type":51,"tag":151,"props":846,"children":848},{"id":847},"_4-determine-if-video-has-a-native-audio-track",[849],{"type":57,"value":850},"4. Determine if Video has a Native Audio Track",{"type":51,"tag":60,"props":852,"children":853},{},[854],{"type":57,"value":855},"To prevent FFmpeg filter crashes, check if the video has an audio stream:",{"type":51,"tag":89,"props":857,"children":859},{"className":613,"code":858,"language":615,"meta":98,"style":98},"ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 video.mp4\n",[860],{"type":51,"tag":96,"props":861,"children":862},{"__ignoreMap":98},[863],{"type":51,"tag":324,"props":864,"children":865},{"class":622,"line":623},[866,870,874,878,883,888,892,897,901,906,911],{"type":51,"tag":324,"props":867,"children":868},{"style":627},[869],{"type":57,"value":630},{"type":51,"tag":324,"props":871,"children":872},{"style":633},[873],{"type":57,"value":636},{"type":51,"tag":324,"props":875,"children":876},{"style":633},[877],{"type":57,"value":641},{"type":51,"tag":324,"props":879,"children":880},{"style":633},[881],{"type":57,"value":882}," -select_streams",{"type":51,"tag":324,"props":884,"children":885},{"style":633},[886],{"type":57,"value":887}," a",{"type":51,"tag":324,"props":889,"children":890},{"style":633},[891],{"type":57,"value":646},{"type":51,"tag":324,"props":893,"children":894},{"style":633},[895],{"type":57,"value":896}," stream=codec_type",{"type":51,"tag":324,"props":898,"children":899},{"style":633},[900],{"type":57,"value":656},{"type":51,"tag":324,"props":902,"children":903},{"style":633},[904],{"type":57,"value":905}," csv=p=",{"type":51,"tag":324,"props":907,"children":908},{"style":664},[909],{"type":57,"value":910},"0",{"type":51,"tag":324,"props":912,"children":913},{"style":633},[914],{"type":57,"value":772},{"type":51,"tag":151,"props":916,"children":918},{"id":917},"_5-mix-audio-streams-with-volume-ducking-mathematical-capping",[919],{"type":57,"value":920},"5. Mix Audio Streams with Volume Ducking & Mathematical Capping",{"type":51,"tag":60,"props":922,"children":923},{},[924],{"type":57,"value":925},"Calculate the exact target output duration:\n$$\\text{out_duration} = \\frac{D_}{\\text{tempo}}$$",{"type":51,"tag":60,"props":927,"children":928},{},[929,931],{"type":57,"value":930},"Run the appropriate mixing command. ",{"type":51,"tag":190,"props":932,"children":933},{},[934,936,942,944,950],{"type":57,"value":935},"CRITICAL: We append ",{"type":51,"tag":96,"props":937,"children":939},{"className":938},[],[940],{"type":57,"value":941},"-stream_loop -1",{"type":57,"value":943}," to loop the video in case tempo clamping is active, and enforce the output duration strictly with ",{"type":51,"tag":96,"props":945,"children":947},{"className":946},[],[948],{"type":57,"value":949},"-t {out_duration}",{"type":57,"value":951}," to prevent blank trailing frames.",{"type":51,"tag":158,"props":953,"children":954},{},[955,1155],{"type":51,"tag":162,"props":956,"children":957},{},[958,963,965],{"type":51,"tag":117,"props":959,"children":960},{},[961],{"type":57,"value":962},"Case A (Video has ambient sound)",{"type":57,"value":964},": Duck video audio to 25%, apply speed-fit and boost to narration, duck music to 15%, and mix them:\n",{"type":51,"tag":89,"props":966,"children":968},{"className":613,"code":967,"language":615,"meta":98,"style":98},"ffmpeg -y -stream_loop -1 -i video.mp4 -i voice.wav -i music.wav \\\n  -filter_complex \"[0:a]volume=0.25[bgv]; [1:a]atempo=1.20,volume=1.5[vo]; [2:a]volume=0.15[bgm]; [vo][bgv][bgm]amix=inputs=3:duration=first:dropout_transition=0[aout]\" \\\n  -map 0:v -map \"[aout]\" -t 7.345 -c:v libx264 -preset fast -pix_fmt yuv420p -c:a aac -ar 44100 scene_mixed.mp4\n",[969],{"type":51,"tag":96,"props":970,"children":971},{"__ignoreMap":98},[972,1029,1058],{"type":51,"tag":324,"props":973,"children":974},{"class":622,"line":623},[975,980,985,990,995,1000,1005,1009,1014,1018,1023],{"type":51,"tag":324,"props":976,"children":977},{"style":627},[978],{"type":57,"value":979},"ffmpeg",{"type":51,"tag":324,"props":981,"children":982},{"style":633},[983],{"type":57,"value":984}," -y",{"type":51,"tag":324,"props":986,"children":987},{"style":633},[988],{"type":57,"value":989}," -stream_loop",{"type":51,"tag":324,"props":991,"children":992},{"style":633},[993],{"type":57,"value":994}," -1",{"type":51,"tag":324,"props":996,"children":997},{"style":633},[998],{"type":57,"value":999}," -i",{"type":51,"tag":324,"props":1001,"children":1002},{"style":633},[1003],{"type":57,"value":1004}," video.mp4",{"type":51,"tag":324,"props":1006,"children":1007},{"style":633},[1008],{"type":57,"value":999},{"type":51,"tag":324,"props":1010,"children":1011},{"style":633},[1012],{"type":57,"value":1013}," voice.wav",{"type":51,"tag":324,"props":1015,"children":1016},{"style":633},[1017],{"type":57,"value":999},{"type":51,"tag":324,"props":1019,"children":1020},{"style":633},[1021],{"type":57,"value":1022}," music.wav",{"type":51,"tag":324,"props":1024,"children":1026},{"style":1025},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1027],{"type":57,"value":1028}," \\\n",{"type":51,"tag":324,"props":1030,"children":1032},{"class":622,"line":1031},2,[1033,1038,1044,1049,1054],{"type":51,"tag":324,"props":1034,"children":1035},{"style":633},[1036],{"type":57,"value":1037},"  -filter_complex",{"type":51,"tag":324,"props":1039,"children":1041},{"style":1040},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1042],{"type":57,"value":1043}," \"",{"type":51,"tag":324,"props":1045,"children":1046},{"style":633},[1047],{"type":57,"value":1048},"[0:a]volume=0.25[bgv]; [1:a]atempo=1.20,volume=1.5[vo]; [2:a]volume=0.15[bgm]; [vo][bgv][bgm]amix=inputs=3:duration=first:dropout_transition=0[aout]",{"type":51,"tag":324,"props":1050,"children":1051},{"style":1040},[1052],{"type":57,"value":1053},"\"",{"type":51,"tag":324,"props":1055,"children":1056},{"style":1025},[1057],{"type":57,"value":1028},{"type":51,"tag":324,"props":1059,"children":1061},{"class":622,"line":1060},3,[1062,1067,1072,1077,1081,1086,1090,1095,1100,1105,1110,1115,1120,1125,1130,1135,1140,1145,1150],{"type":51,"tag":324,"props":1063,"children":1064},{"style":633},[1065],{"type":57,"value":1066},"  -map",{"type":51,"tag":324,"props":1068,"children":1069},{"style":633},[1070],{"type":57,"value":1071}," 0:v",{"type":51,"tag":324,"props":1073,"children":1074},{"style":633},[1075],{"type":57,"value":1076}," -map",{"type":51,"tag":324,"props":1078,"children":1079},{"style":1040},[1080],{"type":57,"value":1043},{"type":51,"tag":324,"props":1082,"children":1083},{"style":633},[1084],{"type":57,"value":1085},"[aout]",{"type":51,"tag":324,"props":1087,"children":1088},{"style":1040},[1089],{"type":57,"value":1053},{"type":51,"tag":324,"props":1091,"children":1092},{"style":633},[1093],{"type":57,"value":1094}," -t",{"type":51,"tag":324,"props":1096,"children":1097},{"style":664},[1098],{"type":57,"value":1099}," 7.345",{"type":51,"tag":324,"props":1101,"children":1102},{"style":633},[1103],{"type":57,"value":1104}," -c:v",{"type":51,"tag":324,"props":1106,"children":1107},{"style":633},[1108],{"type":57,"value":1109}," libx264",{"type":51,"tag":324,"props":1111,"children":1112},{"style":633},[1113],{"type":57,"value":1114}," -preset",{"type":51,"tag":324,"props":1116,"children":1117},{"style":633},[1118],{"type":57,"value":1119}," fast",{"type":51,"tag":324,"props":1121,"children":1122},{"style":633},[1123],{"type":57,"value":1124}," -pix_fmt",{"type":51,"tag":324,"props":1126,"children":1127},{"style":633},[1128],{"type":57,"value":1129}," yuv420p",{"type":51,"tag":324,"props":1131,"children":1132},{"style":633},[1133],{"type":57,"value":1134}," -c:a",{"type":51,"tag":324,"props":1136,"children":1137},{"style":633},[1138],{"type":57,"value":1139}," aac",{"type":51,"tag":324,"props":1141,"children":1142},{"style":633},[1143],{"type":57,"value":1144}," -ar",{"type":51,"tag":324,"props":1146,"children":1147},{"style":664},[1148],{"type":57,"value":1149}," 44100",{"type":51,"tag":324,"props":1151,"children":1152},{"style":633},[1153],{"type":57,"value":1154}," scene_mixed.mp4\n",{"type":51,"tag":162,"props":1156,"children":1157},{},[1158,1163,1165],{"type":51,"tag":117,"props":1159,"children":1160},{},[1161],{"type":57,"value":1162},"Case B (Video is silent)",{"type":57,"value":1164},": Mix only the speed-fitted narration and the ducked background music:\n",{"type":51,"tag":89,"props":1166,"children":1168},{"className":613,"code":1167,"language":615,"meta":98,"style":98},"ffmpeg -y -stream_loop -1 -i video.mp4 -i voice.wav -i music.wav \\\n  -filter_complex \"[1:a]atempo=1.20,volume=1.5[vo]; [2:a]volume=0.15[bgm]; [vo][bgm]amix=inputs=2:duration=first:dropout_transition=0[aout]\" \\\n  -map 0:v -map \"[aout]\" -t 7.345 -c:v libx264 -preset fast -pix_fmt yuv420p -c:a aac -ar 44100 scene_mixed.mp4\n",[1169],{"type":51,"tag":96,"props":1170,"children":1171},{"__ignoreMap":98},[1172,1219,1243],{"type":51,"tag":324,"props":1173,"children":1174},{"class":622,"line":623},[1175,1179,1183,1187,1191,1195,1199,1203,1207,1211,1215],{"type":51,"tag":324,"props":1176,"children":1177},{"style":627},[1178],{"type":57,"value":979},{"type":51,"tag":324,"props":1180,"children":1181},{"style":633},[1182],{"type":57,"value":984},{"type":51,"tag":324,"props":1184,"children":1185},{"style":633},[1186],{"type":57,"value":989},{"type":51,"tag":324,"props":1188,"children":1189},{"style":633},[1190],{"type":57,"value":994},{"type":51,"tag":324,"props":1192,"children":1193},{"style":633},[1194],{"type":57,"value":999},{"type":51,"tag":324,"props":1196,"children":1197},{"style":633},[1198],{"type":57,"value":1004},{"type":51,"tag":324,"props":1200,"children":1201},{"style":633},[1202],{"type":57,"value":999},{"type":51,"tag":324,"props":1204,"children":1205},{"style":633},[1206],{"type":57,"value":1013},{"type":51,"tag":324,"props":1208,"children":1209},{"style":633},[1210],{"type":57,"value":999},{"type":51,"tag":324,"props":1212,"children":1213},{"style":633},[1214],{"type":57,"value":1022},{"type":51,"tag":324,"props":1216,"children":1217},{"style":1025},[1218],{"type":57,"value":1028},{"type":51,"tag":324,"props":1220,"children":1221},{"class":622,"line":1031},[1222,1226,1230,1235,1239],{"type":51,"tag":324,"props":1223,"children":1224},{"style":633},[1225],{"type":57,"value":1037},{"type":51,"tag":324,"props":1227,"children":1228},{"style":1040},[1229],{"type":57,"value":1043},{"type":51,"tag":324,"props":1231,"children":1232},{"style":633},[1233],{"type":57,"value":1234},"[1:a]atempo=1.20,volume=1.5[vo]; [2:a]volume=0.15[bgm]; [vo][bgm]amix=inputs=2:duration=first:dropout_transition=0[aout]",{"type":51,"tag":324,"props":1236,"children":1237},{"style":1040},[1238],{"type":57,"value":1053},{"type":51,"tag":324,"props":1240,"children":1241},{"style":1025},[1242],{"type":57,"value":1028},{"type":51,"tag":324,"props":1244,"children":1245},{"class":622,"line":1060},[1246,1250,1254,1258,1262,1266,1270,1274,1278,1282,1286,1290,1294,1298,1302,1306,1310,1314,1318],{"type":51,"tag":324,"props":1247,"children":1248},{"style":633},[1249],{"type":57,"value":1066},{"type":51,"tag":324,"props":1251,"children":1252},{"style":633},[1253],{"type":57,"value":1071},{"type":51,"tag":324,"props":1255,"children":1256},{"style":633},[1257],{"type":57,"value":1076},{"type":51,"tag":324,"props":1259,"children":1260},{"style":1040},[1261],{"type":57,"value":1043},{"type":51,"tag":324,"props":1263,"children":1264},{"style":633},[1265],{"type":57,"value":1085},{"type":51,"tag":324,"props":1267,"children":1268},{"style":1040},[1269],{"type":57,"value":1053},{"type":51,"tag":324,"props":1271,"children":1272},{"style":633},[1273],{"type":57,"value":1094},{"type":51,"tag":324,"props":1275,"children":1276},{"style":664},[1277],{"type":57,"value":1099},{"type":51,"tag":324,"props":1279,"children":1280},{"style":633},[1281],{"type":57,"value":1104},{"type":51,"tag":324,"props":1283,"children":1284},{"style":633},[1285],{"type":57,"value":1109},{"type":51,"tag":324,"props":1287,"children":1288},{"style":633},[1289],{"type":57,"value":1114},{"type":51,"tag":324,"props":1291,"children":1292},{"style":633},[1293],{"type":57,"value":1119},{"type":51,"tag":324,"props":1295,"children":1296},{"style":633},[1297],{"type":57,"value":1124},{"type":51,"tag":324,"props":1299,"children":1300},{"style":633},[1301],{"type":57,"value":1129},{"type":51,"tag":324,"props":1303,"children":1304},{"style":633},[1305],{"type":57,"value":1134},{"type":51,"tag":324,"props":1307,"children":1308},{"style":633},[1309],{"type":57,"value":1139},{"type":51,"tag":324,"props":1311,"children":1312},{"style":633},[1313],{"type":57,"value":1144},{"type":51,"tag":324,"props":1315,"children":1316},{"style":664},[1317],{"type":57,"value":1149},{"type":51,"tag":324,"props":1319,"children":1320},{"style":633},[1321],{"type":57,"value":1154},{"type":51,"tag":151,"props":1323,"children":1325},{"id":1324},"_6-pre-flight-normalization-for-concat-desync-prevention",[1326],{"type":57,"value":1327},"6. Pre-flight Normalization for Concat Desync Prevention",{"type":51,"tag":60,"props":1329,"children":1330},{},[1331,1333,1338],{"type":57,"value":1332},"Before concatenating multiple video files, you ",{"type":51,"tag":117,"props":1334,"children":1335},{},[1336],{"type":57,"value":1337},"MUST",{"type":57,"value":1339}," normalize their audio parameters to prevent audio drift, blank screens, or concatenation failures.",{"type":51,"tag":158,"props":1341,"children":1342},{},[1343,1441],{"type":51,"tag":162,"props":1344,"children":1345},{},[1346,1351,1353,1359,1361,1367,1369,1375,1377],{"type":51,"tag":117,"props":1347,"children":1348},{},[1349],{"type":57,"value":1350},"Normalize Segment WITH Native Audio",{"type":57,"value":1352},": Re-encode to standard ",{"type":51,"tag":96,"props":1354,"children":1356},{"className":1355},[],[1357],{"type":57,"value":1358},"libx264",{"type":57,"value":1360}," and ",{"type":51,"tag":96,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":57,"value":1366},"aac",{"type":57,"value":1368}," at ",{"type":51,"tag":96,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":57,"value":1374},"44100Hz",{"type":57,"value":1376},":\n",{"type":51,"tag":89,"props":1378,"children":1380},{"className":613,"code":1379,"language":615,"meta":98,"style":98},"ffmpeg -i scene_mixed.mp4 -c:v libx264 -preset fast -c:a aac -ar 44100 -y norm_scene.mp4\n",[1381],{"type":51,"tag":96,"props":1382,"children":1383},{"__ignoreMap":98},[1384],{"type":51,"tag":324,"props":1385,"children":1386},{"class":622,"line":623},[1387,1391,1395,1400,1404,1408,1412,1416,1420,1424,1428,1432,1436],{"type":51,"tag":324,"props":1388,"children":1389},{"style":627},[1390],{"type":57,"value":979},{"type":51,"tag":324,"props":1392,"children":1393},{"style":633},[1394],{"type":57,"value":999},{"type":51,"tag":324,"props":1396,"children":1397},{"style":633},[1398],{"type":57,"value":1399}," scene_mixed.mp4",{"type":51,"tag":324,"props":1401,"children":1402},{"style":633},[1403],{"type":57,"value":1104},{"type":51,"tag":324,"props":1405,"children":1406},{"style":633},[1407],{"type":57,"value":1109},{"type":51,"tag":324,"props":1409,"children":1410},{"style":633},[1411],{"type":57,"value":1114},{"type":51,"tag":324,"props":1413,"children":1414},{"style":633},[1415],{"type":57,"value":1119},{"type":51,"tag":324,"props":1417,"children":1418},{"style":633},[1419],{"type":57,"value":1134},{"type":51,"tag":324,"props":1421,"children":1422},{"style":633},[1423],{"type":57,"value":1139},{"type":51,"tag":324,"props":1425,"children":1426},{"style":633},[1427],{"type":57,"value":1144},{"type":51,"tag":324,"props":1429,"children":1430},{"style":664},[1431],{"type":57,"value":1149},{"type":51,"tag":324,"props":1433,"children":1434},{"style":633},[1435],{"type":57,"value":984},{"type":51,"tag":324,"props":1437,"children":1438},{"style":633},[1439],{"type":57,"value":1440}," norm_scene.mp4\n",{"type":51,"tag":162,"props":1442,"children":1443},{},[1444,1449,1451],{"type":51,"tag":117,"props":1445,"children":1446},{},[1447],{"type":57,"value":1448},"Normalize Segment WITHOUT Audio (Silent clips)",{"type":57,"value":1450},": Force-inject a silent mono track and re-encode:\n",{"type":51,"tag":89,"props":1452,"children":1454},{"className":613,"code":1453,"language":615,"meta":98,"style":98},"ffmpeg -i scene_mixed.mp4 -f lavfi -i anullsrc=cl=mono:r=44100 \\\n  -map 0:v -map 1:a -c:v libx264 -preset fast -c:a aac -shortest -y norm_scene.mp4\n",[1455],{"type":51,"tag":96,"props":1456,"children":1457},{"__ignoreMap":98},[1458,1501],{"type":51,"tag":324,"props":1459,"children":1460},{"class":622,"line":623},[1461,1465,1469,1473,1478,1483,1487,1492,1497],{"type":51,"tag":324,"props":1462,"children":1463},{"style":627},[1464],{"type":57,"value":979},{"type":51,"tag":324,"props":1466,"children":1467},{"style":633},[1468],{"type":57,"value":999},{"type":51,"tag":324,"props":1470,"children":1471},{"style":633},[1472],{"type":57,"value":1399},{"type":51,"tag":324,"props":1474,"children":1475},{"style":633},[1476],{"type":57,"value":1477}," -f",{"type":51,"tag":324,"props":1479,"children":1480},{"style":633},[1481],{"type":57,"value":1482}," lavfi",{"type":51,"tag":324,"props":1484,"children":1485},{"style":633},[1486],{"type":57,"value":999},{"type":51,"tag":324,"props":1488,"children":1489},{"style":633},[1490],{"type":57,"value":1491}," anullsrc=cl=mono:r=",{"type":51,"tag":324,"props":1493,"children":1494},{"style":664},[1495],{"type":57,"value":1496},"44100",{"type":51,"tag":324,"props":1498,"children":1499},{"style":1025},[1500],{"type":57,"value":1028},{"type":51,"tag":324,"props":1502,"children":1503},{"class":622,"line":1031},[1504,1508,1512,1516,1521,1525,1529,1533,1537,1541,1545,1550,1554],{"type":51,"tag":324,"props":1505,"children":1506},{"style":633},[1507],{"type":57,"value":1066},{"type":51,"tag":324,"props":1509,"children":1510},{"style":633},[1511],{"type":57,"value":1071},{"type":51,"tag":324,"props":1513,"children":1514},{"style":633},[1515],{"type":57,"value":1076},{"type":51,"tag":324,"props":1517,"children":1518},{"style":633},[1519],{"type":57,"value":1520}," 1:a",{"type":51,"tag":324,"props":1522,"children":1523},{"style":633},[1524],{"type":57,"value":1104},{"type":51,"tag":324,"props":1526,"children":1527},{"style":633},[1528],{"type":57,"value":1109},{"type":51,"tag":324,"props":1530,"children":1531},{"style":633},[1532],{"type":57,"value":1114},{"type":51,"tag":324,"props":1534,"children":1535},{"style":633},[1536],{"type":57,"value":1119},{"type":51,"tag":324,"props":1538,"children":1539},{"style":633},[1540],{"type":57,"value":1134},{"type":51,"tag":324,"props":1542,"children":1543},{"style":633},[1544],{"type":57,"value":1139},{"type":51,"tag":324,"props":1546,"children":1547},{"style":633},[1548],{"type":57,"value":1549}," -shortest",{"type":51,"tag":324,"props":1551,"children":1552},{"style":633},[1553],{"type":57,"value":984},{"type":51,"tag":324,"props":1555,"children":1556},{"style":633},[1557],{"type":57,"value":1440},{"type":51,"tag":151,"props":1559,"children":1561},{"id":1560},"_7-concatenate-normalized-segments-instantly",[1562],{"type":57,"value":1563},"7. Concatenate Normalized Segments Instantly",{"type":51,"tag":60,"props":1565,"children":1566},{},[1567],{"type":57,"value":1568},"Since all segments are perfectly normalized to the same video\u002Faudio codec configurations, stitch them instantly without re-encoding:",{"type":51,"tag":89,"props":1570,"children":1572},{"className":613,"code":1571,"language":615,"meta":98,"style":98},"# Create concat_list.txt containing file paths:\n# file 'norm_scene_1.mp4'\n# file 'norm_scene_2.mp4'\nffmpeg -y -f concat -safe 0 -i concat_list.txt -c copy final_story.mp4\n",[1573],{"type":51,"tag":96,"props":1574,"children":1575},{"__ignoreMap":98},[1576,1585,1593,1601],{"type":51,"tag":324,"props":1577,"children":1578},{"class":622,"line":623},[1579],{"type":51,"tag":324,"props":1580,"children":1582},{"style":1581},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1583],{"type":57,"value":1584},"# Create concat_list.txt containing file paths:\n",{"type":51,"tag":324,"props":1586,"children":1587},{"class":622,"line":1031},[1588],{"type":51,"tag":324,"props":1589,"children":1590},{"style":1581},[1591],{"type":57,"value":1592},"# file 'norm_scene_1.mp4'\n",{"type":51,"tag":324,"props":1594,"children":1595},{"class":622,"line":1060},[1596],{"type":51,"tag":324,"props":1597,"children":1598},{"style":1581},[1599],{"type":57,"value":1600},"# file 'norm_scene_2.mp4'\n",{"type":51,"tag":324,"props":1602,"children":1604},{"class":622,"line":1603},4,[1605,1609,1613,1617,1622,1627,1632,1636,1641,1646,1651],{"type":51,"tag":324,"props":1606,"children":1607},{"style":627},[1608],{"type":57,"value":979},{"type":51,"tag":324,"props":1610,"children":1611},{"style":633},[1612],{"type":57,"value":984},{"type":51,"tag":324,"props":1614,"children":1615},{"style":633},[1616],{"type":57,"value":1477},{"type":51,"tag":324,"props":1618,"children":1619},{"style":633},[1620],{"type":57,"value":1621}," concat",{"type":51,"tag":324,"props":1623,"children":1624},{"style":633},[1625],{"type":57,"value":1626}," -safe",{"type":51,"tag":324,"props":1628,"children":1629},{"style":664},[1630],{"type":57,"value":1631}," 0",{"type":51,"tag":324,"props":1633,"children":1634},{"style":633},[1635],{"type":57,"value":999},{"type":51,"tag":324,"props":1637,"children":1638},{"style":633},[1639],{"type":57,"value":1640}," concat_list.txt",{"type":51,"tag":324,"props":1642,"children":1643},{"style":633},[1644],{"type":57,"value":1645}," -c",{"type":51,"tag":324,"props":1647,"children":1648},{"style":633},[1649],{"type":57,"value":1650}," copy",{"type":51,"tag":324,"props":1652,"children":1653},{"style":633},[1654],{"type":57,"value":1655}," final_story.mp4\n",{"type":51,"tag":102,"props":1657,"children":1658},{},[],{"type":51,"tag":132,"props":1660,"children":1662},{"id":1661},"engine-b-automated-scripting-blueprint",[1663],{"type":57,"value":1664},"Engine B: Automated Scripting Blueprint",{"type":51,"tag":60,"props":1666,"children":1667},{},[1668,1670,1676],{"type":57,"value":1669},"For fully automated and robust end-to-end execution, use the provided Python scripts in the ",{"type":51,"tag":96,"props":1671,"children":1673},{"className":1672},[],[1674],{"type":57,"value":1675},"scripts\u002F",{"type":57,"value":1677}," directory:",{"type":51,"tag":151,"props":1679,"children":1681},{"id":1680},"_1-generate-individual-scene-assets",[1682],{"type":57,"value":1683},"1. Generate Individual Scene Assets",{"type":51,"tag":60,"props":1685,"children":1686},{},[1687,1689,1695],{"type":57,"value":1688},"Run ",{"type":51,"tag":96,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":57,"value":1694},"generate_scene.py",{"type":57,"value":1696}," for each scene (this can be executed concurrently in parallel subagents to maximize throughput):",{"type":51,"tag":89,"props":1698,"children":1700},{"className":613,"code":1699,"language":615,"meta":98,"style":98},"python3 story-generator\u002Fscripts\u002Fgenerate_scene.py \\\n  --scene_id 1 \\\n  --narrator \"Barnaby the bunny woke up in his cozy earthy burrow...\" \\\n  --voice \"Callirrhoe\" \\\n  --music \"Gentle acoustic guitar theme\" \\\n  --image \"3D claymation, cartoon bunny with safety goggles...\" \\\n  --video \"The bunny stretches lazily, ears twitching\" \\\n  --out_dir \u002Fpath\u002Fto\u002Fproject_dir\n",[1701],{"type":51,"tag":96,"props":1702,"children":1703},{"__ignoreMap":98},[1704,1721,1738,1763,1787,1813,1839,1865],{"type":51,"tag":324,"props":1705,"children":1706},{"class":622,"line":623},[1707,1712,1717],{"type":51,"tag":324,"props":1708,"children":1709},{"style":627},[1710],{"type":57,"value":1711},"python3",{"type":51,"tag":324,"props":1713,"children":1714},{"style":633},[1715],{"type":57,"value":1716}," story-generator\u002Fscripts\u002Fgenerate_scene.py",{"type":51,"tag":324,"props":1718,"children":1719},{"style":1025},[1720],{"type":57,"value":1028},{"type":51,"tag":324,"props":1722,"children":1723},{"class":622,"line":1031},[1724,1729,1734],{"type":51,"tag":324,"props":1725,"children":1726},{"style":633},[1727],{"type":57,"value":1728},"  --scene_id",{"type":51,"tag":324,"props":1730,"children":1731},{"style":664},[1732],{"type":57,"value":1733}," 1",{"type":51,"tag":324,"props":1735,"children":1736},{"style":1025},[1737],{"type":57,"value":1028},{"type":51,"tag":324,"props":1739,"children":1740},{"class":622,"line":1060},[1741,1746,1750,1755,1759],{"type":51,"tag":324,"props":1742,"children":1743},{"style":633},[1744],{"type":57,"value":1745},"  --narrator",{"type":51,"tag":324,"props":1747,"children":1748},{"style":1040},[1749],{"type":57,"value":1043},{"type":51,"tag":324,"props":1751,"children":1752},{"style":633},[1753],{"type":57,"value":1754},"Barnaby the bunny woke up in his cozy earthy burrow...",{"type":51,"tag":324,"props":1756,"children":1757},{"style":1040},[1758],{"type":57,"value":1053},{"type":51,"tag":324,"props":1760,"children":1761},{"style":1025},[1762],{"type":57,"value":1028},{"type":51,"tag":324,"props":1764,"children":1765},{"class":622,"line":1603},[1766,1771,1775,1779,1783],{"type":51,"tag":324,"props":1767,"children":1768},{"style":633},[1769],{"type":57,"value":1770},"  --voice",{"type":51,"tag":324,"props":1772,"children":1773},{"style":1040},[1774],{"type":57,"value":1043},{"type":51,"tag":324,"props":1776,"children":1777},{"style":633},[1778],{"type":57,"value":379},{"type":51,"tag":324,"props":1780,"children":1781},{"style":1040},[1782],{"type":57,"value":1053},{"type":51,"tag":324,"props":1784,"children":1785},{"style":1025},[1786],{"type":57,"value":1028},{"type":51,"tag":324,"props":1788,"children":1790},{"class":622,"line":1789},5,[1791,1796,1800,1805,1809],{"type":51,"tag":324,"props":1792,"children":1793},{"style":633},[1794],{"type":57,"value":1795},"  --music",{"type":51,"tag":324,"props":1797,"children":1798},{"style":1040},[1799],{"type":57,"value":1043},{"type":51,"tag":324,"props":1801,"children":1802},{"style":633},[1803],{"type":57,"value":1804},"Gentle acoustic guitar theme",{"type":51,"tag":324,"props":1806,"children":1807},{"style":1040},[1808],{"type":57,"value":1053},{"type":51,"tag":324,"props":1810,"children":1811},{"style":1025},[1812],{"type":57,"value":1028},{"type":51,"tag":324,"props":1814,"children":1816},{"class":622,"line":1815},6,[1817,1822,1826,1831,1835],{"type":51,"tag":324,"props":1818,"children":1819},{"style":633},[1820],{"type":57,"value":1821},"  --image",{"type":51,"tag":324,"props":1823,"children":1824},{"style":1040},[1825],{"type":57,"value":1043},{"type":51,"tag":324,"props":1827,"children":1828},{"style":633},[1829],{"type":57,"value":1830},"3D claymation, cartoon bunny with safety goggles...",{"type":51,"tag":324,"props":1832,"children":1833},{"style":1040},[1834],{"type":57,"value":1053},{"type":51,"tag":324,"props":1836,"children":1837},{"style":1025},[1838],{"type":57,"value":1028},{"type":51,"tag":324,"props":1840,"children":1842},{"class":622,"line":1841},7,[1843,1848,1852,1857,1861],{"type":51,"tag":324,"props":1844,"children":1845},{"style":633},[1846],{"type":57,"value":1847},"  --video",{"type":51,"tag":324,"props":1849,"children":1850},{"style":1040},[1851],{"type":57,"value":1043},{"type":51,"tag":324,"props":1853,"children":1854},{"style":633},[1855],{"type":57,"value":1856},"The bunny stretches lazily, ears twitching",{"type":51,"tag":324,"props":1858,"children":1859},{"style":1040},[1860],{"type":57,"value":1053},{"type":51,"tag":324,"props":1862,"children":1863},{"style":1025},[1864],{"type":57,"value":1028},{"type":51,"tag":324,"props":1866,"children":1868},{"class":622,"line":1867},8,[1869,1874],{"type":51,"tag":324,"props":1870,"children":1871},{"style":633},[1872],{"type":57,"value":1873},"  --out_dir",{"type":51,"tag":324,"props":1875,"children":1876},{"style":633},[1877],{"type":57,"value":1878}," \u002Fpath\u002Fto\u002Fproject_dir\n",{"type":51,"tag":60,"props":1880,"children":1881},{},[1882],{"type":51,"tag":190,"props":1883,"children":1884},{},[1885],{"type":57,"value":1886},"(This script automatically handles the voiceover-first ffprobe checks, dynamic video duration mapping, speed-clamping at 1.25x with auto-looping, vocal negative filtering, and explicit mathematical duration capping).",{"type":51,"tag":151,"props":1888,"children":1890},{"id":1889},"_2-assemble-and-stitch-the-final-storybook",[1891],{"type":57,"value":1892},"2. Assemble and Stitch the Final Storybook",{"type":51,"tag":60,"props":1894,"children":1895},{},[1896,1897,1903],{"type":57,"value":1688},{"type":51,"tag":96,"props":1898,"children":1900},{"className":1899},[],[1901],{"type":57,"value":1902},"assemble_story.py",{"type":57,"value":1904}," to normalize the generated clips and stitch them into the final storybook:",{"type":51,"tag":89,"props":1906,"children":1908},{"className":613,"code":1907,"language":615,"meta":98,"style":98},"python3 story-generator\u002Fscripts\u002Fassemble_story.py \\\n  --project_dir \u002Fpath\u002Fto\u002Fproject_dir \\\n  --output_name final_story.mp4\n",[1909],{"type":51,"tag":96,"props":1910,"children":1911},{"__ignoreMap":98},[1912,1928,1945],{"type":51,"tag":324,"props":1913,"children":1914},{"class":622,"line":623},[1915,1919,1924],{"type":51,"tag":324,"props":1916,"children":1917},{"style":627},[1918],{"type":57,"value":1711},{"type":51,"tag":324,"props":1920,"children":1921},{"style":633},[1922],{"type":57,"value":1923}," story-generator\u002Fscripts\u002Fassemble_story.py",{"type":51,"tag":324,"props":1925,"children":1926},{"style":1025},[1927],{"type":57,"value":1028},{"type":51,"tag":324,"props":1929,"children":1930},{"class":622,"line":1031},[1931,1936,1941],{"type":51,"tag":324,"props":1932,"children":1933},{"style":633},[1934],{"type":57,"value":1935},"  --project_dir",{"type":51,"tag":324,"props":1937,"children":1938},{"style":633},[1939],{"type":57,"value":1940}," \u002Fpath\u002Fto\u002Fproject_dir",{"type":51,"tag":324,"props":1942,"children":1943},{"style":1025},[1944],{"type":57,"value":1028},{"type":51,"tag":324,"props":1946,"children":1947},{"class":622,"line":1060},[1948,1953],{"type":51,"tag":324,"props":1949,"children":1950},{"style":633},[1951],{"type":57,"value":1952},"  --output_name",{"type":51,"tag":324,"props":1954,"children":1955},{"style":633},[1956],{"type":57,"value":1655},{"type":51,"tag":102,"props":1958,"children":1959},{},[],{"type":51,"tag":66,"props":1961,"children":1963},{"id":1962},"_4-the-editors-quality-control-room-stage",[1964],{"type":57,"value":1965},"4. The Editor's Quality Control Room Stage",{"type":51,"tag":60,"props":1967,"children":1968},{},[1969],{"type":57,"value":1970},"To ensure broadcast-quality narrative pacing and format adherence, the agent must run the QC stage immediately after stitching the master video.",{"type":51,"tag":89,"props":1972,"children":1974},{"className":613,"code":1973,"language":615,"meta":98,"style":98},"python3 story-generator\u002Fscripts\u002Feditors_quality_room.py --project_dir \u002Fpath\u002Fto\u002Fproject_dir\n",[1975],{"type":51,"tag":96,"props":1976,"children":1977},{"__ignoreMap":98},[1978],{"type":51,"tag":324,"props":1979,"children":1980},{"class":622,"line":623},[1981,1985,1990,1995],{"type":51,"tag":324,"props":1982,"children":1983},{"style":627},[1984],{"type":57,"value":1711},{"type":51,"tag":324,"props":1986,"children":1987},{"style":633},[1988],{"type":57,"value":1989}," story-generator\u002Fscripts\u002Feditors_quality_room.py",{"type":51,"tag":324,"props":1991,"children":1992},{"style":633},[1993],{"type":57,"value":1994}," --project_dir",{"type":51,"tag":324,"props":1996,"children":1997},{"style":633},[1998],{"type":57,"value":1878},{"type":51,"tag":132,"props":2000,"children":2002},{"id":2001},"_41-audits-conducted",[2003],{"type":57,"value":2004},"4.1 Audits Conducted",{"type":51,"tag":183,"props":2006,"children":2007},{},[2008,2018,2036,2053],{"type":51,"tag":162,"props":2009,"children":2010},{},[2011,2016],{"type":51,"tag":117,"props":2012,"children":2013},{},[2014],{"type":57,"value":2015},"Format Verification",{"type":57,"value":2017},": Confirms that all scene files and the final master video are standard H.264 video with AAC, 44100Hz stereo audio.",{"type":51,"tag":162,"props":2019,"children":2020},{},[2021,2026,2028,2034],{"type":51,"tag":117,"props":2022,"children":2023},{},[2024],{"type":57,"value":2025},"Narrator Speech Density Audit",{"type":57,"value":2027},": Computes the estimated speech-tempo ratio. If a scene requires a compression factor $> 1.50\\times$, it flags a ",{"type":51,"tag":96,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":57,"value":2033},"TEMPO",{"type":57,"value":2035}," warning.",{"type":51,"tag":162,"props":2037,"children":2038},{},[2039,2044,2046,2052],{"type":51,"tag":117,"props":2040,"children":2041},{},[2042],{"type":57,"value":2043},"A\u002FV Drift Detection",{"type":57,"value":2045},": Audits the compiled master video duration against the mathematical sum of the individual scene files. If the drift exceeds 0.5 seconds, it flags a ",{"type":51,"tag":96,"props":2047,"children":2049},{"className":2048},[],[2050],{"type":57,"value":2051},"DRIFT",{"type":57,"value":2035},{"type":51,"tag":162,"props":2054,"children":2055},{},[2056,2061,2063,2069,2071,2077],{"type":51,"tag":117,"props":2057,"children":2058},{},[2059],{"type":57,"value":2060},"Actionable Quality Report",{"type":57,"value":2062},": Outputs ",{"type":51,"tag":96,"props":2064,"children":2066},{"className":2065},[],[2067],{"type":57,"value":2068},"quality_report.json",{"type":57,"value":2070}," and a human-readable ",{"type":51,"tag":96,"props":2072,"children":2074},{"className":2073},[],[2075],{"type":57,"value":2076},"quality_report.md",{"type":57,"value":2078}," specifying actionable editorial feedback.",{"type":51,"tag":132,"props":2080,"children":2082},{"id":2081},"_42-self-correcting-feedback-loop",[2083],{"type":57,"value":2084},"4.2 Self-Correcting Feedback Loop",{"type":51,"tag":60,"props":2086,"children":2087},{},[2088,2090,2095],{"type":57,"value":2089},"If the QC Room outputs ",{"type":51,"tag":96,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":57,"value":2033},{"type":57,"value":2096}," warnings, the agent should intercept this, present the actionable editorial notes to the user, and offer to automatically shorten the narration script for those specific scenes (aiming for under 12–14 words per 6-second segment) to maintain a natural, calm cadence.",{"type":51,"tag":102,"props":2098,"children":2099},{},[],{"type":51,"tag":66,"props":2101,"children":2103},{"id":2102},"_5-visual-pipeline-flowcharts",[2104],{"type":57,"value":2105},"5. Visual Pipeline Flowcharts",{"type":51,"tag":60,"props":2107,"children":2108},{},[2109],{"type":57,"value":2110},"Every compiled project report includes a high-fidelity rendering of the Double-Engine media pipeline, visualized via Graphviz DOT.",{"type":51,"tag":89,"props":2112,"children":2114},{"className":613,"code":2113,"language":615,"meta":98,"style":98},"python3 story-generator\u002Fscripts\u002Fgenerate_pipeline_diagram.py --project_dir \u002Fpath\u002Fto\u002Fproject_dir\n",[2115],{"type":51,"tag":96,"props":2116,"children":2117},{"__ignoreMap":98},[2118],{"type":51,"tag":324,"props":2119,"children":2120},{"class":622,"line":623},[2121,2125,2130,2134],{"type":51,"tag":324,"props":2122,"children":2123},{"style":627},[2124],{"type":57,"value":1711},{"type":51,"tag":324,"props":2126,"children":2127},{"style":633},[2128],{"type":57,"value":2129}," story-generator\u002Fscripts\u002Fgenerate_pipeline_diagram.py",{"type":51,"tag":324,"props":2131,"children":2132},{"style":633},[2133],{"type":57,"value":1994},{"type":51,"tag":324,"props":2135,"children":2136},{"style":633},[2137],{"type":57,"value":1878},{"type":51,"tag":60,"props":2139,"children":2140},{},[2141,2143,2149,2151,2157],{"type":57,"value":2142},"This command parses the workflow blocks and compiles ",{"type":51,"tag":96,"props":2144,"children":2146},{"className":2145},[],[2147],{"type":57,"value":2148},"\u002Fpath\u002Fto\u002Fproject_dir\u002Freport\u002Fpipeline_diagram.dot",{"type":57,"value":2150}," to an optimized ",{"type":51,"tag":96,"props":2152,"children":2154},{"className":2153},[],[2155],{"type":57,"value":2156},"\u002Fpath\u002Fto\u002Fproject_dir\u002Freport\u002Fpipeline_diagram.webp",{"type":57,"value":2158}," file, which is then embedded directly as a premium architecture dashboard card inside the compiled Material 3 HTML reports.",{"type":51,"tag":2160,"props":2161,"children":2162},"style",{},[2163],{"type":57,"value":2164},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2166,"total":2344},[2167,2185,2201,2223,2237,2248,2260,2277,2290,2303,2317,2327],{"slug":2168,"name":2168,"fn":2169,"description":2170,"org":2171,"tags":2172,"stars":2182,"repoUrl":2183,"updatedAt":2184},"kb-search","search and extract local knowledge base documents","Allows listing, searching and extracting information from local knowledge base documents for information about tables\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2173,2176,2179],{"name":2174,"slug":2175,"type":16},"Documentation","documentation",{"name":2177,"slug":2178,"type":16},"Knowledge Base","knowledge-base",{"name":2180,"slug":2181,"type":16},"Search","search",6749,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fknowledge-catalog","2026-07-12T07:38:52.157375",{"slug":2186,"name":2187,"fn":2188,"description":2189,"org":2190,"tags":2191,"stars":2182,"repoUrl":2183,"updatedAt":2200},"knowledgecatalogdiscoveryagent","knowledge_catalog_discovery_agent","search and rank Knowledge Catalog data entries","Analyzes user queries, extracts relevant predicates, and utilizes Knowledge Catalog Search to find and rank the most relevant data entries. Engages with the user throughout the process.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2192,2195,2196,2199],{"name":2193,"slug":2194,"type":16},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":16},{"name":2197,"slug":2198,"type":16},"Knowledge Management","knowledge-management",{"name":2180,"slug":2181,"type":16},"2026-07-12T07:38:22.196851",{"slug":2202,"name":2202,"fn":2203,"description":2204,"org":2205,"tags":2206,"stars":2220,"repoUrl":2221,"updatedAt":2222},"contributing","contribute to Cloud Foundation Fabric","End-to-end workflow for contributing to Cloud Foundation Fabric: triaging GitHub issues, proactive feature development, validating with tests and Policy Troubleshooter, and submitting sanitized Pull Requests. Use when addressing a Fabric GitHub issue, developing a module or FAST stage change, or preparing a branch for a pull request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2207,2210,2213,2216,2217],{"name":2208,"slug":2209,"type":16},"Automation","automation",{"name":2211,"slug":2212,"type":16},"Engineering","engineering",{"name":2214,"slug":2215,"type":16},"GitHub","github",{"name":9,"slug":8,"type":16},{"name":2218,"slug":2219,"type":16},"Pull Requests","pull-requests",2062,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fcloud-foundation-fabric","2026-07-31T06:23:36.935005",{"slug":2224,"name":2224,"fn":2225,"description":2226,"org":2227,"tags":2228,"stars":2220,"repoUrl":2221,"updatedAt":2236},"fabric-builder","generate Terraform code for Google Cloud","Generates idiomatic Cloud Foundation Fabric (CFF) Terraform code using CFF modules. Use when users ask to create GCP resources, use Fabric modules, or generate Terraform code for Google Cloud.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2229,2230,2233],{"name":9,"slug":8,"type":16},{"name":2231,"slug":2232,"type":16},"Infrastructure as Code","infrastructure-as-code",{"name":2234,"slug":2235,"type":16},"Terraform","terraform","2026-07-12T07:38:23.514555",{"slug":2238,"name":2238,"fn":2239,"description":2240,"org":2241,"tags":2242,"stars":2220,"repoUrl":2221,"updatedAt":2247},"fast-0-org-setup-prereqs","prepare prerequisites for FAST 0-org-setup","Guides the user step-by-step through the prerequisites for the FAST 0-org-setup stage, supporting both Standard GCP and Google Cloud Dedicated (GCD) environments. Use when a user asks to prepare or run prerequisites for 0-org-setup or bootstrap the FAST landing zone.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2243,2244],{"name":9,"slug":8,"type":16},{"name":2245,"slug":2246,"type":16},"Operations","operations","2026-07-12T07:38:28.127148",{"slug":2249,"name":2249,"fn":2250,"description":2251,"org":2252,"tags":2253,"stars":24,"repoUrl":25,"updatedAt":2259},"agent-aware-cli","design agent-aware command-line interfaces","Guide for designing and implementing command-line interfaces (CLIs) that are equally usable by human developers and automated coding agents. Use when the user wants to build a CLI, apply CLI best practices, or use Go with Cobra and Viper.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2254,2257,2258],{"name":2255,"slug":2256,"type":16},"CLI","cli",{"name":2211,"slug":2212,"type":16},{"name":9,"slug":8,"type":16},"2026-07-12T07:39:08.41406",{"slug":2261,"name":2261,"fn":2262,"description":2263,"org":2264,"tags":2265,"stars":24,"repoUrl":25,"updatedAt":2276},"build-mcp-genmedia","build and configure GenAI MCP servers","Builds the mcp-genmedia Go MCP servers (nanobanana, veo, lyria, gemini-multimodal, chirp3-hd, avtool) from source and wires them into settings.json. Use this skill whenever the MCP tools are missing or broken — typically at the start of a new session, after a container restart, or when \u002Ftmp has been wiped. The prebuilt binaries in \u002Fworkspace\u002F.local\u002Fbin\u002F have no exec bit and live on a noexec mount; this skill compiles fresh executables into \u002Ftmp\u002Fbin\u002F where execution is allowed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2266,2269,2270,2273],{"name":2267,"slug":2268,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":2271,"slug":2272,"type":16},"LLM","llm",{"name":2274,"slug":2275,"type":16},"MCP","mcp","2026-07-12T07:39:10.911302",{"slug":2278,"name":2278,"fn":2279,"description":2280,"org":2281,"tags":2282,"stars":24,"repoUrl":25,"updatedAt":2289},"genmedia-audio-engineer","synthesize and mix audio content","Expert in audio synthesis, music generation, and mixing. Use when creating podcasts, background scores, or multi-track audio layering using mcp-chirp3-go, mcp-lyria-go, mcp-gemini-go, mcp-nanobanana-go, and mcp-avtool-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2283,2286,2287,2288],{"name":2284,"slug":2285,"type":16},"Audio","audio",{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},"2026-07-12T07:39:16.623879",{"slug":2291,"name":2291,"fn":2292,"description":2293,"org":2294,"tags":2295,"stars":24,"repoUrl":25,"updatedAt":2302},"genmedia-image-artist","generate and edit AI images","Expert in AI image generation and editing. Use when the user needs high-quality textures, character-consistent visuals, or image-to-image editing using mcp-nanobanana-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2296,2297,2298,2301],{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":2299,"slug":2300,"type":16},"Image Generation","image-generation",{"name":21,"slug":22,"type":16},"2026-07-12T07:39:15.372822",{"slug":2304,"name":2304,"fn":2305,"description":2306,"org":2307,"tags":2308,"stars":24,"repoUrl":25,"updatedAt":2316},"genmedia-producer","produce multi-step media content","Expert media production assistant. Use when requested to help with storyboarding, podcast creation, audio assembly, or complex multi-step media workflows using the GenMedia MCP servers (Veo, Lyria, Gemini TTS, NanoBanana).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2309,2310,2311,2312,2313],{"name":2284,"slug":2285,"type":16},{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},{"name":2314,"slug":2315,"type":16},"Video","video","2026-07-12T07:39:09.672849",{"slug":2318,"name":2318,"fn":2319,"description":2320,"org":2321,"tags":2322,"stars":24,"repoUrl":25,"updatedAt":2326},"genmedia-video-editor","edit and compose video content","Expert in video composition, editing, and format conversion. Use when the user wants to generate high-quality video, overlay images on video, concatenate clips, create GIFs, or sync audio to video using mcp-avtool-go and mcp-veo-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2323,2324,2325],{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":2314,"slug":2315,"type":16},"2026-07-12T07:39:13.749081",{"slug":2328,"name":2328,"fn":2329,"description":2330,"org":2331,"tags":2332,"stars":24,"repoUrl":25,"updatedAt":2343},"genmedia-voice-director","generate expressive text-to-speech with Gemini","Expert in casting, directing, and generating expressive text-to-speech using Gemini TTS. Use this when the user needs virtual voice actor personas, expressive speech generation, or multiple variations of a voiceover (like \"take 3 on the bounce\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2333,2334,2335,2337,2340],{"name":2284,"slug":2285,"type":16},{"name":18,"slug":19,"type":16},{"name":2336,"slug":31,"type":16},"Gemini",{"name":2338,"slug":2339,"type":16},"Speech","speech",{"name":2341,"slug":2342,"type":16},"Text-to-Speech","text-to-speech","2026-07-12T07:39:17.86673",80,{"items":2346,"total":2396},[2347,2353,2360,2367,2374,2382,2388],{"slug":2249,"name":2249,"fn":2250,"description":2251,"org":2348,"tags":2349,"stars":24,"repoUrl":25,"updatedAt":2259},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2350,2351,2352],{"name":2255,"slug":2256,"type":16},{"name":2211,"slug":2212,"type":16},{"name":9,"slug":8,"type":16},{"slug":2261,"name":2261,"fn":2262,"description":2263,"org":2354,"tags":2355,"stars":24,"repoUrl":25,"updatedAt":2276},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2356,2357,2358,2359],{"name":2267,"slug":2268,"type":16},{"name":9,"slug":8,"type":16},{"name":2271,"slug":2272,"type":16},{"name":2274,"slug":2275,"type":16},{"slug":2278,"name":2278,"fn":2279,"description":2280,"org":2361,"tags":2362,"stars":24,"repoUrl":25,"updatedAt":2289},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2363,2364,2365,2366],{"name":2284,"slug":2285,"type":16},{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"slug":2291,"name":2291,"fn":2292,"description":2293,"org":2368,"tags":2369,"stars":24,"repoUrl":25,"updatedAt":2302},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2370,2371,2372,2373],{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":2299,"slug":2300,"type":16},{"name":21,"slug":22,"type":16},{"slug":2304,"name":2304,"fn":2305,"description":2306,"org":2375,"tags":2376,"stars":24,"repoUrl":25,"updatedAt":2316},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2377,2378,2379,2380,2381],{"name":2284,"slug":2285,"type":16},{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},{"name":2314,"slug":2315,"type":16},{"slug":2318,"name":2318,"fn":2319,"description":2320,"org":2383,"tags":2384,"stars":24,"repoUrl":25,"updatedAt":2326},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2385,2386,2387],{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":2314,"slug":2315,"type":16},{"slug":2328,"name":2328,"fn":2329,"description":2330,"org":2389,"tags":2390,"stars":24,"repoUrl":25,"updatedAt":2343},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2391,2392,2393,2394,2395],{"name":2284,"slug":2285,"type":16},{"name":18,"slug":19,"type":16},{"name":2336,"slug":31,"type":16},{"name":2338,"slug":2339,"type":16},{"name":2341,"slug":2342,"type":16},9]