persian-motion-director skill
Claude skill for motion design with correct Persian: eight techniques, HarfBuzz tooling for letters and dots, a text linter
- 153 ★ on the repository
- Last commit
Extended access
Why this level
- The skill runs Python and Node.js scripts and writes video files into the project
- Remotion rendering installs npm dependencies and loads the CPU
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/persian-motion-directorDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The skill runs Python and Node.js scripts and writes video files into the project
- Remotion rendering installs npm dependencies and loads the CPU
This is third-party code. Review the repository files before installing.
What it does
persian-motion-director teaches Claude to direct motion. The skill starts from two typical failures of generated video: it plays like a slideshow, and Persian text breaks when animated. Letters split apart, dots get clipped, Arabic letters appear in place of Persian ones, half-spaces vanish and text reveals run in the wrong direction. The working loop is to show directions before building, lock the music first, cut on the beat and keep one moving camera. The skill holds eight working techniques: one camera with no cuts, one shape carrying the story, a real UI directed right to left, cutting on the beat, drawings on twos with line boil, paper cut-out letters, dots last and kashida in place of letter-spacing. Each is plain JavaScript written as a pure function of time, so the code runs live in a browser and frame by frame in Remotion. Scripts come with the skill: shape_persian.py splits a word into letter bodies, dots and joined groups through HarfBuzz, split_fa.js splits a word while keeping joined forms, and lint_persian.py checks copy and code. The Persian typography rules follow the W3C Arabic and Persian layout requirements.
Who it is for. Motion designers and developers making clips and animation with Persian or other RTL text in Remotion or plain web code.
Good fit when
- A 30-second Persian app teaser cut to music
- An animation looks like a slideshow and needs a professional finish
- A Persian title falls apart into separate letters when animated
- You want to see eight motion directions before anything is built
Not a fit when
- A video with no Persian or RTL text: the skill is built around that typography
- You need a finished video editor: the skill provides techniques and code while the agent builds
- You need licensed music: the repository ships the author's own track and a beat map
Example request
Make a 30-second Persian teaser for my app in Remotion cut to music, and show eight directions firstLimitations
Shaping needs Python with uharfbuzz and fonttools, and frame-exact rendering needs Remotion. The Vazirmatn font under the OFL license is included. Techniques come from public discussions by motion designers, and the Persian rules were checked in Chrome, the engine Remotion uses. GitHub metadata does not resolve the repository license, so check the LICENSE file before commercial use of the materials. The techniques are shown with Remotion and browser JavaScript examples, so for other animation tools you have to port them yourself.
How to disable. Delete the persian-motion-director folder from ~/.claude/skills or the project .claude/skills. Videos and code you created stay in the project.
FAQ
Which eight techniques does the skill have?
One camera with no cuts, one shape carrying the story, a real UI directed right to left, cutting on the beat, drawings on twos with line boil, paper cut-out letters, dots last and kashida. Each has a live sketch in assets/sketches and a Remotion clip.
What does lint_persian.py check?
Copy for Arabic ي and ك in place of Persian letters, digits, half-spaces and punctuation, and code for letter boxes, letter-spacing and fades. Run python3 scripts/lint_persian.py copy copy.txt or code src/.
Why use kashida?
Animation stretches the joining stroke between letters, which keeps the word shape. Technique 08 measures the stretch in calligraphic dots.
Does the skill work without Remotion?
Yes, the sketches run in a browser with cd assets/sketches && python3 -m http.server 8000. Remotion is needed for frame-exact rendering and building clips.
When does Claude pick up the skill?
When you ask for animation or video with Persian, Farsi, Arabic-script or RTL text, and when you say motion looks like a slideshow, default or unprofessional.
Discussion
No questions or reviews yet.
Related
SkillsNine motion design skills for Claude Code: timing, color, composition, After Effects, Remotion, logos and backgrounds.
Claude Code skill: turns a one-line theme into a beat-synced HyperFrames showreel with morph transitions and generated sound.
A motion design toolkit for coding agents: rules with numbers, frame self-review and synthesized sound, plus web sims at 60 fps
A Claude Code skill that builds a Remotion film of your product from its own components, tokens and logo, cut to music
One sentence becomes a 12 to 60 second motion film built in code, with palette, fonts, storyboard and music derived from it.
A skill for Claude Code and Codex that builds cinematic product videos with Remotion from shot recipe cards, a ready template and audio assets
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Repository stars | Main difference |
|---|---|---|---|
| persian-motion-director (this card) | no | 153 | |
| Motion Design Skill | no | 2,980 | general motion design with no Persian typography work |
| HyperFrames | no | 83,841 | building videos from HTML without RTL text rules |
| Framer Motion AI Skills | no | 10 | Framer Motion interface animation, not film-style clips |
README in short
The README names two failures of generated motion and gives eight techniques in a table with previews. It then describes the repository layout (SKILL.md, references, scripts, assets), installation into personal Claude Code skills or a project .claude/skills, example prompts and how to run live sketches and Remotion clips.
README badge
Original SKILL.md
--- name: persian-motion-director description: Direct and build professional motion design (promo and launch films, kinetic typography, animated explainers, social clips, title sequences) with correct Persian/Farsi and right-to-left typography, in Remotion or plain web code. Use this skill whenever the user wants a video, animation, motion graphics, teaser or animated text that contains Persian, Farsi, Arabic-script or RTL text, and whenever they say a motion piece looks "default", "like a slideshow", "AI-made" or "not pro", or that the Persian looks off, broken or disconnected, even if they never say "motion design". It brings the anti-slideshow method (one camera, objects that carry across scenes, music-first beat-locked edits), eight ready techniques with live sketches, HarfBuzz tooling for per-letter and per-dot Persian animation, kashida stretching, and a Persian correctness checklist and linter. --- # Persian Motion Director You are directing, not just animating. Most generated motion fails in two predictable ways: it plays like a slideshow (scenes that fade into each other, one ease-in-out on everything, everything arriving at once), and its Persian is broken (letters split apart, dots clipped, Arabic letters and digits, missing half-spaces, left-to-right reveals). This skill fixes both. The method comes from how professional motion designers describe their own work on X; the Persian rules come from W3C's Arabic & Persian Layout Requirements and were checked in Chrome (the engine Remotion renders with). ## The director's loop Work in this order. Each step exists because skipping it is how pieces end up looking default. 1. **Read the brief and fill only real gaps.** Copy (Persian and any Latin), length, aspect ratio, brand colours and fonts, where it will be posted, music. If a brand exists, use its palette and fonts instead of inventing one. 2. **Show directions before building.** Motion is subjective and expensive to redo. Pick 6–10 techniques from the library below that fit the brief, open `assets/sketches/gallery.html` (or render the clips) and let the user choose. Rework after a full build costs ten times more than a pick list. 3. **Music first.** Lock the track and its tempo before animating. Build a bar map: which section lives on which bars. If there's no track, compose one (`assets/music/compose_shur_pulse.py` is a working example that writes `beats.json`) or ask for one. At 120 BPM one beat is 0.5 s and one bar 2 s; at 60 fps a beat is 30 frames. 4. **Write the shot list on the bar grid** (template in `references/workflow.md`). Every section change lands on a downbeat; every cut on a beat or 2 frames before it. 5. **Style frames.** Render 4–6 stills (`assets/remotion/render-stills.mjs`) and get a yes before animating everything. 6. **Build** in Remotion with one camera container and shared objects (see `assets/remotion/src/intro/Intro.tsx` for a complete worked example). 7. **Check**, then render: run `scripts/lint_persian.py` on all copy, review stills at full size for clipped dots and broken joins, scrub every cut against the beat, and make loops exact (clip length = a whole number of loops). ## What separates pro motion from a slideshow | Slideshow habit | What to do instead | |---|---| | Scenes chained with fade transitions | One camera travels between scenes, or one object carries into the next scene. Never `fade()` scene to scene. | | The same ease-in-out on everything | Each move gets its own curve. Entrances: `bezier(.16,1,.3,1)` over ~20 frames. Exits: `bezier(.7,0,.84,0)` over ~8 frames, travelling only ~70% as far. | | Everything arrives together, evenly spaced | One lead element, the rest 2–4 frames behind, spaced on a curve rather than evenly. | | Remotion's default bouncy `spring()` (overshoots ~16%) | Under 2% overshoot on UI, none on text: stiffness 100 / damping 16 gives ~1.5%. | | Music laid on at the end | Music first; cuts on the beat; sound attacks placed on the visual hits. | | Centered text on a gradient, logo at the end | Show the real product doing a real task in the first 10 seconds. | | Freezes, or motion that never pauses | Hold long enough to read; only the camera breathes (zoom 1.00 → 1.04 per scene). | | Grain, halftone or ASCII as a finish | Texture only with a physical reason (paper, print, light). These finishes are now the AI default. | More numbers and the sources behind them: `references/anti-slideshow.md`. ## Persian non-negotiables Read `references/persian-typography.md` before writing any Persian into a frame. The short version: 1. **Never put Persian letters in their own boxes.** `inline-block` spans, flex children (including direct children of Remotion's `<AbsoluteFill>`, which is a flex box) and any per-letter transform draw each letter in its isolated form. Animate whole words or lines. When you truly need per-letter or per-dot motion, use shaped outlines (`scripts/shape_persian.py`) or zero-width-joiner splitting (`scripts/split_fa.js`). 2. **Fade words, not letters.** Joined letters overlap; per-letter opacity or see-through text colour leaves seams at every join. 3. **Masks need slack.** Persian reaches far above and below Latin: pad clip masks by about 0.5em top and bottom, use line-height ≥ 1.6 (≥ 2.4 for Nastaliq), or the dots and the top of گ get cut. 4. **Direction.** `dir="rtl" lang="fa"` on every Persian block; wrap Latin names and numbers in `<bdi>` (or FSI/PDI) or the line scrambles. Reveals and staggers start on the right, camera progress travels left, "next" arrows point left. Play buttons, clocks and numbers are never mirrored. 5. **Characters.** Persian ی (U+06CC) and ک (U+06A9), never Arabic ي/ك; Persian digits ۰–۹ (U+06F0–06F9), never Arabic-Indic ٠–٩; the half-space (ZWNJ, U+200C) in می, ‑ها, ‑تر/‑ترین; punctuation ، ؛ ؟ « ». `scripts/lint_persian.py` catches these.