Skip to content

ByteDance MediaKit CLI - Setup Guide

Source: volcengine/mediakit-cli via skills.sh - 61.3K combined installs across 5 indexed listings; first seen 2026-10-30 (evening sweep)

GitHub: volcengine/mediakit-cli - 218 stars, MIT License, branch main, last pushed 2026-09-02; 5 SKILL.md files, one per domain directory under skills/, each sitting beside its own reference/ folder and a LICENSE copy, with the Go sources in cmd/ and internal/, plus scripts/, docs/, Makefile and package.json (npm package @volcengine/mediakit-cli, version 0.2.1) at the root

Category: Media processing for agents: video, audio and image editing plus cloud AI enhancement

Quality Tier: 🟡 Yellow - all sampled skills Pass on Gen Agent Trust Hub and Socket and the code is MIT, but two of five carry a Snyk Warn and every cloud call handles an API key

MediaKit CLI is published by Volcengine, ByteDance's cloud platform, as volcengine/mediakit-cli. It is the official command line for MediaKit, and its pitch is a single FFmpeg-compatible command surface: the same command either drives local ffmpeg / ffprobe for trimming, concatenation, subtitle burn-in, mixing and audio extraction, or takes a --cloud flag and runs a capability FFmpeg cannot do, such as quality enhancement, subtitle erasure, speech to subtitle, OCR or storyline analysis. The repository ships 5 AI Agent skills, one per domain plus a shared router, and the README says 100+ audio and video atomic capabilities are planned.

The skills are generated by the CLI rather than hand-authored alongside it, which shapes how they should be read. Each SKILL.md is thin frontmatter plus a tool table: requires: bins: [mediakit-cli], a cliHelp string, a domain and a capability_count, then one row per tool pointing at a file in reference/. The authoritative parameter contract lives in the CLI, reached with --schema, so the markdown indexes capabilities while the binary defines them. Every domain skill also opens with the rule that ../byted-mediakit-shared/SKILL.md must be read first, which makes the five directories a set rather than five independent installs.

Installation

The README's one-click route installs the CLI and its bundled skills together, and needs Node.js >=18:

npx @volcengine/mediakit-cli install -y

To refresh only the skills that ship with the current CLI version:

npx @volcengine/mediakit-cli install --skills-only -y

Building from source needs Go v1.22 or newer, and the README then installs the skills from the checkout:

git clone https://github.com/volcengine/mediakit-cli.git
cd mediakit-cli
make build          # artifact: .mediakit/build/dev/mediakit-cli
npx -y skills add ./skills -g -y

Then initialize and check the environment:

mediakit-cli init
mediakit-cli doctor
mediakit-cli version

Agents should skip the interactive wizard. The README documents a non-interactive form, with an API key from the Volcengine console:

mediakit-cli init \
  --mode cloud-first \
  --api-key <your-api-key> \
  --yes

Local mode additionally needs ffmpeg 5.1.x and ffprobe on the PATH. The checkout carries 5 skill directories, and the skills add call above installs all 5; local processing needs no API key, cloud processing needs one.

For a Hermes profile, copy the whole skills/ tree rather than one directory, because the relative read of ../byted-mediakit-shared/SKILL.md breaks if the domains are separated:

cp -r skills/byted-mediakit-* ~/.hermes/profiles/corpusiq/skills/mediakit/

What It Provides

Skill Installs Use For
byted-mediakit-audio 12,286 Voice activity detection, audio metadata probing, voice and background separation, and audio transcoding, 4 capabilities, all cloud.
byted-mediakit-video 12,270 Video understanding and enhancement: ASR subtitles, subtitle erasure, quality enhancement, highlight clipping, scene segmentation, OCR, keying and face swap, 30 capabilities.
byted-mediakit-shared 12,260 The entry router: run the shared pre-flight check, choose a domain skill by object and goal, and query async cloud tasks with the query-task protocol.
byted-mediakit-image 12,257 Image resize, compress, crop, watermark, background removal, OCR, face blur, quality scoring and smart crop, 21 capabilities.
byted-mediakit-editing 12,248 FFmpeg-style editing locally or in the cloud: trim, concat, stitch, subtitle burn-in, speed and volume, filters, camera motion, fades, mixing, audio extraction and image to video, 23 capabilities.

No indexed listings fall below the threshold.

