This repository is the skill directory. Invoking $tiktok-motion-factory must behave like a creative director + motion designer while keeping the pipeline deterministic. You may use AI for audio assessment and web inspiration research, but the final rendered graphics must be non-AI and strictly procedural.
Hard Constraints (Must Repeat and Enforce)
AI usage is limited. You may use AI for audio assessment and web inspiration research only. The final product must not contain AI-generated graphics; visuals must be procedural and deterministic.
Audio must be local. If a URL is provided, refuse and ask for a local file path.
Only 1–2 optional preference questions (vibe: editorial vs club; text on/off). If the user doesn’t answer, choose defaults.
Tailored concept every time. The concept must reference measured audio features (tempo/energy/onset density/dynamics) and map them to design choices.
Agent Protocol (Step-by-Step)
Collect input (minimal questions):
Ask for a local audio file path. If missing, state you will use the newest file in input/.
Ask at most two optional preference questions:
Vibe: editorial or club (default: editorial).
Text: on or off (default: on).
If the user provides a URL, refuse and ask for a local path.
Prepare audio (deterministic):
Run: tools/prep_audio.sh on the chosen audio file to create a normalized WAV for analysis and rendering.
Analyze cues (deterministic):
Run: tools/analyze_cues.py to generate jobs/<job>/cues.json.
Compute additional stats from cues (see “Audio Analysis Requirements”).
Synthesize a creative concept:
Use the “Creative Intelligence Protocol” and “Concept Synthesis” rules below to produce a tailored concept tied to audio metrics.
Write the creative spec:
Save a machine-readable creative spec to jobs/<job>/creative.json using the schema below.
Generate props:
Create jobs/<job>/props.json that includes the creative spec verbatim under creative.
Execute render:
Run ./run.sh with the audio and any user parameters (start/dur/title/slug) plus the creative spec inclusion.
Report output:
Print the final render path and job folder path.
Suggest next steps (upload, add caption, add hashtags).
Creative Intelligence Protocol (Mandatory)
You must not skip concept work. Complete all checklist items before rendering.
Ensure jobs/<job>/notes.md includes commands, rationale, and audio metrics.
Audio Analysis Requirements (Deterministic)
You must run:
tools/prep_audio.sh
tools/analyze_cues.py
Then compute the following stats from cues.json:
cueDensity: cues per second.
avgStrength: mean of cue strengths.
peakStrength: max cue strength.
quietSections: contiguous ranges where no cues appear for ≥ 0.6s (or ≥ 18 frames @30fps).
estimatedBpm: rough BPM from median inter-onset interval (IOI), mapped to BPM in [60, 180].
sectionBoundaries: infer segments by energy trend using a rolling window (e.g., 1.5s) and label as intro, build, drop, outro by relative energy and cue density.
Deterministic design rules (examples, must use):
If cueDensity > 2.2 cues/sec → use micro-shake on impacts + higher contrast palette.
If avgStrength < 0.35 → reduce impact scale to 1.05 max and favor smoother easing.
If peakStrength > 0.8 → allow a single flash accent on strongest hit in each section.
If estimatedBpm >= 130 → increase motion speed (motionTempo = fast) and tighter grid spacing.
If quietSections exist → add breathing background drift during quiet ranges.
Concept Synthesis (Required Outputs)
You must create the following and include it in creative.json:
Narrative Concept (1 paragraph)
Tie the concept directly to measured audio features (tempo, density, dynamics).
Motion Grammar (bullets)
Primitives: circles, lines, ribbons, soft rects, dot field, etc.
Behaviors: scale pop on cues, rotation tick, parallax drift, micro-shake, flash.
Palette (3–6 hex colors)
Justify palette based on audio features (e.g., high BPM → higher contrast; low density → muted neutrals).
Typography System
Use local/system fonts (e.g., Inter, Helvetica, Arial, SF Pro, Roboto).
Define hierarchy (title/subtitle), grid rules, and kinetic behavior tied to cues.
Scene Plan (exact frame ranges)
Provide startFrame/endFrame for each scene (intro/build/drop/outro).
Align boundaries to section boundaries derived from cues.
Loop Plan
Define how the last frames return to the first (e.g., gradient phase, shape positions, opacity fade).
Use the computed creative spec to generate creative.json and embed in props.json.
Run ./run.sh with user inputs (audio/start/dur/title/slug).
Print:
DONE: <path> (render output)
JOB: <path> (job folder)
Remotion Template Support Requirement
If the current Remotion template does not yet support creative.json fields, you must implement support in remotion/src:
Parse creative from props.
Apply palette, background style, primitives, and cue-driven animations deterministically according to the creative spec.
Do not add any AI dependencies or AI-driven logic.
1---2name: tiktok-motion-factory3description: Run the deterministic, non-AI Remotion TikTok motion graphics pipeline on a local audio file and produce a creative-direction spec.4---56# TikTok Motion Factory Skill (Repo Root)78This repository is the skill directory. Invoking **$tiktok-motion-factory** must behave like a creative director + motion designer while keeping the pipeline **deterministic**. You may use AI for **audio assessment** and **web inspiration research**, but the **final rendered graphics must be non-AI** and strictly procedural.910## Hard Constraints (Must Repeat and Enforce)1112- **AI usage is limited.** You may use AI for **audio assessment** and **web inspiration research** only. The final product must not contain AI-generated graphics; visuals must be procedural and deterministic.13- **Audio must be local.** If a URL is provided, refuse and ask for a local file path.14- **Only 1–2 optional preference questions** (vibe: `editorial` vs `club`; text `on/off`). If the user doesn’t answer, choose defaults.15- **Tailored concept every time.** The concept must reference measured audio features (tempo/energy/onset density/dynamics) and map them to design choices.1617## Agent Protocol (Step-by-Step)18191) **Collect input (minimal questions):**20 - Ask for a local audio file path. If missing, state you will use the newest file in `input/`.21 - Ask at most two optional preference questions:22 - Vibe: `editorial` or `club` (default: `editorial`).23 - Text: `on` or `off` (default: `on`).24 - If the user provides a URL, **refuse** and ask for a local path.25262) **Prepare audio (deterministic):**27 - Run: `tools/prep_audio.sh` on the chosen audio file to create a normalized WAV for analysis and rendering.28293) **Analyze cues (deterministic):**30 - Run: `tools/analyze_cues.py` to generate `jobs/<job>/cues.json`.31 - Compute additional stats from cues (see “Audio Analysis Requirements”).32334) **Synthesize a creative concept:**34 - Use the “Creative Intelligence Protocol” and “Concept Synthesis” rules below to produce a tailored concept tied to audio metrics.35365) **Write the creative spec:**37 - Save a machine-readable creative spec to `jobs/<job>/creative.json` using the schema below.38396) **Generate props:**40 - Create `jobs/<job>/props.json` that includes the creative spec **verbatim** under `creative`.41427) **Execute render:**43 - Run `./run.sh` with the audio and any user parameters (start/dur/title/slug) **plus** the creative spec inclusion.44458) **Report output:**46 - Print the final render path and job folder path.47 - Suggest next steps (upload, add caption, add hashtags).4849## Creative Intelligence Protocol (Mandatory)5051You must not skip concept work. Complete **all** checklist items before rendering.5253**Checklist (all required):**54- [ ] Compute audio metrics (density, avg strength, peaks, quiet sections, estimated BPM, section boundaries).55- [ ] Define scene structure (intro/build/drop/outro) aligned to energy and cues.56- [ ] Map cue types/tiers to motion responses.57- [ ] Define art direction (palette, contrast, background treatment, geometric primitives, motion language).58- [ ] Define typography system (font choice strategy, hierarchy, grid, kinetic behavior).59- [ ] Define transitions and loop strategy.60- [ ] Write `jobs/<job>/creative.json` (schema below).61- [ ] Ensure `jobs/<job>/props.json` embeds `creative.json`.62- [ ] Ensure `jobs/<job>/notes.md` includes commands, rationale, and audio metrics.6364## Audio Analysis Requirements (Deterministic)6566You must run:67- `tools/prep_audio.sh`68- `tools/analyze_cues.py`6970Then compute the following stats from `cues.json`:71- **cueDensity**: cues per second.72- **avgStrength**: mean of cue strengths.73- **peakStrength**: max cue strength.74- **quietSections**: contiguous ranges where no cues appear for ≥ 0.6s (or ≥ 18 frames @30fps).75- **estimatedBpm**: rough BPM from median inter-onset interval (IOI), mapped to BPM in [60, 180].76- **sectionBoundaries**: infer segments by energy trend using a rolling window (e.g., 1.5s) and label as `intro`, `build`, `drop`, `outro` by relative energy and cue density.7778**Deterministic design rules (examples, must use):**79- If `cueDensity > 2.2` cues/sec → use **micro-shake** on impacts + **higher contrast** palette.80- If `avgStrength < 0.35` → reduce impact scale to `1.05` max and favor smoother easing.81- If `peakStrength > 0.8` → allow a single **flash** accent on strongest hit in each section.82- If `estimatedBpm >= 130` → increase motion speed (`motionTempo = fast`) and tighter grid spacing.83- If `quietSections` exist → add **breathing** background drift during quiet ranges.8485## Concept Synthesis (Required Outputs)8687You must create the following and include it in `creative.json`:88891) **Narrative Concept (1 paragraph)**90 - Tie the concept directly to measured audio features (tempo, density, dynamics).91922) **Motion Grammar (bullets)**93 - **Primitives**: circles, lines, ribbons, soft rects, dot field, etc.94 - **Behaviors**: scale pop on cues, rotation tick, parallax drift, micro-shake, flash.95963) **Palette (3–6 hex colors)**97 - Justify palette based on audio features (e.g., high BPM → higher contrast; low density → muted neutrals).98994) **Typography System**100 - Use local/system fonts (e.g., `Inter`, `Helvetica`, `Arial`, `SF Pro`, `Roboto`).101 - Define hierarchy (title/subtitle), grid rules, and kinetic behavior tied to cues.1021035) **Scene Plan (exact frame ranges)**104 - Provide `startFrame`/`endFrame` for each scene (intro/build/drop/outro).105 - Align boundaries to section boundaries derived from cues.1061076) **Loop Plan**108 - Define how the last frames return to the first (e.g., gradient phase, shape positions, opacity fade).109110## Files to Generate111112### `jobs/<job>/creative.json`113**Required schema (keys must exist):**114```json115{116 "audio": {117 "source": "<path>",118 "durationSec": 10,119 "fps": 30,120 "metrics": {121 "cueDensity": 1.8,122 "avgStrength": 0.42,123 "peakStrength": 0.91,124 "estimatedBpm": 124,125 "quietSections": [{"startSec": 3.2, "endSec": 4.0}],126 "sectionBoundaries": [127 {"name": "intro", "startSec": 0, "endSec": 2.5},128 {"name": "build", "startSec": 2.5, "endSec": 5.0},129 {"name": "drop", "startSec": 5.0, "endSec": 8.0},130 {"name": "outro", "startSec": 8.0, "endSec": 10.0}131 ]132 }133 },134 "concept": {135 "narrative": "<1 paragraph>",136 "motionGrammar": {137 "primitives": ["circles", "ribbons", "soft-rects"],138 "behaviors": ["scale-pop", "rotation-tick", "micro-shake", "flash"]139 },140 "palette": ["#0B0F1A", "#1E2A44", "#F0E9D2", "#FF5C7C"],141 "typography": {142 "fonts": ["Inter", "Helvetica", "Arial"],143 "hierarchy": {"titleSize": 110, "subtitleSize": 48},144 "grid": {"columns": 6, "margin": 80},145 "kinetic": {"onCue": "scale-pop", "idle": "slow-drift"}146 },147 "scenes": [148 {"name": "intro", "startFrame": 0, "endFrame": 75, "energy": "low"},149 {"name": "build", "startFrame": 75, "endFrame": 150, "energy": "mid"},150 {"name": "drop", "startFrame": 150, "endFrame": 240, "energy": "high"},151 {"name": "outro", "startFrame": 240, "endFrame": 300, "energy": "low"}152 ],153 "transitions": ["smear", "crossfade"],154 "loop": {"strategy": "phase-align", "lastFrames": 15}155 },156 "cueMap": [157 {"frame": 12, "strength": 0.71, "type": "kick"},158 {"frame": 24, "strength": 0.36, "type": "hat"}159 ]160}161```162163### `jobs/<job>/props.json`164Must embed the creative spec exactly:165```json166{167 "audioSrc": "../assets/audio/<job>.wav",168 "fps": 30,169 "width": 1080,170 "height": 1920,171 "durationInFrames": 300,172 "cues": ["..."],173 "text": {"title": "...", "subtitle": "..."},174 "style": {"vibe": "editorial", "accent": "#FF5C7C"},175 "creative": {"...full creative.json content..."}176}177```178179### `jobs/<job>/notes.md`180Must include:181- Exact commands executed.182- Key creative rationale (1–3 bullets).183- Derived audio metrics (explicit numbers).184185## Execution (Run the Pipeline)1861871) Use the computed creative spec to generate `creative.json` and embed in `props.json`.1882) Run `./run.sh` with user inputs (audio/start/dur/title/slug).1893) Print:190 - `DONE: <path>` (render output)191 - `JOB: <path>` (job folder)192193## Remotion Template Support Requirement194195If the current Remotion template does not yet support `creative.json` fields, you **must** implement support in `remotion/src`:196- Parse `creative` from props.197- Apply palette, background style, primitives, and cue-driven animations deterministically according to the creative spec.198- Do **not** add any AI dependencies or AI-driven logic.
Run npx skillmds@latest add diegosouzapw/tiktok-motion-factory in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Run the deterministic, non-AI Remotion TikTok motion graphics pipeline on a local audio file and produce a creative-direction spec. It is listed under DevOps & Infra on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. Capability flags: docs only. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
diegosouzapw (@diegosouzapw) published this skill. Their other Agent Skills are listed on their SkillMD profile.