Usage Guide
This guide covers the day-to-day workflows for using Renku: specifying inputs, discovering blueprints and models, testing with dry runs, generating content, and iterating on your creations.
Setup (CLI Alternative to UI Onboarding)
Section titled “Setup (CLI Alternative to UI Onboarding)”If you use the UI onboarding flow via renku launch, these setup steps are already handled. This section is for users who prefer configuring the CLI workspace manually.
Create a Workspace
Section titled “Create a Workspace”Initialize a new Renku workspace:
renku init --root=/path/to/your/workspaceFor example:
renku init --root=~/my-creationsThis creates:
~/.config/renku/cli-config.json- Configuration file{workspace}/.gitignore- Ignores**/builds/and**/artifacts/{workspace}/catalog/containing:models/- Supported model configurationsproducers/- Supported producer definitionsblueprints/- Example blueprints to get started
Configure API Keys
Section titled “Configure API Keys”Renku uses multiple AI providers. Depending on the blueprint and model selections, you may need keys for:
| Provider | What it does | Key name |
|---|---|---|
| fal.ai | Audio, Image, Video generation | FAL_KEY |
| Replicate | Audio, Image, Video generation | REPLICATE_API_TOKEN |
| ElevenLabs | AI voice and audio generation | ELEVENLABS_API_KEY |
| OpenAI | LLM models for story board and prompt generation | OPENAI_API_KEY |
| Vercel AI Gateway | Unified gateway to Claude, Gemini, and open-source models | AI_GATEWAY_API_KEY |
For CLI and viewer workflows, Renku reads keys from ~/.config/renku/.env.
Create or edit this file and add your keys:
REPLICATE_API_TOKEN=your-replicate-api-token-hereFAL_KEY=your-fal-api-key-hereOPENAI_API_KEY=your-openai-api-key-hereYou can also provide keys through exported shell variables or a project-local .env in your current working directory.
Specifying Inputs
Section titled “Specifying Inputs”Every blueprint requires an inputs file that provides the configuration for your video generation.
Input File Format
Section titled “Input File Format”Inputs are specified in YAML with two main sections:
inputs: InquiryPrompt: 'Your topic or prompt here' Duration: 60 NumOfSegments: 3 # ... other blueprint-specific inputs
models: # Optional: override default model selections - model: minimax/speech-2.6-hd provider: replicate producerId: AudioProducerInput Types
Section titled “Input Types”| Type | YAML Syntax | Example |
|---|---|---|
string | Quoted or unquoted text | "Hello world" or Hello world |
int | Number without quotes | 42 |
array | YAML list | ["item1", "item2"] |
Using Input Templates
Section titled “Using Input Templates”Every blueprint includes an input-template.yaml with all available inputs and their defaults:
# Copy the templatecp {blueprint-dir}/input-template.yaml ./my-inputs.yaml
# Edit with your valuesnano ./my-inputs.yamlModel Selection
Section titled “Model Selection”Select which AI model to use for each producer:
models: # Use a specific video model - model: google/veo-3.1-fast provider: replicate producerId: VideoProducer
# Use a specific voice model with custom config - model: minimax/speech-2.6-hd provider: replicate producerId: AudioProducer
# LLM producer with structured output - model: gpt-5-mini provider: openai producerId: ScriptProducerThe config field allows you to pass provider-specific configuration options.
Note: Input-to-provider field mappings (transforms) are defined in the producer YAML files, not in the input template. This keeps the input file simple - you only need to specify what model to use, not how inputs map to provider fields.
Discovering Content
Section titled “Discovering Content”Browsing Blueprints
Section titled “Browsing Blueprints”Browse available blueprints in your workspace catalog:
ls ./catalog/blueprints/Each blueprint directory contains:
- The blueprint YAML file with the workflow definition
- An
input-template.yamldocumenting required inputs and their types
Browsing Models
Section titled “Browsing Models”See available models for a blueprint’s producers:
renku producers:list --blueprint=video-only.yamlOutput:
Producer model configurations:
VideoProducer (4 video models) Provider Model Price replicate bytedance/seedance-1-pro-fast 480p: $0.015/s replicate google/veo-3.1-fast $0.10/s fal-ai veo3-1 -
AudioProducer (2 audio models) Provider Model Price replicate minimax/speech-2.6-hd $0.0001/token replicate elevenlabs/v3 $0.0001/token
⚠️ Missing API tokens: - fal-ai: FAL_KEY not setTesting with Dry Run
Section titled “Testing with Dry Run”Before spending API credits, validate your configuration with a dry run:
renku generate \ --inputs=./my-inputs.yaml \ --blueprint=./my-blueprint.yaml \ --dry-runWhat Dry Run Does
Section titled “What Dry Run Does”- Validates blueprint YAML structure
- Checks all required inputs are provided
- Verifies producer paths exist
- Creates the execution plan
- Generates placeholder artifacts
What Dry Run Doesn’t Do
Section titled “What Dry Run Doesn’t Do”- Call any AI provider APIs
- Consume API credits
- Generate real content
Inspecting the Plan
Section titled “Inspecting the Plan”After a dry run, examine the execution plan:
cat {workspace}/builds/movie-{id}/runs/rev-0001-plan.jsonThe plan shows:
- Execution layers (parallel groups)
- Jobs in each layer
- Input/output connections
- Canonical IDs for all nodes
Running Generation
Section titled “Running Generation”Full Generation
Section titled “Full Generation”Run the complete workflow:
renku generate \ --inputs=./my-inputs.yaml \ --blueprint=./my-blueprint.yamlRenku will:
- Create a new movie directory
- Execute producers layer by layer
- Store artifacts in the blob store
- Create symlinks in
artifacts/ - Log all events for future reference
Continue an Existing Movie
Section titled “Continue an Existing Movie”Resume or regenerate an existing movie:
# By movie IDrenku generate --movie-id=movie-a1b2c3d4 --inputs=./inputs.yaml
# The most recent movierenku generate --last --inputs=./inputs.yamlNote: The --inputs flag is always required, even when continuing an existing movie. This ensures model selections are available for any jobs that need to run.
Non-Interactive Mode
Section titled “Non-Interactive Mode”Skip confirmation prompts for automation:
renku generate \ --inputs=./my-inputs.yaml \ --blueprint=./my-blueprint.yaml \ --non-interactiveFinding Your Outputs
Section titled “Finding Your Outputs”Generated content is in two locations within your current working directory:
Build directory (builds/movie-{id}/):
blobs/- Raw generated filesmanifests/- Artifact metadataevents/- Execution logs
Artifacts view (artifacts/movie-{id}/):
- Human-readable filenames
- Symlinks to blob storage
- Easy to browse and share
Use renku list to see all builds in the current project.
Editing Workflow
Section titled “Editing Workflow”Renku’s incremental build system makes iteration efficient.
Changing Inputs
Section titled “Changing Inputs”- Edit your inputs file
- Re-run generation on the same movie:
renku generate --movie-id=movie-a1b2c3d4 --inputs=./my-inputs.yamlRenku detects which inputs changed and only regenerates affected artifacts.
Editing Generated Prompts
Section titled “Editing Generated Prompts”You can manually edit generated text artifacts:
- Find the artifact in
artifacts/movie-{id}/ - Edit the file directly (it’s a symlink to the blob)
- Re-run generation:
renku generate --movie-id=movie-a1b2c3d4 --inputs=./inputs.yamlRenku will:
- Detect your manual edits
- Keep your changes
- Only regenerate downstream artifacts that depend on the edited file
Replacing Artifacts
Section titled “Replacing Artifacts”If an AI-generated image or video isn’t satisfactory:
- Replace the file in
artifacts/movie-{id}/ - Re-run generation
Your replacement will be used for downstream processing (like timeline composition).
Layer-by-Layer Generation
Section titled “Layer-by-Layer Generation”For cost control and quality review, generate content in stages.
What Are Layers?
Section titled “What Are Layers?”Renku groups independent jobs into execution layers:
- Layer 0: Script generation (depends only on inputs)
- Layer 1: Prompt generation, audio synthesis (depends on script)
- Layer 2: Video/image generation (depends on prompts)
- Layer 3: Timeline composition (depends on all media)
Generate Up to a Specific Layer
Section titled “Generate Up to a Specific Layer”renku generate \ --inputs=./my-inputs.yaml \ --blueprint=./my-blueprint.yaml \ --up-to-layer=1This stops after layer 1, so you can:
- Review the generated script
- Check audio quality
- Make edits before generating expensive video content
Continue to Next Layers
Section titled “Continue to Next Layers”After reviewing, continue generation:
renku generate --movie-id=movie-a1b2c3d4 --inputs=./inputs.yaml --up-to-layer=2Re-Run From a Specific Layer
Section titled “Re-Run From a Specific Layer”If you need to regenerate content from a specific layer onwards (e.g., after changing model settings or fixing an issue), use --re-run-from:
# Re-run from layer 2 (skips layers 0-1, uses existing artifacts)renku generate --last --inputs=./inputs.yaml --from=2This is useful when:
- You want to try a different video model without regenerating scripts
- A later layer failed and you want to retry from that point
- You’ve manually edited artifacts at a specific layer
The --from flag:
- Takes a 0-indexed layer number
- Skips all layers before the specified layer (uses existing artifacts)
- Forces all jobs at the specified layer and above to re-run
- Requires
--inputsto be specified (for model selections)
You can combine --from with --up-to-layer to re-run a specific range:
# Re-run only layers 2 and 3renku generate --last --inputs=./inputs.yaml --from=2 --up-to-layer=3Surgical Artifact Regeneration
Section titled “Surgical Artifact Regeneration”When you need to regenerate just one or a few specific artifacts without affecting siblings, use --artifact-id or the shorter --aid alias.
--artifact-id / --aid requires canonical artifact IDs (Artifact:...).
# Regenerate only segment 2's audio (not segments 0, 1, 3, 4)renku generate --last --artifact-id="Artifact:AudioProducer.GeneratedAudio[2]" --inputs=./inputs.yaml
# Regenerate multiple specific segments using --aid aliasrenku generate --last --aid="Artifact:AudioProducer.GeneratedAudio[0]" --aid="Artifact:AudioProducer.GeneratedAudio[2]" --inputs=./inputs.yamlThis is different from --from which regenerates all jobs at a layer. With --artifact-id / --aid:
- Only the specified artifact(s) and their downstream dependencies are regenerated
- Sibling artifacts in the same layer are untouched
- Can be specified multiple times to target multiple artifacts
- IDs must be canonical (
Artifact:...) or the command fails fast - You can combine with
--up-to-layerto limit how far downstream propagation goes
When to use each:
| Scenario | Use |
|---|---|
| One segment sounds wrong, others are fine | --artifact-id or --aid |
| Multiple specific segments need work | --aid=Artifact:X --aid=Artifact:Y |
| Changed model settings, need to redo a layer | --from |
| Generated up to layer 1, now want to fix one image | --artifact-id + --up-to-layer |
| Need to retry all video generation | --from=N where N is the video layer |
Pinning Existing Outputs
Section titled “Pinning Existing Outputs”Use --pin to keep specific existing outputs and skip regenerating jobs whose outputs are fully pinned.
Pin IDs are canonical IDs and can be either:
Artifact:...to pin one concrete outputProducer:...to pin all reusable outputs from that producer
# Pin one artifactrenku generate --last --inputs=./inputs.yaml --pin="Artifact:ScriptProducer.NarrationScript[0]"
# Pin all reusable outputs from a producerrenku generate --last --inputs=./inputs.yaml --pin="Producer:ScriptProducer" --from=1
# Mix artifact and producer pins (repeat --pin)renku generate --movie-id=movie-a1b2c3d4 --inputs=./inputs.yaml \ --pin="Artifact:AudioProducer.GeneratedAudio[0]" \ --pin="Producer:ImageProducer"Pinning rules:
- Pinning is for existing movies (
--lastor--movie-id), not brand new runs - Pin IDs must be canonical (
Artifact:...orProducer:...) - You cannot pin an artifact and target that same artifact with
--artifact-id/--aidin the same command - Pinned outputs must already exist as reusable successful outputs
Finding artifact IDs:
# List all artifact IDs in a moviecat builds/movie-{id}/manifests/rev-XXXX.json | jq '.artefacts | keys'The keys in .artefacts are canonical artifact IDs. Use those values directly with --artifact-id, --aid, and --pin.
Note: Quote the artifact ID when using zsh to prevent bracket expansion:
renku generate --last --aid="Artifact:AudioProducer.GeneratedAudio[2]" --inputs=./inputs.yamlCost-Saving Strategies
Section titled “Cost-Saving Strategies”- Review scripts first - Script generation is cheap; video generation is expensive
- Use layer limits - Generate expensive content only when you’re happy with cheaper precursors
- Iterate on prompts - Edit video prompts before generating videos
- Leverage caching - Re-running generation only rebuilds changed artifacts
- Use
--fromfor retries - If a later layer fails, use--from=Nto retry from that layer without regenerating earlier content - Use
--aidfor surgical fixes - If specific segments need work, regenerate just those artifacts instead of the whole layer (e.g.,--aid=Artifact:AudioProducer.GeneratedAudio[0] --aid=Artifact:AudioProducer.GeneratedAudio[2]) - Use
--pinto preserve good outputs - Keep known-good artifacts/producers and only regenerate what still needs work
Viewing Content
Section titled “Viewing Content”Open in Viewer
Section titled “Open in Viewer”Open the blueprint viewer:
# Auto-detect blueprint in current directoryrenku viewer
# Open a specific blueprintrenku viewer ./path/to/blueprint.yamlThis starts the viewer server in the background if not already running, and opens the blueprint viewer in your browser where you can see the workflow graph, browse builds, and preview timelines.
Stop the Viewer Server
Section titled “Stop the Viewer Server”Stop the background viewer server when done:
renku viewer:stopExporting Video
Section titled “Exporting Video”Export the final video as MP4:
renku export --movie-id=movie-a1b2c3d4With custom settings:
renku export --last \ --width=1920 \ --height=1080 \ --fps=30Choosing an Exporter
Section titled “Choosing an Exporter”Renku supports two exporter backends:
| Exporter | Description | Requirements |
|---|---|---|
remotion | Docker-based Remotion renderer (default) | Docker Desktop |
ffmpeg | Native FFmpeg renderer | FFmpeg installed |
Use the --exporter flag to choose:
# Use FFmpeg (faster, no Docker required)renku export --last --exporter=ffmpeg
# Use Remotion (default, requires Docker)renku export --last --exporter=remotionFFmpeg exporter advantages:
- No Docker installation required
- Faster rendering for simple timelines
- Produces MP3 for audio-only timelines
- Supports karaoke-style subtitles
Remotion exporter advantages:
- More advanced video effects
- Better suited for complex compositions
Advanced Export Configuration
Section titled “Advanced Export Configuration”For fine-grained control over export settings, use a YAML config file:
renku export --last --inputs=./export-config.yamlExample config file with all available options:
# Video settingswidth: 1920height: 1080fps: 30exporter: ffmpeg
# FFmpeg encoding settingspreset: medium # ultrafast, fast, medium, slowcrf: 23 # Quality: 0-51 (lower = better)audioBitrate: 192k # Audio quality
# Karaoke-style subtitles (requires TranscriptionProducer)subtitles: font: Arial fontSize: 48 fontBaseColor: '#FFFFFF' fontHighlightColor: '#FFD700' backgroundColor: '#000000' backgroundOpacity: 0.5 position: bottom-center edgePaddingPercent: 8 maxWordsPerLine: 4 highlightEffect: trueSubtitles
Section titled “Subtitles”If your blueprint includes a TranscriptionProducer, the FFmpeg exporter can add karaoke-style subtitles that highlight words as they’re spoken:
- Ensure your blueprint has a
TranscriptionProducerthat generates word-level timestamps - Create an export config with subtitle settings
- Run export with the config file
The exported video is saved to:
builds/movie-{id}/FinalVideo.mp4artifacts/movie-{id}/FinalVideo.mp4(symlink)
Cleaning Up
Section titled “Cleaning Up”List builds in the current project:
renku listThis shows which builds have artifacts (completed runs) vs. dry-run only builds.
Remove dry-run builds (safe default):
renku cleanRemove a specific movie:
renku clean --movie-id=movie-a1b2c3d4Remove all builds including completed ones:
renku clean --allTips and Best Practices
Section titled “Tips and Best Practices”Start Small
Section titled “Start Small”For new blueprints, start with:
- Fewer segments (2-3 instead of 10)
- Dry run first
- Layer-by-layer generation
Review at Each Stage
Section titled “Review at Each Stage”Don’t generate everything at once:
- Generate script → Review
- Generate prompts → Review and edit
- Generate media → Review
- Compose timeline → Export
Use Version Control
Section titled “Use Version Control”Keep your inputs files in version control:
- Track changes to prompts and settings
- Reproduce past generations
- Share configurations with team members
Monitor Costs
Section titled “Monitor Costs”Check provider dashboards regularly:
- Video generation is most expensive
- Audio generation is moderate
- Script generation is cheap
Use renku producers:list to see pricing information.