Agent skill

moviepy Text-on-Video Composer

by digitalsamba in digitalsamba/claude-code-video-toolkit

Overlays deterministic, accurate text on AI-generated video clips and builds short single-file Python video projects without a Remotion toolchain.

MITAuto-check passedMedia & Creative

Install moviepy Text-on-Video Composer

skills CLI
$ npx skills add digitalsamba/claude-code-video-toolkit --skill moviepy -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install digitalsamba/claude-code-video-toolkit moviepy --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/digitalsamba/claude-code-video-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/moviepy .claude/skills/moviepy && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
moviepy
GitHub stars
2.2k
Token cost
~3.3k tokens
SKILL.md length
1,073 words
Files
1
Skills in repo
11
Repo updated
First seen
Licence
MIT

At a glance

Overlays deterministic, accurate text on AI-generated video clips and builds short single-file Python video projects without a Remotion toolchain.

  • Adding accurate labels or captions to an AI-generated video clip
  • SKILL.md covers When to use moviepy vs. Remotion, The main use case: text on…, Genres where this shines and Text rendering — use PIL, not…, plus 5 more sections
  • Calls uv
  • Building a short ad-style video spot without a Remotion project

What it does

The core argument is that any genre where text has to be exactly right, legally, editorially or commercially, is a genre where AI-rendered in-frame text isn't good enough, since names must be spelled correctly and prices must be exact in a way generation models can't guarantee; moviepy is the fix, layering deterministic text on top of bare AI-generated visuals from tools like LTX-2 or SadTalker. It's chosen over Remotion for overlaying labels on those outputs, building a sub-30-second ad-style spot in one file, compositing data-driven visuals such as a matplotlib animation turned into a video, or a one-off transformation on an existing video file.

Two runnable examples ship with the skill: a 15-second ad-style spot with an audio-anchored timeline, text overlay and optional voiceover with ducked music, and an animated time-series chart with a deterministic title and source attribution that pairs matplotlib for the data with moviepy for the trustworthy text. Both run with a single command and produce a real output file immediately, with moviepy, Pillow and matplotlib declared as dependencies in the project's own setup and installed together.

When your agent uses it

  • Adding accurate labels or captions to an AI-generated video clip
  • Building a short ad-style video spot without a Remotion project
  • Turning a matplotlib animation into a video with a stable title

Example prompts

  • “Overlay a lower-third caption on this SadTalker output.”
  • “Build a 15-second ad spot from this script using moviepy.”
  • “Turn this matplotlib chart animation into a video with a title overlay.”

Requirements

  • Python with moviepy, Pillow and matplotlib
  • `uv` to run the bundled build scripts

What it can do on your machine

Read from SKILL.md and the folder at commit 2c99460. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

moviepy Text-on-Video Composer loads about 3.3k tokens when it runs. Until then it costs about 131 tokens; SKILL.md has 1,073 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~131
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from digitalsamba/claude-code-video-toolkit at commit 2c99460, republished under its MIT licence (© digitalsamba). 1,073 words, ~3,275 tokens.