The five listings sit within 38 installs of each other, from 12,248 to 12,286, which is what a suite counted once per skill looks like rather than a ranking of five skills.

Why This Matters for Hermes Agents

Video work is the part of an agent workflow that most often leaves the tool loop. A Hermes agent can reason about a clip, but it cannot cut one, burn subtitles into it, or read the words off the screen without either a Python video library or a human with an editor open. MediaKit gives the agent a command surface it already understands, and it splits that surface along the line that actually matters: operations FFmpeg can do are marked local and synchronous, and operations FFmpeg cannot do are marked cloud and asynchronous, with both behind the same flags and the same --schema.

The dual-mode design is the reason this is worth more than a wrapper. The same command with --local costs nothing and touches no network, so a profile can trim, stitch, extract audio and mux without ever handling a credential; add --cloud and the identical parameter names reach enhancement, ASR, subtitle erasure and scene segmentation. An agent that learns the command shape once, from --schema, has the whole matrix, which is exactly the discovery problem --schema was added to solve.

The shared router is also a good example of a skill that does routing rather than work. It holds the selection table from object plus goal to domain, tells the agent to clarify when a request says only "process this video", and keeps the parameter detail in the domain skills. That is a pattern worth copying when a tool has more capabilities than one SKILL.md can hold without burying the routing rules.

The caveats are real. The skill bodies are written in Chinese, the reference folders run to 30 files in the video domain, and only the editing domain supports local execution at all, so a profile that wants local image or audio work will not find it here.

Usage

You say What happens
"Trim this clip to the 3 to 8 second window" The agent runs mediakit-cli --local editing trim-video --video-url ./in.mp4 --start-time 3 --end-time 8; local FFmpeg runs synchronously, needs no API key, and writes into ~/.mediakit/temp.
"Lift the audio track out of this and re-encode it" editing extract-audio produces the track, then audio transcode-audio converts it to the codec the target player wants.
"Get me a transcript file for this interview" The video skill submits video asr-subtitles, gets a task_id back, and follows the shared query-task protocol to wait for the terminal state and the subtitle URL.
"Blur the faces before this goes to the client" video face-blur-video for footage, image face-blur-image for stills, both cloud calls that return a processed file URL.
"This footage is soft, push it to 1080p" mediakit-cli --cloud video enhance-video --video-url <url> --resolution 1080p, then shared query-task --task-id <id> --poll-complete polls until the job finishes.
"Find the best minute of this and cut it out" The agent picks between analyze-video-highlights and the microdrama, minigame or movie highlight generators, then extracts the chosen range in editing.
"Which flags does this tool take?" mediakit-cli video enhance-video --schema returns input_schema, output_schema, the mode and the async metadata without spending a call.

Verification

Both raw paths below returned 200 on branch main when this guide was written on 2026-10-30:

curl -sL -o /dev/null -w "%{http_code} audio\n" \
  https://raw.githubusercontent.com/volcengine/mediakit-cli/main/skills/byted-mediakit-audio/SKILL.md
curl -sL -o /dev/null -w "%{http_code} shared\n" \
  https://raw.githubusercontent.com/volcengine/mediakit-cli/main/skills/byted-mediakit-shared/SKILL.md

After the install, confirm the CLI and the five skill directories:

