Media logo

Media

Organization
dcc-mcp
media

Infrastructure skill - DCC-agnostic media probing, transcoding, thumbnails, frame extraction, and image-sequence-to-MP4 conversion through installed FFmpeg. Use when agents need to preflight, inspect, or share media outputs. Not for arbitrary shell or vx execution - use typed media tools only.

Overview

Publisherdcc-mcp
Repositorydcc-mcp-core
Skill namemedia
Stars
74
Forks
7
Bundled files
15
LicenseMIT
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.

  • 15 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by dcc-mcp on GitHub. Read the source before you install it.

Installation

Install the Media 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/dcc-mcp/dcc-mcp-core/tree/main/python/dcc_mcp_core/skills/media
  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/dcc-mcp/dcc-mcp-core.git /tmp/dcc-mcp-core
mkdir -p .claude/skills
cp -r /tmp/dcc-mcp-core/python/dcc_mcp_core/skills/media .claude/skills/media
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Media 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 Media 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 Media 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.

Media

DCC-agnostic media utilities for render, playblast, flipbook, and review artifacts. FFmpeg and matching FFprobe are external, operator-approved prerequisites, not bundled with Core. Every media tool uses only installed binaries; none installs vx, downloads FFmpeg, or invokes a launcher that might bootstrap dependencies. A missing runtime is an actionable preflight failure.

Use media__check_runtime before expensive render/export work. Prefer native DCC skills for creating the render output, then use media__probe, media__sequence_to_mp4, media__thumbnail, media__transcode, media__transcode_audio, or media__extract_frames to inspect or repackage files already on disk. Discover the capability, follow the returned load or describe step, and call the returned tool slug with typed arguments. Do not guess gateway slugs or replace the tool with arbitrary shell commands.

Safety Contract

This skill intentionally exposes typed media operations, not a generic vx <command> runner. Every tool builds a fixed argument vector for the resolved FFmpeg or FFprobe executable without shell=True, validates paths and enum fields, rejects option-like paths, and requires explicit overwrite intent before replacing outputs. Verified audio-only output is stricter: its destination must be fresh and cannot be overwritten.

Runtime selection and preparation

FFmpeg selection follows this priority:

  1. DCC_MCP_MEDIA_FFMPEG_BIN, if set to an absolute executable path.
  2. An already-installed FFmpeg in the local vx store (VX_HOME, or ~/.vx by default), discovered from local files without executing vx.
  3. ffmpeg on the server process's system PATH if there is no installed vx runtime.

The vx lookup checks the vx 0.9.37 provider layouts under <vx-root>/store/ffmpeg/<version>, with at most 128 entries and the highest numeric stable version first. It does not require a vx launcher, consult vx.toml or vx.lock, or select preview/custom version names. Pin a version or use an unsupported layout through explicit executable overrides instead.

DCC_MCP_MEDIA_FFPROBE_BIN may specify the matching probe's absolute executable path. Otherwise, resolve FFprobe only as a sibling of the resolved FFmpeg binary, never from an unrelated PATH entry. FFmpeg and FFprobe must have matching release/build identities. An invalid explicit override fails; it is not permission to switch installations or silently choose another codec. Override values are executable paths, not command names, shell fragments, or arguments. Only native ELF, PE, or Mach-O executables are accepted; scripts and known vx shim directories are rejected. Native wrappers cannot be identified reliably from file headers. Spaces in paths are supported. Configure these variables in the media server's environment, not only the agent's shell.

DCC_MCP_MEDIA_VX_BIN and DCC_MCP_MEDIA_AUTO_INSTALL_VX no longer control media execution. Migrate an old pinned vx launcher to the FFmpeg/FFprobe executable overrides. VX_INSTALL_DIR is not a media runtime selector, and no installer configuration enables media-tool downloads.

Before an approved online setup, ask the user for permission to install or download dependencies. Use an existing vx installation with vx install ffmpeg@8.1, or the operating system's package manager, to obtain FFmpeg and FFprobe together. If vx needs installation, download its official installer to a local file, inspect it, and execute it only after approval; never pipe an installer directly into a shell. Prepare approved binaries and required shared libraries before an offline workload. Core's MIT license does not replace FFmpeg's build-dependent LGPL/GPL license; review the selected distribution's terms before redistribution.

Use absolute paths where possible. Relative paths are resolved by the process running the DCC-MCP server, which may not be the same working directory as the agent. Runtime overrides always require absolute paths.

Read-only runtime preflight

Discover and call media__check_runtime before scheduling media work. Its optional required_encoders array defaults to pcm_s16le, libvorbis, and pcm_f32le; request the encoders needed for the intended workflow. timeout_secs is bounded to 60 seconds. This check creates no media output and performs no installation. The resolver itself starts no package manager or network request; preflight executes the selected local binaries for version and capability checks, so they remain operator-trusted code rather than a sandboxed guarantee against arbitrary binary behavior.

