Motion Craft logo

Motion Craft

Community
RollySeth
motion-craft

Create polished video stories with cinematic editing, motion design, music, and AI narration using FFmpeg and Edge TTS. Use whenever the user asks to trim, combine, resize, crop, reframe, caption, color-grade, stabilize, speed up, slow down, add music or voiceover, generate narration, create transitions, animate zooms, highlight part of a screen recording, blur or dim a background, add cinematic title cards, or export a social-media-ready video. Detect and install FFmpeg when it is unavailable. Preserve the source and deliver a verified media file.

Overview

PublisherRollySeth
RepositoryAI-Taste-Skill
Skill namemotion-craft
Stars
12
Forks
1
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by RollySeth on GitHub. Read the source before you install it.

Installation

Install the Motion Craft AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/RollySeth/AI-Taste-Skill/tree/main/motion-craft
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/RollySeth/AI-Taste-Skill.git /tmp/AI-Taste-Skill
mkdir -p .claude/skills
cp -r /tmp/AI-Taste-Skill/motion-craft .claude/skills/motion-craft
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Motion Craft in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Motion Craft on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Motion Craft is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Motion Craft

Use FFmpeg and FFprobe to produce polished, reliable video edits. Work locally; do not upload the user's media to third-party services.

Core rules

  1. Never overwrite the source unless the user explicitly requests it.
  2. Inspect the source before designing the edit:
    • video/audio streams
    • duration
    • dimensions, frame rate, pixel format, and sample rate
    • rotation and color metadata when relevant
  3. For visually targeted edits, inspect representative frames before rendering. Use frames near every requested transition or effect boundary.
  4. Preserve the source's aspect ratio and frame rate unless the requested output requires a change. Explain intentional crops.
  5. Preserve audio unless the user asks to remove or replace it.
  6. Prefer one coherent -filter_complex graph over repeated lossy renders.
  7. Put complicated filter graphs in a temporary filter script rather than fighting shell escaping. Delete temporary files after verification.
  8. Show errors instead of returning a success-shaped fallback.
  9. Render to a new, clearly named file beside the source unless the user gives another destination.
  10. If background music would suit the requested edit but the user has not provided a music/audio file or URL, ask whether they want music before the final render. Let them provide a local path or authorized URL, or choose no music. Do not delay a silent/voice-only edit when music is clearly unwanted. Never download copyrighted music from an unauthorized source.
  11. Match generated graphics to the source video's visual language. Sample dominant/accent colors from representative frames or use supplied brand assets instead of applying a generic gradient. Match typography weight, corner radius, spacing, contrast, and motion character where practical.
  12. If the source does not provide a clear visual direction and the user has not supplied one, ask for optional brand choices: logo, palette/hex colors, fonts, reference image/video, and preferred tone. Offer to infer a tasteful palette from the footage when they have no brand guide.
  13. For screen recordings, inspect the beginning, every splice boundary, and the ending for recorder controls, cursor toolbars, notification overlays, blank application redraws, and loading flashes. Trim or replace those frames rather than leaving capture artifacts in the final video.

Ensure FFmpeg is available

Check both tools before any edit:

powershell
ffmpeg -hide_banner -version
ffprobe -hide_banner -version

On macOS/Linux, use the equivalent shell commands.

If either command is unavailable, install FFmpeg with the platform's trusted package manager. Tell the user what will be installed. Do not download or run a random executable from an unofficial mirror.

Windows

Prefer WinGet:

powershell
winget install --id Gyan.FFmpeg.Essentials --exact --accept-package-agreements --accept-source-agreements

If WinGet is unavailable, use Chocolatey only when it is already installed:

powershell
choco install ffmpeg -y

FFmpeg's official download page links to supported Windows builds: https://ffmpeg.org/download.html#build-windows.

macOS

Prefer Homebrew when available:

bash
brew install ffmpeg

Debian or Ubuntu

bash
sudo apt-get update
sudo apt-get install -y ffmpeg

Fedora

Use the configured Fedora/RPM Fusion repositories:

bash
sudo dnf install -y ffmpeg

Arch Linux

bash
sudo pacman -S --needed ffmpeg

If installation requires administrator approval, repository configuration, or an unavailable package manager, ask the user rather than bypassing controls. After installation, open a fresh shell if needed and verify both commands.

Inspect the media

Start with:

bash
ffprobe -v error -show_entries format=duration,format_name:stream=index,codec_type,codec_name,width,height,r_frame_rate,avg_frame_rate,pix_fmt,sample_rate,channels:stream_tags=rotate -of json "input.mp4"

For visual work, extract low-cost review frames:

bash
ffmpeg -hide_banner -loglevel error -ss 00:00:05 -i "input.mp4" -frames:v 1 "frame-5s.png"