Download SKILL.mdSave it as .claude/skills/moviepy/SKILL.md (or your agent's skills folder).
name
moviepy
description
Python video composition with moviepy 2.x — overlaying deterministic text on AI-generated video (LTX-2, SadTalker), compositing clips, single-file build.py video projects. Use when adding labels/captions/lower-thirds to LTX-2 or SadTalker outputs, building short ad-style spots in pure Python without Remotion, or doing programmatic video composition. Triggers include text overlay on video, label LTX-2 clip, caption SadTalker output, lower third, build.py video, moviepy, Python video composition, sub-30s ad spot.

moviepy for Video Production

moviepy is the toolkit's go-to library for putting deterministic text on top of AI-generated video and for building short, single-file Python video projects without a Remotion toolchain.

The deeper principle is trustworthy text: any genre where text has to be readable, accurate, and consistent (legally, editorially, or commercially) is a genre where AI-rendered in-frame text is unacceptable and a moviepy overlay step is the natural fix. Names must be spelled right. Prices must be exact. Source attributions must be pixel-perfect. AI generation models cannot guarantee any of that.

When to use moviepy vs. Remotion

Use moviepy when…Use Remotion when…
Overlaying text/labels on an LTX-2 or SadTalker outputBuilding long-form sprint reviews or product demos
Building sub-30s ad-style spots in a single build.pyMulti-template, multi-brand, design-heavy work
Compositing data-driven visuals (matplotlib FuncAnimation → mp4)Anything needing React components or design system reuse
One-off transformations on existing video filesAnything where the project lifecycle (planning → render) matters
You want zero Node.js / no React mental overheadYou want hot-reload preview in Remotion Studio

Two runnable references for everything in this skill live in examples/:

  • examples/quick-spot/build.py — 15-second ad-style spot. Audio-anchored timeline, text overlay, optional VO + ducked music. Renders silent out of the box with zero external assets.
  • examples/data-viz-chart/build.py — animated time-series chart with deterministic title and source attribution. Demonstrates the matplotlib (data) + moviepy (trustworthy text) split.

Both run with uv run build.py and produce a real out.mp4 immediately. Read them alongside this skill — every pattern below is shown working there.

Dependencies. moviepy, Pillow, and matplotlib are declared in the root pyproject.toml and installed with the toolkit's one-line Python setup: uv sync. If you hit Missing dependency when running an example, run that command from the repo root — the examples' build.py files will tell you the same thing in their error message and exit cleanly rather than printing a bare traceback.

The main use case: text on AI-generated video

Both LTX-2 and SadTalker output bare visuals:

  • LTX-2 cannot reliably render readable text (the model hallucinates letterforms — see the ltx2 skill's "Bad Prompts").
  • SadTalker outputs a talking head with no captions, labels, lower thirds, or context.

The fix is to generate the visual cleanly, then composite text over it deterministically with moviepy. This is the canonical pattern in this toolkit:

python
from moviepy import VideoFileClip, ImageClip, CompositeVideoClip

# 1. AI-generated visual (LTX-2 or SadTalker output)
bg = VideoFileClip("lugh_ltx.mp4").without_audio()

# 2. Text rendered via PIL → ImageClip (see "Text rendering" below)
title = (
    ImageClip("text_cache/intro_title.png")
    .with_duration(2.0)
    .with_start(0.5)
    .with_position(("center", 880))
)

# 3. Composite
final = CompositeVideoClip([bg, title], size=(1920, 1080))
final.write_videofile("lugh_with_caption.mp4", fps=30, codec="libx264")

Common shapes this takes:

ShapeLTX-2 useSadTalker use
Title card over hero footage"INTRODUCING LONGARM" over a cinematic LTX-2 b-rolln/a
Lower third / name platen/a"Lugh — Ancient Warrior God" under a talking head
Quote caption"I am going home." over an LTX-2 character cameoSame, over a SadTalker talking head
Brand attributionLogo + URL fade-in over the last secondSame
Tinted overlay for contrastDark navy semi-transparent layer behind textSame

Genres where this shines

The "AI-visual + deterministic text overlay" pattern is the natural production pipeline for several styles of video. If the request matches one of these, reach for moviepy by default:

GenreWhat you overlayWhy moviepy is the right call
News / talking-head journalismSpeaker name plates, location bars, breaking-news banners, source attribution, pull quotesNames must be spelled right (editorial / legal). The biggest category by volume.
Documentary segmentsInterviewee lower thirds, chapter titles, archival source credits, location stampsSame trust requirement as news.
Trailers / promo spotsTitle cards, credit overlays ("FROM THE DIRECTOR OF…"), date stings, quote cards, CTAsTightly timed, text-heavy, every frame matters. The q2-townhall-longarm-ad example is exactly this.
Social short-form (Reels, TikTok, Shorts)Word-accurate captions for sound-off viewing, hashtag overlaysMost social viewing is muted; captions are non-negotiable.
Product demos with annotationsPricing callouts, feature labels, "click here" pointers over screen recordings, before/after labelsPrices and product names must be exact.
Tutorials / explainersStep number overlays, terminal-command captions, keyboard-shortcut calloutsStep numbers must be sequential, commands must be copy-pasteable.

Lesser-but-real fits: music videos (lyric overlays), reaction videos (source attribution), sports recaps (score overlays), real-estate tours (price / sqft), conference talks (speaker + session plate).

For full SRT-driven subtitling (long-form, time-coded, multilingual) moviepy is workable but not ideal — reach for ffmpeg with subtitles filter or a dedicated subtitle tool. moviepy is best for hand-placed overlays, not bulk caption tracks.

Show full SKILL.md (392 more words)Show less

Text rendering — use PIL, not TextClip

Critical gotcha: moviepy 2.x's TextClip(method='label') has a tight-bbox bug that clips letter ascenders and descenders (the tops of capitals, the tails of g/p/y). On Apple Silicon you'll see characters with sliced edges and not realise what's wrong for hours.

The workaround: render text to a transparent PNG via PIL, then load it as an ImageClip. Cache the result by content hash so re-builds are free.

python
import hashlib
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont

ARIAL_BOLD = "/System/Library/Fonts/Supplemental/Arial Bold.ttf"

def render_text_png(txt, size, hex_color, cache_dir="./text_cache"):
    cache = Path(cache_dir); cache.mkdir(parents=True, exist_ok=True)
    key = hashlib.sha1(f"{txt}|{size}|{hex_color}".encode()).hexdigest()[:16]
    path = cache / f"{key}.png"
    if path.exists():
        return str(path)

    font = ImageFont.truetype(ARIAL_BOLD, size)
    bbox = ImageDraw.Draw(Image.new("RGBA", (1, 1))).textbbox((0, 0), txt, font=font)
    tw, th = bbox[2] - bbox[0], bbox[3] - bbox[1]
    pad = max(20, size // 4)

    img = Image.new("RGBA", (tw + pad * 2, th + pad * 2), (0, 0, 0, 0))
    rgb = tuple(int(hex_color.lstrip("#")[i:i+2], 16) for i in (0, 2, 4))
    ImageDraw.Draw(img).text((pad - bbox[0], pad - bbox[1]), txt, font=font, fill=(*rgb, 255))
    img.save(path)
    return str(path)

The full helper (with kwargs for bold, position, fades, and cleaner ergonomics) is in examples/quick-spot/build.py — copy it rather than re-implementing.

Audio-anchored timeline pattern

For ad-style edits where every frame matters, generate per-scene VO first and anchor every visual to known absolute timestamps. This eliminates timing drift entirely. See CLAUDE.md → Video Timing → Audio-Anchored Timelines for the full pattern. The short version:

python
# Audio-anchored timeline (25s):
#   Scene 1 tired      0.3 → 3.74  (audio 3.44s)
#   Scene 2 worries    4.0 → 8.88  (audio 4.88s)

text_clip("TIRED OF",     start=0.5,  duration=1.2)
text_clip("THIRD-PARTY",  start=1.0,  duration=1.8)
vo_clip("01_tired.mp3",   start=0.3)
vo_clip("02_worries.mp3", start=4.0)

Common recipes

Text on a single AI-generated clip
python
from moviepy import VideoFileClip, ImageClip, CompositeVideoClip

bg = VideoFileClip("ltx_hero.mp4").without_audio()
caption = (
    ImageClip(render_text_png("THE FUTURE OF AGENTS", 140, "#FFFFFF"))
    .with_duration(bg.duration)
    .with_position(("center", 880))
)
CompositeVideoClip([bg, caption], size=bg.size).write_videofile("captioned.mp4", fps=30)
Lower third over a SadTalker talking head
python
from moviepy import VideoFileClip, ImageClip, ColorClip, CompositeVideoClip

talking = VideoFileClip("narrator_sadtalker.mp4")
W, H = talking.size

# Semi-transparent bar across the bottom for contrast
bar = (
    ColorClip((W, 140), color=(20, 24, 38))
    .with_duration(talking.duration)
    .with_opacity(0.75)
    .with_position(("center", H - 160))
)
name = (
    ImageClip(render_text_png("LUGH", 72, "#F06859"))
    .with_duration(talking.duration)
    .with_position((80, H - 150))
)
title = (
    ImageClip(render_text_png("Ancient Warrior God", 36, "#FFFFFF"))
    .with_duration(talking.duration)
    .with_position((80, H - 80))
)
CompositeVideoClip([talking, bar, name, title]).write_videofile("with_lower_third.mp4", fps=30)
Tinted overlay for text contrast over busy footage

LTX-2 b-roll is often too visually busy for legible text. Drop a semi-transparent navy layer between the video and the text:

python
from moviepy import ColorClip

tint = (
    ColorClip((W, H), color=(20, 24, 38))
    .with_duration(duration)
    .with_opacity(0.55)
)
# Composite order: bg → tint → text
CompositeVideoClip([bg, tint, text_clip])
Side-by-side composite
python
from moviepy import VideoFileClip, CompositeVideoClip, ColorClip

left  = VideoFileClip("demo_a.mp4").resized(width=960).with_position((  0, "center"))
right = VideoFileClip("demo_b.mp4").resized(width=960).with_position((960, "center"))
bg    = ColorClip((1920, 1080), color=(0, 0, 0)).with_duration(max(left.duration, right.duration))
CompositeVideoClip([bg, left, right]).write_videofile("split.mp4", fps=30)
Mix per-scene VO with ducked music
python
from moviepy import AudioFileClip, CompositeAudioClip
from moviepy.audio.fx.MultiplyVolume import MultiplyVolume
from moviepy.audio.fx.AudioFadeIn import AudioFadeIn
from moviepy.audio.fx.AudioFadeOut import AudioFadeOut

music = AudioFileClip("music.mp3").with_effects([
    MultiplyVolume(0.22),  # duck under VO
    AudioFadeIn(0.5),
    AudioFadeOut(1.5),
])
vo = [
    AudioFileClip(f"scenes/0{i}.mp3").with_effects([MultiplyVolume(1.15)]).with_start(start)
    for i, start in [(1, 0.3), (2, 4.0), (3, 9.1)]
]
final_audio = CompositeAudioClip([music] + vo)

Gotchas

  • moviepy 2.x renamed methods. Use subclipped (not subclip), with_duration / with_start / with_position (not set_duration etc.), with_effects([...]) instead of .fadein()/.fadeout(). Many tutorials online still show 1.x syntax — be skeptical.
  • TextClip(method='label') clips ascenders/descenders. Always use the PIL workaround above.
  • OffthreadVideo is Remotion-only. moviepy uses VideoFileClip. Don't mix the two.
  • Resizing requires Pillow ≥ 10.0 for the LANCZOS resample. If you see ANTIALIAS errors, upgrade Pillow.
  • ColorClip takes RGB tuples, not hex strings. Use (20, 24, 38), not "#141826".
  • Audio in VideoFileClip is loaded by default. Call .without_audio() if you only want the visual — composing with audio you don't want will cause silent VO drops in CompositeAudioClip.
  • Always set size=(W, H) on CompositeVideoClip. Without it, output dimensions follow the first clip, which can be smaller than your target.

When to reach for what

TaskTool
Animate a still imagetools/ltx2.py --input
Talking head from photoreal portraittools/sadtalker.py
Talking head from stylized charactertools/ltx2.py --input (see ltx2 skill)
Add a label/caption/lower third to either of the abovemoviepy + PIL (this skill)
Convert / compress / resize an existing fileffmpeg (see ffmpeg skill)
Long-form, design-system-driven videoRemotion (see remotion skill)

References

  • Runnable example — short ad-style spot: examples/quick-spot/build.py
  • Runnable example — data-viz with text overlay: examples/data-viz-chart/build.py
  • Audio-anchored timelines: CLAUDE.md → Video Timing → Audio-Anchored Timelines
  • Related skills: ltx2, ffmpeg, remotion

© digitalsamba, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/moviepy of digitalsamba/claude-code-video-toolkit.

Open the folder on GitHubat commit 2c99460

Compare with similar skills

moviepy Text-on-Video Composer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

moviepy Text-on-Video Composer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
moviepy Text-on-Video Composer this skilldigitalsamba/claude-code-video-toolkit2.2k—~3.3kAutomated safety check: PassMIT
Vox DirectorAlisa0808/vox-director2.2k—~5.6kAutomated safety check: PassMIT
Cap Cinematic Demo GeneratorCapSoftware/Cap23k—~2.4kAutomated safety check: PassCustom licence
VideoDB Video Search and Editingaffaan-m/ECC276k3 repos~3.5kAutomated safety check: NotesMIT
Ffmpeg Skillkajisho5/ffmpeg-skill1.9k—~7.4kAutomated safety check: PassMIT
OpenStoryline Install HelperFireRedTeam/FireRed-OpenStoryline3.5k—~1.5kAutomated safety check: NotesApache-2.0

Similar skills

  • Vox Director

    Alisa0808/vox-director

    Turn ONE topic into a finished Vox-style paper-collage explainer / ad video, end to end on the Atlas Cloud API + local ffmpeg — script, collage keyframes, motion, voice-over, music, captions, all…

    2.2k GitHub stars~5.6k tokensUpdated 5 days ago
    Media & CreativeAuto-check passed
  • Turns any URL into a short cinematic product-demo video on macOS, scouting the page, recording it with virtual input, then treating the clip with Cap's 3D camera and music.

    23k GitHub stars~2.4k tokensUpdated today
    Media & CreativeAuto-check passed
  • Ingests, indexes, searches, edits and monitors video, audio and live streams through the VideoDB Python SDK, returning stream links, clips and timestamps.

    276k GitHub starsUsed in 3 repos~3.5k tokens
    Media & CreativeAuto-check: notes
  • Ffmpeg Skill

    kajisho5/ffmpeg-skill

    Edit video and audio with local FFmpeg from natural-language requests: cut, trim, join, resize/reframe (9:16, 1:1), speed change, captions and subtitles (SRT/ASS, animated, karaoke), logos and text…

    1.9k GitHub stars~7.4k tokensUpdated today
    Media & CreativeAuto-check passed
  • OpenStoryline Install Helper

    FireRedTeam/FireRed-OpenStoryline

    Installs, repairs and starts a local source checkout of FireRed-OpenStoryline, from prerequisites and a venv to resources, config and the MCP and web servers.

    3.5k GitHub stars~1.5k tokensUpdated 2 mo ago
    Media & CreativeAuto-check: notes
  • Python Executor

    cortega26/chile-hub

    Execute Python code in a safe sandboxed environment via [inference.sh](https://inference.sh).

    113 GitHub starsUsed in 2 repos~1.5k tokens
    Data & AnalyticsAuto-check passed

More from digitalsamba/claude-code-video-toolkit

All 11 skills in this repo
  • FFmpeg for Video Production

    digitalsamba/claude-code-video-toolkit

    Command recipes for converting, resizing, compressing, trimming and extracting audio from video with FFmpeg, including settings for Remotion projects.

    2.2k GitHub starsUsed in 3 repos~3.3k tokens
    Auto-check passed
  • ElevenLabs Voiceover Generator

    digitalsamba/claude-code-video-toolkit

    Generates narration, sound effects and cloned voices through the ElevenLabs API, with model and setting choices tuned to the content's style.

    2.2k GitHub starsUsed in 1 repo~2.7k tokens
    Auto-check: notes
  • LTX-2.3 Video Generation

    digitalsamba/claude-code-video-toolkit

    Generates roughly five-second video clips from a text prompt or a still image with the LTX-2.3 22B model, run through a Modal endpoint by `tools/ltx2.py`.

    2.2k GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check: notes
  • Playwright Browser Demo Recording

    digitalsamba/claude-code-video-toolkit

    Records browser interactions as video with Playwright, covering viewport sizing, cursor highlighting, and converting output for Remotion.

    2.2k GitHub starsUsed in 1 repo~3.2k tokens
    Auto-check passed
  • ACE-Step Music Generation

    digitalsamba/claude-code-video-toolkit

    Generates background music, vocal tracks, covers and stems with ACE-Step 1.5 through a bundled music_gen.py tool, using cloud or self-hosted providers.

    2.2k GitHub stars~3.3k tokensUpdated 5 days ago
    Auto-check: notes
  • Ideogram 4 Prompt Builder

    digitalsamba/claude-code-video-toolkit

    Turns a casual image request into the structured JSON caption Ideogram 4 needs for legible on-image text, exact brand colors and controlled layout.

    2.2k GitHub stars~1.3k tokensUpdated 5 days ago
    Auto-check: notes

Questions about moviepy Text-on-Video Composer

What does moviepy Text-on-Video Composer do?

Overlays deterministic, accurate text on AI-generated video clips and builds short single-file Python video projects without a Remotion toolchain. The core argument is that any genre where text has to be exactly right, legally, editorially or commercially, is a genre where AI-rendered in-frame text isn't good enough, since names must be spelled correctly and prices must be exact in a way generation models can't guarantee; moviepy is the fix, layering deterministic text on top of bare AI-generated visuals from tools like LTX-2 or SadTalker. It's chosen over Remotion for overlaying labels on those outputs, building a sub-30-second ad-style spot in one file, compositing data-driven visuals such as a matplotlib animation turned into a video, or a one-off transformation on an existing video file.

When should I use moviepy Text-on-Video Composer?

moviepy Text-on-Video Composer fits situations like: adding accurate labels or captions to an AI-generated video clip; building a short ad-style video spot without a Remotion project; turning a matplotlib animation into a video with a stable title.

How do I install moviepy Text-on-Video Composer in Claude Code?

Run `npx skills add digitalsamba/claude-code-video-toolkit --skill moviepy -a claude-code`. Or copy the skill folder (.claude/skills/moviepy in digitalsamba/claude-code-video-toolkit) into .claude/skills/moviepy in your project. Claude Code loads it when a task matches its description.

How do I install moviepy Text-on-Video Composer in Codex?

Run `npx skills add digitalsamba/claude-code-video-toolkit --skill moviepy -a codex`. Or copy the skill folder (.claude/skills/moviepy in digitalsamba/claude-code-video-toolkit) into .agents/skills/moviepy in your project. Codex loads it when a task matches its description.

Can I use moviepy Text-on-Video Composer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add digitalsamba/claude-code-video-toolkit --skill moviepy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/moviepy, .gemini/skills/moviepy, .github/skills/moviepy and .opencode/skills/moviepy in your project.

What does moviepy Text-on-Video Composer need to run?

Going by SKILL.md and its folder, moviepy Text-on-Video Composer needs the command-line tools its instructions call (uv). Our summary lists: Python with moviepy, Pillow and matplotlib; `uv` to run the bundled build scripts.

Does moviepy Text-on-Video Composer access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is moviepy Text-on-Video Composer safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does moviepy Text-on-Video Composer use?

moviepy Text-on-Video Composer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does moviepy Text-on-Video Composer use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to moviepy Text-on-Video Composer?

Skills that share tags, products or a category with moviepy Text-on-Video Composer: Vox Director (Alisa0808/vox-director, 2.2k stars), Cap Cinematic Demo Generator (CapSoftware/Cap, 23k stars), VideoDB Video Search and Editing (affaan-m/ECC, 276k stars) and Ffmpeg Skill (kajisho5/ffmpeg-skill, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains moviepy Text-on-Video Composer?

digitalsamba (a GitHub organization) maintains it in digitalsamba/claude-code-video-toolkit, which has 2,192 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 5, 2026.

Source: digitalsamba/claude-code-video-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.