Review the selected source, resolved absolute executable paths, versions, SHA-256 hashes, and required encoder availability. Keep this evidence with the job, and stop on missing binaries, build mismatches, or missing capabilities. Selection priority is not a trust attestation: a local vx installation or system path is an operator-trusted prerequisite, and a hash only identifies the executable bytes. Preflight does not replace native codec, output, or playback qualification. A later operation resolves and validates its own runtime; an earlier successful check is not a guarantee that files or the environment have remained unchanged.

Verified audio-only encoding

Use media__transcode_audio for a fresh .wav/pcm_s16le or .ogg/libvorbis output. Container and codec are explicit; incompatible pairs are rejected before launch. Optional audio_quality is Vorbis-only (-1 to 10, default 5). No resampling, channel conversion, overwrite, padding, trimming, or codec fallback is exposed. The first audio stream is selected explicitly; video, subtitle, data and inherited metadata are excluded. Source sample rate and channel count are preserved, and a known source channel layout must match.

OGG output uses fixed -page_duration 1 muxer pagination to keep the priming packet off the final EOS page. This avoids the documented FFmpeg single-page Vorbis duration-accounting issue without padding, trimming, resampling, or changing compressed audio packets. See the upstream diagnosis. More pages add container overhead; the full-decode sample-count gate is still mandatory, including for very short clips. This is not a codec fallback.

This operation uses the same already installed FFmpeg/FFprobe selection policy as preflight; it does not install anything. The selected executables are operator-trusted prerequisites, not a supply-chain attestation. The tool pins their resolved absolute paths and records each executable's version, SHA-256 and resolution basis. Hashes identify the bytes used; neither a hash nor the discovery source independently authenticates those bytes. Requested encoder and pcm_f32le verification-encoder capabilities are checked before encoding; a missing encoder fails without silently choosing another build.

Input is limited to 128 MiB, 8–192 kHz and 1–8 channels. Full f32le PCM decode is streamed, never saved, with a 256 MiB cap for each source/output decode. Text stdout has a 1 MiB cap; stderr has a 4 MiB total cap and retains only a 4 KiB diagnostic tail. Crossing a stream cap stops the owned process. Output uses FFmpeg's -fs limit, owner-thread size monitoring, and a strict 64 MiB pre-publication acceptance gate. FFmpeg can slightly overshoot -fs; this is not an OS disk quota. Limits and the shared operation timeout appear in receipts. Hashing also checks cancellation, time and byte budgets.

Encoding writes only to a private staging directory beside the destination. The final pathname is published through an atomic no-replace hard link only after complete validation. Filesystems without that operation fail closed; there is no copy/replace fallback. Failed operations retain diagnostic staging artifacts, never publish them or retry automatically. Successful publication is the commit point; a late cancellation does not retract a published file.

Receipts bind source/output hashes, actual codec/container/rate/channels, full-decode sample-frame counts and PCM hashes, resolved executable evidence, exact argv, Core-owned job identity when present, and cleanup state. Counts come from decoder PCM (including its codec-delay/skip handling), not container duration or packet count. A count change is a failure, never repaired. Lossy waveform quality, independent decoder/loop-boundary checks and browser playback remain separate qualification; matching counts alone do not prove quality. Lossy Vorbis can change very short signals substantially: preserving one sample is not a promise to reproduce that sample's amplitude. Do not waive fidelity requirements, pad/trim samples, or treat count acceptance as a quality score.

The existing Core async job lifecycle supplies job identity and cancellation. The owner thread checks check_dcc_cancelled() at most 50 ms between process polls, and during hashing and before publication. Cancellation and timeout stop the owned group and retain the original reason/receipt. Poll the Core job to terminal state; admission is not artifact acceptance. POSIX processes run in owned groups. Windows uses taskkill /T /F and launcher reaping; failure or an already-exited launcher leaves cleanup unknown. Windows live cancellation, real Core transport cancellation and native codec qualification remain separate from host-free/POSIX subprocess tests. Cleanup has a separate bounded grace period; an uncertain cleanup never grants permission to retry.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Media AI skill do?

Infrastructure skill - DCC-agnostic media probing, transcoding, thumbnails, frame extraction, and image-sequence-to-MP4 conversion through installed FFmpeg. Use when agents need to preflight, inspect, or share media outputs. Not for arbitrary shell or vx execution - use typed media tools only.

Why use Media on TypingMind?

Because you install it once and use it with any model. Media 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 Media in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/dcc-mcp/dcc-mcp-core/tree/main/python/dcc_mcp_core/skills/media. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Media?

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 Media?

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

Is the Media AI skill free?

Yes. It is published on GitHub by dcc-mcp under the MIT license. 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 👇