Use a contact sheet or several timestamped frames when scene boundaries are not known. Do not infer crop coordinates or overlay timing from the filename alone.

Plan edits precisely

Translate the request into a timeline before rendering:

TimeVisualAudio
0-3sSource or introOriginal, music, or silence
3-11sRequested focus/effectPreserve or duck
11s-endRestore/source or outroPreserve

For screen recordings, match callouts and lower thirds to what is visibly onscreen. For voiceovers, compare narration and video durations. If narration is longer, prefer a user-appropriate solution such as extending the final frame, slowing a suitable section, or revising timing; do not silently truncate.

Default delivery profile

Unless the user requests another codec or container, produce broadly compatible MP4:

bash
ffmpeg -i "input.mp4" ... -c:v libx264 -preset medium -crf 18 \
  -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart "output.mp4"
  • Use CRF 18-20 for high-quality delivery and 21-23 for smaller previews.
  • Use -map 0:a? or optional audio mappings when input audio may be absent.
  • Copy streams only when no filter requires re-encoding.
  • Keep a consistent audio sample rate across concatenated segments, typically 48 kHz or the source rate.
  • Use hardware encoding only when useful and available. Prefer quality and portability; fall back to software encoding if hardware initialization fails.

Cinematic editing patterns

Smooth focus-card animation

For educational screen recordings:

  1. split the source into base, background-effect, and foreground streams.
  2. crop the interface region that needs focus.
  3. Blur and optionally dim the background with gblur, smartblur, eq, or a translucent color overlay.
  4. Animate the cropped card with per-frame scale and overlay expressions.
  5. Add a softened shadow using format=yuva420p, pad, colorchannelmixer, and gblur.
  6. Use smoothstep easing (3*p*p - 2*p*p*p) instead of linear motion.
  7. Reverse the animation cleanly back to the original location.

Keep the foreground sharp. Verify frames before, during, and after the effect.

This pattern explicitly supports a blurred background with a cropped overlay on top:

  • crop the important UI region from a clean source branch
  • blur/dim a full-frame branch behind it
  • center or reposition the crop as a sharp card
  • add restrained scale/position easing, border, and soft shadow
  • return the card to its source location or dissolve it cleanly

Use exact crop coordinates confirmed from review frames. Do not enlarge beyond readable source resolution, and do not animate scale when a stable fixed overlay communicates the point better.

Kinetic cards and comparison layouts

Support modern animated-card compositions, including:

  • cards sliding or easing into a grid
  • staggered image, title, metric, or feature cards
  • before/after comparisons
  • split-screen raw-versus-polished demonstrations
  • stacked callouts and step cards
  • floating UI panels over a blurred or color-treated background

Build cards from cropped video/image streams, drawbox, drawtext, alpha channels, shadows, and overlay. Use smoothstep or cubic easing for position and opacity. Prefer animating overlay position/alpha over continuously rescaling the source; when scale animation is needed, keep dimensions even, normalize SAR, use a consistent frame rate, and inspect consecutive frames for jitter.

Keep motion hierarchy clear: one primary card or action at a time, restrained staggering, sufficient hold time for reading, and clean exits. Never cover the interaction or UI detail the user is trying to demonstrate.

Stable screen-recording edits

  • Prefer fixed framing for UI demonstrations unless movement clearly improves comprehension. Unnecessary per-frame zooming can appear jittery, especially when low-frame-rate recordings are accelerated.
  • When accelerating 10/15 fps recordings, normalize the output frame rate and inspect consecutive frames. Use frame interpolation only when it improves the result without creating cursor/UI warping.
  • Remove recorder controls and stop-recording overlays at clip beginnings and endings. Cut before they appear; do not hide them with unrelated graphics.
  • Detect blank application redraws or single-frame flashes with a contact sheet and consecutive-frame inspection. Remove the affected frame range and join adjacent clean states with a short video/audio crossfade.
  • After replacing a time range, inspect several frames before, inside, and after the splice. Confirm the replacement has the intended exact duration so later audio and visual events remain synchronized.

Cinematic color treatment

Build restrained grades from filters such as:

  • curves or colorlevels for contrast and black/white points
  • colorbalance, colorchannelmixer, or lut3d for color separation
  • eq for modest contrast, saturation, brightness, and gamma changes
  • vignette for subtle edge falloff
  • noise or gradfun for controlled texture/banding reduction
  • unsharp for mild finishing sharpness

Avoid crushing shadows, clipping highlights, oversaturation, or aggressive vignettes. When exact color appearance matters, preserve or explicitly convert color-space metadata.

