Loading...
Loading...
Creates polished demo videos for skills, tutorials, and CLI demonstrations. Use when producing video showcases, marketing content, or terminal recordings.
npx skill4agent add yonatangross/orchestkit demo-producer/demo-producer # Interactive mode - asks what to create
/demo-producer skill explore # Create demo for a skill
/demo-producer plugin ork # Create demo for a plugin
/demo-producer tutorial "Building a REST API" # Custom tutorial| Type | Source | Example |
|---|---|---|
| skills/{name}/SKILL.md | |
| agents/{name}.md | |
| plugins/{name}/plugin.json | |
| Marketplace install flow | |
| Custom description | |
| Any CLI tool | |
| Code walkthrough | |
What type of demo do you want to create?
○ Skill - OrchestKit skill showcase
○ Agent - AI agent demonstration
○ Plugin - Plugin installation/features
○ Tutorial - Custom coding tutorial
○ CLI Tool - Command-line tool demo
○ Code Walkthrough - Explain existing codeWhat format(s) do you need?
☑ Horizontal (16:9) - YouTube, Twitter
☑ Vertical (9:16) - TikTok, Reels, Shorts
☐ Square (1:1) - Instagram, LinkedInWhat style fits your content?
○ Quick Demo (6-10s) - Fast showcase, single feature
○ Standard Demo (15-25s) - Full workflow, multiple steps
○ Tutorial (30-60s) - Detailed explanation, code examples
○ Cinematic (60s+) - Story-driven, high polish
○ Scrapbook (15-35s) - Warm paper, fast cuts, social proof collage (Anthropic style)Audio preferences?
○ Music Only - Subtle ambient background
○ Music + SFX - Background + success sounds
○ Silent - No audio┌──────────────────────────────────────────────────────────────────┐
│ Demo Producer Pipeline │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────────┐ │
│ │ Content │───▶│ Content │───▶│ Script Generator │ │
│ │ Detector │ │ Analyzer │ │ (per type) │ │
│ └─────────────┘ └──────────────┘ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────────┐ │
│ │ Remotion │◀───│ VHS │◀───│ Terminal Script │ │
│ │ Composer │ │ Recorder │ │ (.sh + .tape) │ │
│ └──────┬──────┘ └──────────────┘ └─────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Final Outputs │ │
│ │ • horizontal/{Name}Demo.mp4 │ │
│ │ • vertical/{Name}Demo-Vertical.mp4 │ │
│ │ • square/{Name}Demo-Square.mp4 (optional) │ │
│ └─────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘/demo-producer skill explore --template tri-terminal-race/demo-producer tutorial "Building REST API" --template progressive-zoom/demo-producer cli "npm run build" --template split-then-merge/demo-producer plugin ork --template scrapbookreferences/template-system.md# After interactive selection, generates:
# 1. Terminal script
./skills/demo-producer/scripts/generate-script.sh \
--type=skill \
--name=explore \
--style=standard \
--output=orchestkit-demos/scripts/
# 2. VHS tape files
./skills/demo-producer/scripts/generate-tape.sh \
--script=demo-explore.sh \
--format=horizontal,vertical \
--output=orchestkit-demos/tapes/
# 3. Record VHS
cd orchestkit-demos/tapes && vhs sim-explore.tape
# 4. Add Remotion composition
./skills/demo-producer/scripts/add-composition.sh \
--name=explore \
--type=skill \
--formats=horizontal,vertical
# 5. Render final videos
cd orchestkit-demos && npx remotion render ExploreDemo --output=out/horizontal/ExploreDemo.mp4
npx remotion render ExploreDemo-Vertical --output=out/vertical/ExploreDemo-Vertical.mp4orchestkit-demos/out/
├── horizontal/
│ └── {Name}Demo.mp4 # 1920x1080 16:9
├── vertical/
│ └── {Name}Demo-Vertical.mp4 # 1080x1920 9:16
└── square/
└── {Name}Demo-Square.mp4 # 1080x1080 1:1 (optional)orchestkit-demos/src/Root.tsxProduction/ # Ready-to-render videos
├── Landscape-16x9/ # YouTube, Website (1920x1080)
│ ├── Core-Skills/ # implement, verify, commit, explore
│ ├── Memory-Skills/ # remember, memory
│ ├── Review-Skills/ # review-pr, create-pr, fix-issue
│ ├── DevOps-Skills/ # doctor, configure, run-tests, feedback
│ ├── AI-Skills/ # brainstorming, assess, assess-complexity
│ ├── Advanced-Skills/ # worktree-coordination, skill-evolution, demo-producer, add-golden
│ └── Styles/ # Alternative visualizations (ProgressiveZoom, SplitMerge, etc.)
├── Vertical-9x16/ # TikTok, Reels, Shorts (1080x1920)
├── Square-1x1/ # Instagram, LinkedIn (1080x1080)
└── Marketing/ # Brand & intro videos
Templates/ # Reference examples for each component style
Experiments/ # Work in progress, testing new ideas| Category | Skills |
|---|---|
| Core-Skills | implement, verify, commit, explore |
| Memory-Skills | remember, memory |
| Review-Skills | review-pr, create-pr, fix-issue |
| DevOps-Skills | doctor, configure, run-tests, feedback |
| AI-Skills | brainstorming, assess, assess-complexity |
| Advanced-Skills | worktree-coordination, skill-evolution, demo-producer, add-golden |
<Folder name="Production">
<Folder name="Landscape-16x9">
<Folder name="{Category}-Skills">
<Composition id="{SkillName}" ... />
</Folder>
</Folder>
</Folder>V-TTR-SQ-TTR-const Terminal: React.FC<Props> = ({ frame, fps }) => {
const LINE_HEIGHT = 22;
const MAX_VISIBLE = 10;
// Header stays pinned (command + task created message)
const visibleHeader = HEADER_LINES.filter(line => frame >= line.frame);
// Content scrolls to keep latest visible
const visibleContent = CONTENT_LINES.filter(line => frame >= line.frame);
const contentHeight = visibleContent.length * LINE_HEIGHT;
const scrollOffset = Math.max(0, contentHeight - MAX_VISIBLE * LINE_HEIGHT);
return (
<div style={{ height: 420 }}>
{/* Pinned header */}
<div style={{ borderBottom: "1px solid #21262d" }}>
{visibleHeader.map((line, i) => <TerminalLine key={i} {...line} />)}
</div>
{/* Scrolling content */}
<div style={{ overflow: "hidden", height: 280 }}>
<div style={{ transform: `translateY(-${scrollOffset}px)` }}>
{visibleContent.map((line, i) => <TerminalLine key={i} {...line} />)}
</div>
</div>
</div>
);
};const AGENT_COLORS = {
workflow: "#8b5cf6", // Purple - workflow-architect
backend: "#06b6d4", // Cyan - backend-system-architect
security: "#ef4444", // Red - security-auditor
performance: "#22c55e", // Green - performance-engineer
frontend: "#f59e0b", // Amber - frontend-ui-developer
data: "#ec4899", // Pink - data-pipeline-engineer
llm: "#6366f1", // Indigo - llm-integrator
docs: "#14b8a6", // Teal - documentation-specialist
};const SPINNER = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
const TaskSpinner: React.FC<{ frame: number; text: string; color: string }> = ({ frame, text, color }) => {
const spinnerIdx = Math.floor(frame / 3) % SPINNER.length;
return (
<div style={{ color }}>
<span style={{ marginRight: 8 }}>{SPINNER[spinnerIdx]}</span>
{text}
</div>
);
};| Slop Pattern | Example | Fix |
|---|---|---|
| Verbose phase names | "Divergent Exploration" | "Ideas" or "Generating 12 ideas" |
| Redundant sub-descriptions | Phase title + description | Combine into single line |
| Repetitive completions | "✓ Task #2 completed: patterns analyzed" | "✓ #2 patterns" |
| Generic transitions | "Now let's see..." | Cut directly |
| Empty lines for spacing | Multiple blank lines | CSS padding instead |
TERMINAL TEXT DENSITY
=====================
✓ "Analyzing topic → 3 patterns found" (action → result)
✗ "Phase 1: Topic Analysis" (title only)
✗ " └─ Keywords: real-time, notifications" (sub-detail)
✓ "✓ #2 patterns" (compact completion)
✗ "✓ Task #2 completed: patterns analyzed" (verbose completion)15-SECOND VIDEO BREAKDOWN
=========================
0-7s: Terminal demo (action-packed)
7-11s: Result visualization (payoff)
11-15s: CTA (install command + stats)
Rule: If content doesn't earn its screen time, cut it.terminal-demo-generatorremotion-composerhook-formulasvideo-pacingmusic-sfx-selectionthumbnail-first-framereferences/template-system.mdreferences/content-types.mdreferences/format-selection.mdreferences/script-generation.md