Agent skill
viral-producer
Spec-in, content-out Reel renderer. Receives a complete production spec (format tier, topic, hook, CTA, caption, imagery direction) from the viral-ig-marketer orchestrator and produces a rendered .mp4 + caption file + metadata. Use this skill whenever you need to render a faceless Instagram Reel from a fully-defined spec. Trigger when creating Reels, rendering animations, or producing video from a production spec. Also trigger when referencing Remotion, fal.ai, video rendering, or motion graphics. This skill does NOT make creative decisions — format selection, virality scoring, caption writing, and content strategy are handled upstream by viral-ig-marketer. It validates the incoming spec, generates assets, renders via Remotion, saves the caption, and packages output.
Install this agent skill to your Project
npx add-skill https://github.com/iamhenry/ai-project-starter-kit/tree/main/.opencode/skills/viral-producer
SKILL.md
Viral Producer — Faceless Reel Production Pipeline
Purpose
Receive a complete production spec from the viral-ig-marketer orchestrator and render it into a ready-to-post Instagram Reel. This skill owns the production pipeline from validated spec to final .mp4. It does not select content angles, score virality, or write captions — those decisions are made upstream.
The input is a spec. The output is content.
Scope
- Platform: Instagram Reels (
9:16vertical,1080x1920, h264+aac,.mp4) - Content type: Faceless only — no face-on-camera content
- Format tiers: T1-T4 (niche formats) and P1-P3 (premium formats)
- Rendering engine: Remotion (programmatic React-based video)
- Asset generation: fal.ai (AI imagery), stock footage, Figma/SVG design assets
- Output: Rendered
.mp4package atoutput/reels/<slug>/, ready for posting via Postiz or manually
Prerequisites
- Remotion — installed and configured. See
references/remotion-guide.mdfor setup. - fal.ai API key — required for AI image/video generation. Set in
references/production-config.json - ffmpeg — required for video verification and post-processing
- Node.js — required by Remotion
- Research brief — a completed brief from the viral-research skill, or at minimum a content angle with a specified format tier
Read references/production-config.json before every production session. It defines the
niche, brand voice, visual system, and tool configuration.
Read ../viral-ig-marketer/references/soul.md before writing any text content (hooks, captions, CTAs). All copy
must align with the brand voice defined there.
Production Workflow
Phase 1: Spec Validation
Goal: Validate the incoming production spec before starting work.
Spec contract: See ../viral-ig-marketer/references/production-spec.md for the full contract (required fields, optional fields, example). This is the single source of truth for the spec interface.
Process:
- Read the production spec (passed as input from viral-ig-marketer)
- Validate all required fields are present and non-empty
- Verify
format_tieris a recognized tier fromreferences/format-templates.md - Read
references/production-config.jsonfor brand colors, fal.ai settings, Remotion composition mapping - If any required field is missing → error immediately with a clear message listing missing fields. Do not proceed.
Output: Validated spec ready for asset preparation.
Phase 2: Asset Preparation
Goal: Generate or source all visual and text assets needed for the Reel.
Read references/format-templates.md for the exact asset requirements per format tier.
Audio is sourced from ../viral-ig-marketer/audio/ using the production spec's audio_track field. Treat audio_track as the selected filename to resolve from that directory.
For T1 (Meme Reel):
- Source stock footage that visually contradicts the text message
- Write 1-2 text overlays (setup text + optional label)
- No custom assets needed
For T2 (Quote Card):
- Generate background image via fal.ai or source stock photo
- Write the quote text (read
../viral-ig-marketer/references/soul.mdfor voice) - Style: bold, stacked, center-aligned
For T3 (Text Card):
- Source subtle background footage (timelapse, nature, gradient animation)
- Write both text sections (myth list + reality list, or equivalent comparison)
- Design text hierarchy (bold headers, lighter body)
For T4 (Truth Bomb):
- Source contemplative footage (real timelapse preferred over AI)
- Write the 3-part argument (fact → irony → conclusion)
- Choose clean serif typography
For P1 (Functional Loop):
- Design the interactive element (breathing circle, day counter, progress ring)
- Choose monochromatic brand palette from
references/production-config.json - Plan the loop point (last frame must match first frame)
- Text: 1-2 words maximum
For P2 (Data Viz Humor):
- Design the data element (gauge, counter, EKG, progress bar)
- Plan the visual metaphor or gamification hook
- Dark UI aesthetic (black + single accent color)
- Plan the destruction/escalation/resolution arc
For P3 (Cultural Edutainment):
- Source premium footage (drone aerial, cinematic nature — real, not AI)
- Design the frosted glass dictionary card
- Write: term, pronunciation, part of speech, definition, "see also" (humorous)
- Choose monochromatic palette aligned to footage
Asset generation via fal.ai:
# Example: generate a background image
curl -X POST "https://fal.run/fal-ai/flux/dev" \
-H "Authorization: Key $FAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "aerial drone shot of ocean waves at sunset, cinematic, 9:16 vertical",
"image_size": {"width": 720, "height": 1280}
}'
Respect the budget ceiling in references/production-config.json → fal.budgetCeilingUSD.
Fall back to stock footage or solid/gradient backgrounds if the budget is hit.
Output: All assets saved to output/assets/<slug>/ — images, footage clips, SVGs, text files.
Phase 3: Remotion Rendering
Goal: Render the final .mp4 using Remotion.
Read references/remotion-guide.md for detailed rendering instructions per format tier.
General process:
- Prepare the Remotion input props (JSON file with all content and asset paths):
{
"format": "T2",
"topic": "sobriety regret quote",
"hook": "I would've been 1 year sober today...",
"backgroundImage": "output/assets/slug/background.png",
"textOverlays": [
{ "text": "I would've been", "style": "bold", "position": "center" },
{ "text": "1 year sober today.", "style": "bold", "position": "center" },
{ "text": "If I quit drinking", "style": "bold", "position": "center" },
{ "text": "1 year ago.", "style": "bold", "position": "center" }
],
"duration": 6,
"fps": 30
}
-
Pre-render validation (T2 motion check):
Before invoking the render, verify the composition contains actual motion — not a single static frame:
- If
formatisT2: inspect the Remotion input props and composition code. The composition must include at least one animation sequence:- Text animation: fade-in, typewriter, staggered reveal, or equivalent text motion
- Background motion: Ken Burns zoom/pan, parallax shift, subtle particle effect, or slow camera drift
- If both are missing (i.e., the composition would render a single static image for the entire duration), fail the render with error:
"T2 motion check failed: composition contains no animation sequences. T2 Quote Card requires text animation + background motion. Add at least one text reveal and one camera/background movement before rendering." - For all other format tiers (T1/T3/T4/P1-P3): motion is inherent to their composition templates — no additional check needed.
- If
-
Invoke the Remotion render:
npx remotion render <composition-id> \
--props=<props-file> \
--output=output/reels/<slug>.mp4 \
--codec=h264
- Verify the output:
ffprobe -v quiet \
-show_entries stream=codec_name,width,height,duration \
-show_entries format=duration \
output/reels/<slug>.mp4
Expected: 1080x1920, h264 video + aac audio, duration matches target ±0.5s.
If Remotion is not set up or render prerequisites are missing, fail the cycle loudly. Do not silently degrade to a static/manual package.
Required behavior:
- Stop before claiming the reel is ready.
- Emit a clear error explaining why automated render could not run.
- Mark the cycle/output as
render_failed, notready-for-reviewand notready-for-manual-render. - If you generated useful inputs (backgrounds, props, caption drafts), keep them as debugging artifacts only — not as the primary deliverable.
- Never treat
render-instructions.mdas a successful reel output.
Output: Rendered .mp4 in output/reels/<slug>.mp4 or an explicit render failure.
Phase 4: Caption Save
Goal: Save the caption provided in the production spec.
The caption is written upstream by viral-ig-marketer. This phase saves it to the output package.
- Extract the
captionfield from the production spec - Save to
output/reels/<slug>/caption.txt - Verify the caption is non-empty
Output: Caption text saved to output/reels/<slug>/caption.txt
Phase 5: Output Package
Goal: Deliver a complete, ready-to-post package.
For each produced Reel, the final output includes:
output/reels/<slug>/
├── <slug>.mp4 — rendered Reel (1080x1920, h264+aac)
├── caption.txt — full caption with CTA and hashtags
├── metadata.json — production metadata (format tier, topic, hook type,
│ virality score, assets used, render settings, audio)
└── thumbnail.png — first frame extracted for preview
Extract the thumbnail:
ffmpeg -i output/reels/<slug>.mp4 -vf "select=eq(n\,0)" -vsync 0 \
output/reels/<slug>/thumbnail.png -y
Write metadata.json:
{
"slug": "<slug>",
"format": "T2",
"topic": "sobriety regret quote",
"hookType": "urgency",
"emotionalTrigger": "regret",
"viralityScore": 4,
"duration": 6.0,
"resolution": "1080x1920",
"productionDate": "YYYY-MM-DD",
"assetsUsed": {
"background": "fal.ai generated / stock / custom",
"typography": "font name, weight, color",
"audio": "track filename from production spec"
},
"caption": "first line of caption...",
"hashtags": ["#tag1", "#tag2"],
"status": "ready-to-post"
}
Present the package to the human for review before posting. The human makes the final publish decision — this skill never posts directly.
Operating Principles
- Research first, produce second. Never produce content without a research brief or at minimum a validated content angle. Uninformed content is wasted effort.
- Spec is the contract. The production spec from viral-ig-marketer defines what to produce. Do not second-guess creative decisions (topic, hook, CTA, caption) — produce exactly what the spec says. If the spec is incomplete, error with missing fields.
- Virality gate is upstream. The orchestrator (viral-ig-marketer) runs the virality gate before delegating to this skill. Viral-producer produces what it's told — it does not re-score.
- Faceless only. All content must be producible without a human appearing on camera. If a content angle requires face-on-camera, adapt the narrative structure to a faceless format (text overlay, animation, stock footage) or discard it.
- Under 10 seconds by default. The research data consistently shows sub-10-second Reels get higher completion rates and more algorithmic distribution. Only exceed 10 seconds for P2 (Data Viz) formats where the escalation arc requires it.
- Soul for visual tone. Read
../viral-ig-marketer/references/soul.mdfor brand voice context. Use it to guide visual tone and typography choices — not to rewrite copy (that's upstream). - Fail loudly on Remotion unavailability. If Remotion isn't available, record an explicit render failure instead of shipping an instructions-only package as the deliverable. If fal.ai budget is hit, fall back to stock or gradient backgrounds, but the pipeline must still produce a real
.mp4to count as complete. - Loop everything possible. Seamless loops (last frame = first frame) maximize watch time, which is the algorithm's #1 ranking signal. For static formats (T1, T2), the loop is inherent. For animated formats (P1, P2), engineer the loop point intentionally.
- All Reels MUST contain motion — no static frames. Every rendered Reel must include at least one animation sequence. For T2 Quote Card specifically: require text animation (fade-in, typewriter, or staggered reveal) + slow background motion (Ken Burns zoom/pan, parallax, or subtle particle effect). Duration 5-7s. T1/T3/T4/P1-P3 inherently contain motion. Never render a single static frame as a Reel — Instagram's algorithm deprioritizes static images published as Reels vs actual video content.
Memory
All paths relative to this skill's directory:
- Production config:
references/production-config.json - Brand voice:
../viral-ig-marketer/references/soul.md(single source of truth — no local copy) - Format templates:
references/format-templates.md - Remotion guide:
references/remotion-guide.md - Caption guide:
../viral-ig-marketer/references/caption-guide.md(owned by viral-ig-marketer — creative decisions live upstream) - Output directory:
output/(created on first run if missing) - Asset directory:
output/assets/(generated assets per production run) - Reel directory:
output/reels/(final rendered Reels)
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
verification-gate
Reusable verification gate for completed work before commit or merge. Use when implementation is done and Claude must prove the task works, verify the main user flow, choose between browser-flow, browser-static, or non-browser validation, and return a PASS/FAIL/BLOCKED verdict with evidence. When browser verification is needed, rely on the agent-browser skill for browser actions, screenshots, and recordings.
osgrep
Semantic code search using natural language queries. Use when users ask "where is X implemented", "how does Y work", "find the logic for Z", or need to locate code by concept rather than exact text. Returns file paths with line numbers and code snippets.
napkin
Maintain a per-repo napkin file that tracks mistakes, corrections, and what works. Activates EVERY session, unconditionally. Read the napkin before doing anything. Write to it continuously as you work — not just at session boundaries. Log your own mistakes, not just user corrections. The napkin lives in the repo at `.opencode/napkin.md`.
dogfood
Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", "test this app/site/platform", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams.
tmux
Manage concurrent background processes using tmux. Use when spawning dev servers, running long-running tasks, monitoring multiple processes, or capturing output from background commands without blocking the main session.
viral-research
Viral content research and DNA extraction for Instagram Reels. Use this skill whenever you need to research what's performing in a niche on Instagram, find viral faceless Reels, download and analyze them frame-by-frame, identify patterns, and produce a structured research brief. Trigger whenever the user mentions viral content research, Instagram research, Reel analysis, content DNA, swipe file building, niche research, competitor analysis for social content, or wants to understand why certain content performs. Also trigger when the user wants to find content formats to adapt, study what's working in a niche, or build a research-backed content strategy. This skill is research-only — it does not generate or publish content.
Didn't find tool you were looking for?