Titles, lower thirds, and captions

  • Use drawtext for simple text and subtitles/ASS for sophisticated styling.
  • Derive title-card and gradient colors from the footage, logo, thumbnail, or supplied brand reference. Check representative pixels/regions rather than guessing from memory.
  • When brand direction is supplied, follow its palette, fonts, logo-safe space, contrast, and motion style. When it is absent, propose or infer a restrained palette and keep it consistent across titles, lower thirds, cards, and outro.
  • Confirm the font exists on the machine. Quote and escape font paths safely.
  • Use safe margins and readable contrast.
  • Animate with time-based x, y, and alpha expressions.
  • For gradient cards, generate the background, add subtle graphic elements, render text, create matching silent audio, and concatenate with normalized video/audio formats.
  • Never burn captions into the picture unless requested; offer a subtitle track when editability or accessibility matters.
  • Avoid placing banners over active interactions. Use whitespace, an unused region, a brief interstitial, or a separate card between demonstrations.
Smooth animated titles

Support polished opening titles, section titles, interstitials, and end cards:

  • slide-and-fade text from an edge or nearby resting position
  • masked/wipe reveals using a moving crop, alpha mask, or covering shape
  • staggered eyebrow, headline, and subtitle entrances
  • subtle scale settling (for example 102% to 100%), never repeated pulsing
  • word- or line-based kinetic typography when the message benefits from it
  • coordinated exits that finish before the next important visual action

Use smoothstep or cubic easing for x, y, alpha, and scale expressions. Avoid linear starts/stops. Keep the animation short enough to feel responsive but leave sufficient hold time to read the complete title.

Example timing model for a 3-second title:

TimeAction
0.00-0.45sHeadline eases in and fades from 0 to 1
0.18-0.65sSubtitle follows with a restrained stagger
0.65-2.45sStable readable hold
2.45-3.00sElements fade or slide out together

Do not begin a social-media video with a visually empty title background when the platform may select its first frame as the thumbnail. Prefer a strong source frame with a title overlay, or begin with the visual hook and place the title as a short interstitial.

Animated lower thirds

Create lower thirds as coordinated components rather than text floating alone:

  1. Use a brand-matched solid, translucent, blurred, or gradient-backed card.
  2. Animate the card in first with eased position and alpha.
  3. Reveal the primary label, then the secondary line with a short stagger.
  4. Hold long enough to read.
  5. Exit cleanly before it covers a new interaction or scene change.

Common layouts include:

  • compact name/role card
  • feature or chapter label
  • numbered step indicator
  • quote or key-stat callout
  • pill label plus headline

Keep lower thirds inside title-safe margins, normally within the lower-left or lower-right unused region. Check the source at the entire display interval; placement that is safe on the first frame may cover UI or captions later.

For a modern treatment, combine drawbox/generated card layers, drawtext, alpha-capable formats, and overlay. Add a restrained shadow or backdrop blur when needed for contrast. Animate the group consistently so the background and text do not drift or jitter relative to each other.

Text-animation quality checks
  • Confirm fonts exist or provide a portable fallback.
  • Keep text sharp and high contrast at delivery resolution.
  • Use consistent capitalization, weight, spacing, and punctuation.
  • Never let text clip during its entrance/exit animation.
  • Inspect the first fully visible frame, readable hold, and final exit frame.
  • Check consecutive frames for scale/position jitter.
  • Verify title and lower-third timing against the visible scene, not only the requested timestamp.
  • Preserve caption readability and do not place decorative text over subtitles.

Transitions and scene changes

  • Prefer xfade for deliberate transitions and acrossfade for matching audio.
  • Normalize resolution, frame rate, time base, pixel format, channel layout, and sample rate before concatenation.
  • Keep transition durations short and motivated; avoid using effects simply because they are available.

Reframing for social media

Common outputs:

  • Landscape: 1920x1080 (16:9)
  • Vertical: 1080x1920 (9:16)
  • Square: 1080x1080 (1:1)

Use scale plus crop for full-frame output, or scale plus pad to retain all content. For screen recordings, inspect whether a fixed crop hides important UI; use animated reframing when the subject moves.

Generate narration with Edge TTS

When the user provides text and asks for a synthetic voiceover, use edge-tts when an online TTS service is acceptable. Edge TTS sends the narration text to Microsoft's online speech service, so tell the user before using it for sensitive or confidential text. It requires an internet connection.

Check whether it is available:

bash
edge-tts --help

If it is missing, prefer pipx when installed because it isolates the CLI:

bash
pipx install edge-tts

Otherwise install it with the active Python interpreter:

powershell
py -m pip install --user --upgrade edge-tts

On macOS or Linux:

bash
python3 -m pip install --user --upgrade edge-tts

If the command is not added to PATH, invoke the module through Python:

bash
python -m edge_tts --help

Do not install into an unrelated project environment or modify its dependency manifest unless the user requests that. If Python or pip is unavailable, install Python through the platform's trusted package manager or direct the user to https://www.python.org/downloads/, then retry.