mediakit-cli version
mediakit-cli doctor
mediakit-cli --domains
grep -h '^name:' ~/.hermes/profiles/corpusiq/skills/mediakit/*/SKILL.md

A good install reports a version, passes doctor for local dependencies, lists its capability domains (editing, audio, image, video and the shared task query), and prints the five name: values: byted-mediakit-audio, byted-mediakit-editing, byted-mediakit-image, byted-mediakit-shared and byted-mediakit-video. The shared directory must be present, because every domain skill stops and asks for a reinstall when it cannot read the shared skill.

Security

skills.sh verdicts for sampled skills (verified 2026-10-30) - two of the five carry a Snyk Warn, which is the verdict that matters here: this suite sends media to a third-party cloud and handles a long-lived API key, so the warn sits on the upload path and on credential handling rather than on the markdown.

Skill Gen Agent Trust Hub Socket Snyk
byted-mediakit-audio Pass Pass Warn
byted-mediakit-video Pass Pass Warn
byted-mediakit-shared Pass Pass Pass
byted-mediakit-image Pass Pass Pass
byted-mediakit-editing Pass Pass Pass

Read the Warn as a prompt to check rather than a defect report. A Snyk warn on an agent skill usually means something in the declared surface looked risky to a static scan, and here the plausible triggers are structural: every skill declares permissions: [shell], every cloud call carries MEDIAKIT_API_KEY, and the CLI's media input adapter uploads whatever path or URL it is given to Volcengine. Nothing in the two warned files is unusual by itself, and neither file executes anything on its own, but the pair of them covers the two capabilities that touch your assets.

Three behaviours are worth pinning down before you point this at client footage. First, media leaves the machine on every --cloud call: the shared skill states plainly that the agent passes a local path or URL straight to the tool and the CLI's upload adapter handles the rest, so --local is the only mode where a file stays local, and local only exists for the editing domain. Second, the key can be at rest: mediakit-cli init --credential-store config writes it into the CLI config, while export MEDIAKIT_API_KEY=... keeps it in the process environment, which is the safer choice for an agent host. Third, cloud usage is billed against a Volcengine account under the Video Cloud Services terms, the Intelligent Processing Service billing rules and its SLA, so an agent in a retry loop spends money.

Integration with CorpusIQ

CorpusIQ is the connector layer that lets AI assistants read the systems a business already runs on - accounting, payments, CRM, email, files and analytics - and answer with the source named. It is read-only by design: it retrieves data and never writes to, or acts in, a connected system, which is what makes it safe to point at live accounts.

This page is part of the CorpusIQ directory, the reference we maintain for the MCP server and agent-skill ecosystem. Run alongside CorpusIQ, a third-party server like this one can be combined with a company's own business data in a single answer.

See what CorpusIQ connects

Limitations

  • Snapshot data, verified 2026-10-30: 61,321 combined installs across 5 indexed listings; 218 GitHub stars; MIT License; last pushed 2026-09-02. Counts drift over time.
  • The five SKILL.md files, descriptions included, are written in Chinese. A Hermes agent will follow them, but the description: text a harness routes on is Chinese too, and reviewing what the agent was told means reading translated instructions.
  • Local mode is editing only. The README's feature table puts all 4 audio, 21 image and 30 video capabilities in the cloud column, so anything outside editing needs a key, a network path to Volcengine and a billable call.
  • The suite is thin on disk but not in scope. reference/ runs to 30 files in the video domain and 23 in editing, and the CLI is the real contract: a reference read offline can lag the installed binary, so --schema is the only safe source for flags.
  • Cloud calls are asynchronous and paid. A task_id has to be polled to a terminal state, and an agent that retries a failed job with a fresh submit pays twice for the same failure.
  • Licensing has one loose end: LICENSE is MIT, copyright Beijing Volcano Engine Technology Ltd, while Open Source Notice.txt still describes the product as Apache 2.0 in its boilerplate. ffmpeg and ffprobe are invoked as external tools under LGPL and are not bundled.

Skills Catalog | Skills Marketplace

Pro Tips

  • Install all five directories side by side. The shared skill is not optional: each domain skill's first rule is to read ../byted-mediakit-shared/SKILL.md, and it halts and asks for a reinstall when that file is missing.
  • Inject MEDIAKIT_SURFACE=skill and MEDIAKIT_RUNTIME=<host> on every real call, exactly as the shared skill instructs, and leave them off --help and --schema. The CLI treats them as provenance, not as flags.
  • Reach for --local first on editing jobs. Trimming, stitching, muxing and audio extraction cost nothing and never upload, and the same command upgrades to --cloud if a filter or transition needs it.
  • Read --schema before constructing arguments. It returns the mode, the async metadata and the full input and output schemas for the capability, which is cheaper and more current than reading a reference/ file.
  • Pass local paths as they are, with no mediakit:// prefix. The skill says the media adapter handles upload itself, and a hand-built prefix is the failure mode that kills an otherwise correct call.
  • Keep the key in MEDIAKIT_API_KEY rather than in the config file when an agent is the caller, so a copied profile directory does not carry a live credential.

← Skills Catalog | Skills Marketplace → Powered by CorpusIQ

AI answers on your data. See where every number comes from.

Connect your tools and ask in ChatGPT, Claude, or Perplexity. Enterprise-grade answers in minutes. From $29.95/month.

Start free, no credit card
Contact Terms Privacy Pricing