Skip to content
Back to skills

Tiktok Motion Factory

ASecurity

Run the deterministic, non-AI Remotion TikTok motion graphics pipeline on a local audio file and produce a creative-direction spec.

  • 57 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 17, 2026
design

Security analysis

A100/100

Scanned October 17, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill tiktok-motion-factory --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tiktok Motion Factory?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tiktok Motion Factory
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-tiktok-motion-factory/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-tiktok-motion-factory)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tiktok-motion-factory
description: Run the deterministic, non-AI Remotion TikTok motion graphics pipeline on a local audio file and produce a creative-direction spec.
---

# TikTok Motion Factory Skill (Repo Root)

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)

1) **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.

2) **Prepare audio (deterministic):**
   - Run: `tools/prep_audio.sh` on the chosen audio file to create a normalized WAV for analysis and rendering.

3) **Analyze cues (deterministic):**
   - Run: `tools/analyze_cues.py` to generate `jobs/<job>/cues.json`.
   - Compute additional stats from cues (see “Audio Analysis Requirements”).

4) **Synthesize a creative concept:**
   - Use the “Creative Intelligence Protocol” and “Concept Synthesis” rules below to produce a tailored concept tied to audio metrics.

5) **Write the creative spec:**
   - Save a machine-readable creative spec to `jobs/<job>/creative.json` using the schema below.

6) **Generate props:**
   - Create `jobs/<job>/props.json` that includes the creative spec **verbatim** under `creative`.

7) **Execute render:**
   - Run `./run.sh` with the audio and any user parameters (start/dur/title/slug) **plus** the creative spec inclusion.

8) **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.

**Checklist (all required):**
- [ ] Compute audio metrics (density, avg strength, peaks, quiet sections, estimated BPM, section boundaries).
- [ ] Define scene structure (intro/build/drop/outro) aligned to energy and cues.
- [ ] Map cue types/tiers to motion responses.
- [ ] Define art direction (palette, contrast, background treatment, geometric primitives, motion language).
- [ ] Define typography system (font choice strategy, hierarchy, grid, kinetic behavior).
- [ ] Define transitions and loop strategy.
- [ ] Write `jobs/<job>/creative.json` (schema below).
- [ ] Ensure `jobs/<job>/props.json` embeds `creative.json`.
- [ ] 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`:

1) **Narrative Concept (1 paragraph)**
   - Tie the concept directly to measured audio features (tempo, density, dynamics).

2) **Motion Grammar (bullets)**
   - **Primitives**: circles, lines, ribbons, soft rects, dot field, etc.
   - **Behaviors**: scale pop on cues, rotation tick, parallax drift, micro-shake, flash.

3) **Palette (3–6 hex colors)**
   - Justify palette based on audio features (e.g., high BPM → higher contrast; low density → muted neutrals).

4) **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.

5) **Scene Plan (exact frame ranges)**
   - Provide `startFrame`/`endFrame` for each scene (intro/build/drop/outro).
   - Align boundaries to section boundaries derived from cues.

6) **Loop Plan**
   - Define how the last frames return to the first (e.g., gradient phase, shape positions, opacity fade).

## Files to Generate

### `jobs/<job>/creative.json`
**Required schema (keys must exist):**
```json
{
  "audio": {
    "source": "<path>",
    "durationSec": 10,
    "fps": 30,
    "metrics": {
      "cueDensity": 1.8,
      "avgStrength": 0.42,
      "peakStrength": 0.91,
      "estimatedBpm": 124,
      "quietSections": [{"startSec": 3.2, "endSec": 4.0}],
      "sectionBoundaries": [
        {"name": "intro", "startSec": 0, "endSec": 2.5},
        {"name": "build", "startSec": 2.5, "endSec": 5.0},
        {"name": "drop", "startSec": 5.0, "endSec": 8.0},
        {"name": "outro", "startSec": 8.0, "endSec": 10.0}
      ]
    }
  },
  "concept": {
    "narrative": "<1 paragraph>",
    "motionGrammar": {
      "primitives": ["circles", "ribbons", "soft-rects"],
      "behaviors": ["scale-pop", "rotation-tick", "micro-shake", "flash"]
    },
    "palette": ["#0B0F1A", "#1E2A44", "#F0E9D2", "#FF5C7C"],
    "typography": {
      "fonts": ["Inter", "Helvetica", "Arial"],
      "hierarchy": {"titleSize": 110, "subtitleSize": 48},
      "grid": {"columns": 6, "margin": 80},
      "kinetic": {"onCue": "scale-pop", "idle": "slow-drift"}
    },
    "scenes": [
      {"name": "intro", "startFrame": 0, "endFrame": 75, "energy": "low"},
      {"name": "build", "startFrame": 75, "endFrame": 150, "energy": "mid"},
      {"name": "drop", "startFrame": 150, "endFrame": 240, "energy": "high"},
      {"name": "outro", "startFrame": 240, "endFrame": 300, "energy": "low"}
    ],
    "transitions": ["smear", "crossfade"],
    "loop": {"strategy": "phase-align", "lastFrames": 15}
  },
  "cueMap": [
    {"frame": 12, "strength": 0.71, "type": "kick"},
    {"frame": 24, "strength": 0.36, "type": "hat"}
  ]
}
```

### `jobs/<job>/props.json`
Must embed the creative spec exactly:
```json
{
  "audioSrc": "../assets/audio/<job>.wav",
  "fps": 30,
  "width": 1080,
  "height": 1920,
  "durationInFrames": 300,
  "cues": ["..."],
  "text": {"title": "...", "subtitle": "..."},
  "style": {"vibe": "editorial", "accent": "#FF5C7C"},
  "creative": {"...full creative.json content..."}
}
```

### `jobs/<job>/notes.md`
Must include:
- Exact commands executed.
- Key creative rationale (1–3 bullets).
- Derived audio metrics (explicit numbers).

## Execution (Run the Pipeline)

1) Use the computed creative spec to generate `creative.json` and embed in `props.json`.
2) Run `./run.sh` with user inputs (audio/start/dur/title/slug).
3) 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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.