List available voices rather than inventing a voice identifier:

bash
edge-tts --list-voices

Generate narration and matching subtitles:

bash
edge-tts --voice en-US-AvaNeural \
  --rate=+0% --volume=+0% --pitch=+0Hz \
  --text "Narration text" \
  --write-media "narration.mp3" \
  --write-subtitles "narration.srt"

For negative rate, volume, or pitch values, use the equals form such as --rate=-10%; otherwise the value may be parsed as another option.

Voiceover workflow:

  1. Confirm the narration text, language, and requested tone.
  2. List voices and choose one matching the language. If the user has no preference, use a clear general-purpose neural voice and state the choice.
  3. Generate both audio and subtitles when useful.
  4. Probe narration duration with FFprobe.
  5. Compare narration duration with the video timeline.
  6. Normalize gently, mix or replace audio, and verify synchronization.

Do not clone, imitate, or imply the identity of a real person. Use only the service's provided synthetic voices.

Mix audio and voiceover

  • Use loudnorm carefully for delivery normalization.
  • When no music is provided, ask the user to choose one of:
    • provide a local music file
    • provide an authorized downloadable audio URL
    • continue without background music
  • If the user provides a URL, confirm it resolves directly to audio they are authorized to use. Do not rip audio from streaming or social-media services.
  • Duck background audio under narration with sidechaincompress or timed volume automation.
  • Apply short fades at cut boundaries to prevent clicks.
  • Mix with amix only after matching sample formats/rates/layouts.
  • Do not fabricate or clone a person's voice without clear authorization.

To replace the source audio with narration while copying unchanged video:

bash
ffmpeg -i "input.mp4" -i "narration.mp3" \
  -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 192k \
  -movflags +faststart "with-voiceover.mp4"

To keep full narration when it is longer than the video, calculate the duration difference and extend the final frame with tpad=stop_mode=clone. Do not use -shortest when it would truncate either required narration or video.

To duck looping background music under narration:

bash
ffmpeg -i "input.mp4" -stream_loop -1 -i "music.wav" -i "narration.mp3" \
  -filter_complex \
  "[1:a]volume=0.22,apad[music]; \
   [2:a]loudnorm=I=-16:TP=-1.5:LRA=11,apad,asplit=2[voice_sc][voice_mix]; \
   [music][voice_sc]sidechaincompress=threshold=0.03:ratio=8:attack=20:release=500[ducked]; \
   [ducked][voice_mix]amix=inputs=2:duration=longest:dropout_transition=2[aout]" \
  -map 0:v:0 -map "[aout]" -c:v copy -c:a aac -b:a 192k \
  -movflags +faststart -shortest "with-music-and-voiceover.mp4"

Trim/fade the music to the final timeline and confirm the narration remains clearly intelligible on headphones and typical laptop speakers.

Render workflow

  1. Confirm source and output paths.
  2. Probe media and inspect relevant frames.
  3. Create a timestamped edit plan.
  4. Validate a short or fast draft for complex filter graphs.
  5. Inspect key frames from the draft.
  6. Render the final quality output.
  7. Verify the output with FFprobe and decode checks.
  8. Remove temporary frames/filter scripts, leaving the source and final output.

For long renders, estimate complexity from duration and filters, use an appropriate preset, and report progress without restarting a successful render.

Verification

At minimum:

bash
ffprobe -v error -show_entries format=duration,size:stream=codec_type,codec_name,width,height,r_frame_rate,sample_rate,channels -of json "output.mp4"
ffmpeg -v error -i "output.mp4" -f null -

Also inspect frames at every transition boundary and confirm:

  • expected duration and dimensions
  • video decodes without errors
  • audio exists when expected and stays synchronized
  • overlays enter and exit at the intended times
  • the source file remains unchanged

Report the final absolute path and a concise description of the applied edit.

Frequently asked questions

What does the Motion Craft AI skill do?

Create polished video stories with cinematic editing, motion design, music, and AI narration using FFmpeg and Edge TTS. Use whenever the user asks to trim, combine, resize, crop, reframe, caption, color-grade, stabilize, speed up, slow down, add music or voiceover, generate narration, create transitions, animate zooms, highlight part of a screen recording, blur or dim a background, add cinematic title cards, or export a social-media-ready video. Detect and install FFmpeg when it is unavailable. Preserve the source and deliver a verified media file.

Why use Motion Craft on TypingMind?

Because you install it once and use it with any model. Motion Craft is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Motion Craft in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/RollySeth/AI-Taste-Skill/tree/main/motion-craft. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Motion Craft?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Motion Craft?

As many as you like. As long as a model supports skills, you can use Motion Craft with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Motion Craft AI skill free?

It is published on GitHub by RollySeth. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