Creative Media Production¶
Produce a complete podcast episode from research notes — script, synthesised narration, background music, mixed audio, cover art, animated visualisations, and technical diagrams for show notes.
Illustrative end-to-end example
A worked illustration of a multi-modal media pipeline — every component and operation named below is real, but it is not a copy-paste script. agent_claude (script) and adapt_image (cover art) call paid/external model APIs (set ALLOW_PAID_API=1 plus a provider/image key); the audio, generative-art, and diagram steps run offline against built-in backends.
GoalInput¶
{
"goal": "Produce a podcast episode from research notes: script, voice, music, cover art, and show notes",
"context": "Input is a set of raw research notes on a technical topic. The pipeline must produce a podcast MP3, cover art image, animated visualisation for a video version, and technical diagrams for accompanying show notes. Short sound-design assets can be generated programmatically; longer production music should use supplied or licensed assets processed by the audio pipeline.",
"constraints": [
"Script must be structured with intro, segments, and outro",
"Narration audio must be normalised to -16 LUFS for podcast distribution",
"Final MP3 must mix narration and background music with music ducked under speech",
"Cover art must be 3000x3000 px for Apple Podcasts compliance",
"Core assets should be reproducible from structured inputs, with human review before publishing"
],
"resource_bounds": {
"max_execution_seconds": 600,
"max_tokens_per_hour": 150000
},
"subtasks": [
{
"goal": "Generate a structured podcast script from research notes",
"context": "Use agent_claude to transform raw research notes into a podcast script with intro hook, three content segments, transitions, and outro with call to action.",
"constraints": ["Include speaker directions and timing cues", "Target 15 minutes of spoken content"]
},
{
"goal": "Synthesise narration audio from the podcast script",
"context": "Use adapt_voice to convert the script into spoken audio. Apply appropriate pacing, emphasis markers, and natural pauses between segments.",
"constraints": ["Output format: WAV 48kHz 16-bit mono", "Insert 1-second pauses between segments"]
},
{
"goal": "Produce background music and sound design",
"context": "Use adapt_synth for short generated tones, stingers, and transition sounds when programmatic synthesis is sufficient. Use adapt_audio or an external asset source for longer background beds and production audio processing.",
"constraints": ["Intro stinger: 5 seconds", "Background bed: loop-compatible", "Genre: ambient electronic"]
},
{
"goal": "Mix audio tracks, normalise levels, and export final MP3",
"context": "Use adapt_ffmpeg to combine narration and background music. Duck music volume under speech, normalise to -16 LUFS, and export as MP3 192kbps with embedded ID3 metadata.",
"constraints": ["Music ducked to -20dB under speech", "Output: MP3 192kbps", "Embed title and artist metadata"]
},
{
"goal": "Generate podcast cover art",
"context": "Use adapt_image to create a 3000x3000 cover image. Include the episode title, show name, and a visual element representing the topic.",
"constraints": ["3000x3000 px PNG", "Apple Podcasts compliant", "Legible at 55x55 px thumbnail size"]
},
{
"goal": "Create animated visualisations for video version",
"context": "Use adapt_generative_art to produce animated data visualisations and motion graphics that accompany the audio for a video podcast release.",
"constraints": ["Output: MP4 1080p 30fps", "Sync key frames to segment transitions", "Duration matches audio"]
},
{
"goal": "Produce technical diagrams for show notes",
"context": "Use adapt_diagrams to generate architecture diagrams, flowcharts, and concept maps that illustrate the technical content discussed in the episode.",
"constraints": ["Output: SVG for web embedding", "Minimum 3 diagrams", "Consistent visual style"]
}
]
}
Pipeline Diagram¶
graph TD
A[agent_claude<br/>script generation] -->|script text| B[adapt_voice<br/>narration synthesis]
A -->|script text| C[adapt_synth<br/>short sound design]
A -->|music brief| L[adapt_audio<br/>background bed prep]
B -->|narration WAV| D[adapt_ffmpeg<br/>mix + normalise + export]
C -->|stingers + transition assets| D
L -->|background bed| D
D --> E((Final MP3))
A -->|episode title + topic| F[adapt_image<br/>cover art]
A -->|segment structure| G[adapt_generative_art<br/>animated visualisations]
A -->|technical content| H[adapt_diagrams<br/>show notes diagrams]
F --> I((Cover Art PNG))
G --> J((Video MP4))
H --> K((Diagrams SVG)) What You Need¶
- Tier: Researcher
- Components:
agent_claude,adapt_voice,adapt_synth,adapt_audio,adapt_ffmpeg,adapt_image,adapt_generative_art,adapt_diagrams
Step-by-Step¶
Step 1: Generate the Podcast Script¶
{
"component": "agent_claude",
"operation": "infer",
"params": {
"messages": [
{
"role": "user",
"content": "Transform the following research notes into a 15-minute podcast script with an intro hook, three content segments with transitions, and an outro with call to action. Include speaker directions and timing cues.\n\n[Research notes inserted here]"
}
],
"max_tokens": 8192
}
}
Returns a structured script with timing markers ([00:00], [05:00], etc.), speaker directions in brackets, and natural transition phrases between segments.
Step 2: Synthesise Narration¶
{
"component": "adapt_voice",
"operation": "tts_speak",
"params": {
"text": "... generated podcast script ...",
"format": "wav",
"sample_rate": 48000,
"bit_depth": 16,
"channels": 1,
"pause_between_segments_ms": 1000
}
}
The voice synthesis engine converts the script to spoken audio, respecting emphasis markers and inserting natural pauses at segment boundaries.
Step 3: Produce Sound Design and Background Music¶
{
"component": "adapt_synth",
"operation": "drum_pattern",
"params": {
"pattern": "kick",
"bpm": 96,
"sample_rate": 48000,
"volume": 0.4
}
}
Produces short generated sound-design assets, such as an intro pulse, transition hit, or simple rhythmic loop. (drum_pattern's pattern is a single drum voice — one of kick, snare, hh/hihat, clap, tom — not a step-sequencer string; layer several calls to build a groove.) For a full 15-minute background bed, use adapt_audio to process a supplied licensed asset or loop short generated material into an arrangement before the FFmpeg mix step.
Music Ducking
Keep adapt_synth focused on short assets. Volume ducking happens in the next step during the mix - adapt_ffmpeg analyses speech segments and attenuates the music underneath narration.
Step 4: Mix and Export Final Audio¶
{
"component": "adapt_ffmpeg",
"operation": "add_audio",
"params": {
"inputs": [
{"track": "narration.wav", "role": "primary"},
{"track": "stinger.wav", "role": "intro", "offset_sec": 0},
{"track": "background_bed.wav", "role": "background", "duck_db": -20},
{"track": "transition_loop.wav", "role": "transition", "offset_sec": 300}
],
"normalise_lufs": -16,
"output_format": "mp3",
"bitrate": "192k",
"metadata": {
"title": "Episode Title — Topic Deep Dive",
"artist": "G6 Podcast",
"album": "G6 Research Series",
"genre": "Podcast"
}
}
}
The ffmpeg pipeline layers the tracks, normalises the final mix to -16 LUFS (podcast standard), and encodes to MP3 with embedded ID3 tags. (adapt_ffmpeg exposes convert, trim, concat, merge_av, add_audio, and normalize_audio — there is no single mix op: layer tracks with add_audio and hit the -16 LUFS target with normalize_audio. Multi-track sidechain ducking needs an explicit ffmpeg filtergraph.)
LUFS Normalisation
Podcast platforms (Apple, Spotify) require loudness normalisation. The -16 LUFS target ensures consistent volume across episodes and prevents the platform from applying its own normalisation, which can degrade quality.
Step 5: Generate Cover Art¶
{
"component": "adapt_image",
"operation": "generate",
"params": {
"prompt": "Podcast cover art for a technical deep dive episode. Clean modern design with the title 'Topic Deep Dive' prominently displayed. Bold, legible typography that reads clearly at thumbnail size.",
"width": 3000,
"height": 3000,
"format": "png"
}
}
Generates a square cover image meeting Apple Podcasts requirements (3000x3000 px, RGB colour space). The design prioritises legibility at 55x55 px thumbnail size.
Step 6: Create Animated Visualisations¶
{
"component": "adapt_generative_art",
"operation": "generate_manim",
"params": {
"scenes": [
{"type": "data_visualisation", "data": "... key metrics from research ...", "start_sec": 0, "end_sec": 300},
{"type": "motion_graphic", "content": "segment_2_key_points", "start_sec": 300, "end_sec": 600},
{"type": "data_visualisation", "data": "... comparative analysis ...", "start_sec": 600, "end_sec": 900}
],
"resolution": "1920x1080",
"fps": 30,
"output_format": "mp4"
}
}
Produces a video track with animated charts, motion graphics, and visual transitions synchronised to the audio segment boundaries. This becomes the video podcast version when composited with the final audio.
Step 7: Produce Technical Diagrams¶
{
"component": "adapt_diagrams",
"operation": "mermaid_flowchart",
"params": {
"diagrams": [
{"type": "architecture", "title": "System Overview", "entities": ["..."]},
{"type": "flowchart", "title": "Process Flow", "steps": ["..."]},
{"type": "concept_map", "title": "Key Relationships", "nodes": ["..."]}
],
"output_format": "svg",
"style": "consistent_palette"
}
}
Generates publication-quality SVG diagrams for embedding in show notes. All diagrams share a consistent colour palette and typography for visual coherence.
Reusable Assets
Every asset produced in this pipeline — audio, images, diagrams — is a standalone file. Re-run individual steps to iterate on a single asset without regenerating the entire episode.
What Happened¶
G6 orchestrated seven components across four media modalities:
- agent_claude transformed raw research notes into a structured podcast script with timing cues
- adapt_voice synthesised natural narration audio from the script
- adapt_synth generated short programmatic stingers or rhythmic transition assets
- adapt_audio prepared the background music bed and any longer audio assets
- adapt_ffmpeg mixed all audio tracks with speech-aware ducking, normalised to -16 LUFS, and exported a broadcast-ready MP3 with metadata
- adapt_image produced Apple Podcasts-compliant cover art at 3000x3000 px
- adapt_generative_art created synchronised animated visualisations for the video release
- adapt_diagrams generated SVG architecture diagrams and flowcharts for show notes
The script generation fans out to parallel production tracks. Only the audio mix (Step 4) requires sequential input from the narration, short sound-design assets, and background bed. All other assets can be produced concurrently.
Why G6 Over a Bare LLM¶
A capable LLM can write scripts, generate image prompts, and plan media workflows. G6 adds specialised tools — short-form audio synthesis, audio processing, loudness-normalised mixing, image rendering, and vector diagram production — orchestrated as one pipeline. Prebuilt templates take research notes as input and produce a complete multi-format media package with minimal manual editing, triggered by one GoalInput JSON.