A collection of portable agent skills for working with the Bitmovin platform and video development in general.
This repo is intentionally not tied to Claude Code only:
- Each skill lives under
skills/<skill-name>/SKILL.mdas portable markdown .claude-plugin/provides Claude Code plugin wrappersplugins/<skill-name>/.codex-plugin/plugin.jsonprovides Codex plugin wrappers- The canonical
skills/layout is compatible withskills.sh - The same skill files can also be installed directly into ChatGPT/Codex-style local skills directories
| Skill | Status | What it covers |
|---|---|---|
bitmovin |
Available | Hub skill — routes to all Bitmovin products and walks through MCP/CLI/SDK setup. Hosted at bitmovin.com/skill. |
bitmovin-player-web |
Available | Bitmovin Web Player SDK — Player v8 (stable) and Player Web X / PWX (next-gen) |
bitmovin-player-android |
Available | Bitmovin Android Player SDK integration and troubleshooting |
bitmovin-encoding-vod |
Available | VOD encoding with the Bitmovin Encoding API (H.264 per-title, fixed ladder, AV1 UGC, hardware-accelerated sports clips) via the Encoding Templates API |
bitmovin-encoding-live |
Available | Live encoding with the Bitmovin Encoding API (RTMP, redundant RTMP, SRT) via the Encoding Templates API |
bitmovin-observability |
Planned | Bitmovin Analytics and observability tooling |
video-development |
Planned | General video development guidance (codecs, packaging, DRM, streaming protocols) not specific to Bitmovin |
The sections below describe install paths shared by all skills in this repo. Skill-specific details live inside each skill's directory.
For the hub bitmovin skill — the one-prompt entry point that introduces every Bitmovin product and walks through MCP/CLI/SDK setup — run:
npx @bitmovin/skillsThe wizard detects which AI tool you're using (Claude Code, Cursor, Windsurf, GitHub Copilot, OpenAI Codex, …) and installs the skill into the right location. Pass --target <name> to skip the prompt or --list-targets to see the full list. Source: bin/cli.js.
The wizard fetches the canonical skill content from https://bitmovin.com/skill so updates to the hosted skill propagate to existing installs without republishing the package.
# Add the Bitmovin marketplace
/plugin marketplace add bitmovin/skills
# Install a plugin (one per skill)
/plugin install bitmovin-player-web@bitmovinAfter install, the skill loads in every Claude Code session automatically. No further config.
Verify with "What skills do you have access to?" — the installed skill should appear.
If your ChatGPT/Codex setup supports local skills, copy the skill into your Codex home:
mkdir -p ~/.codex/skills/bitmovin-player-web
cp skills/bitmovin-player-web/SKILL.md ~/.codex/skills/bitmovin-player-web/SKILL.mdRepeat for any other skill in skills/ you want available.
This repository is compatible with skills.sh because each skill lives under skills/<skill-name>/SKILL.md, which is one of the repository layouts that npx skills discovers automatically.
Examples:
# List the skills exposed by this repo
npx skills add bitmovin/skills --list
# Install just one skill interactively
npx skills add bitmovin/skills --skill bitmovin-player-web
# Install to specific agents
npx skills add bitmovin/skills --skill bitmovin-player-web -a claude-code -a codex
# Install globally without prompts
npx skills add bitmovin/skills --skill bitmovin-player-web -g -yUse skills.sh when you want the portable skill installed into an agent's normal skill directory. Use the Claude or Codex plugin wrappers in this repo only when you specifically want those host-native plugin surfaces.
This repo includes Codex plugin wrappers under plugins/<skill-name>/ plus repo-local marketplace metadata at .agents/plugins/marketplace.json.
For a home-local Codex plugin install, copy the plugin and marketplace entry into the standard Codex locations:
mkdir -p ~/.agents/plugins ~/plugins
cp -R plugins/bitmovin-player-web ~/plugins/bitmovin-player-web
cp .agents/plugins/marketplace.json ~/.agents/plugins/marketplace.jsonIf you already have ~/.agents/plugins/marketplace.json, merge in the new entries instead of overwriting the file.
A local Codex marketplace entry looks like:
{
"name": "bitmovin-player-web",
"source": {
"source": "local",
"path": "./plugins/bitmovin-player-web"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Coding"
}A Cloudflare Worker under worker/ serves the hub skill at bitmovin.com/skill with content negotiation:
- Browsers (
Accept: text/html) get a landing page with thenpx @bitmovin/skillsinstall command. - AI agents and
curl/wgetget raw markdown. bitmovin.com/skill.mdalways returns markdown.
See worker/README.md for deploy steps. The Worker bundles skills/bitmovin/SKILL.md at deploy time, so updating the hosted skill requires wrangler deploy.
skills/<skill-name>/: the portable skill content (one directory per skill, withSKILL.mdplus any scripts / templates / examples it ships).claude-plugin/marketplace.json: Claude marketplace metadata (lists every skill exposed as a Claude plugin).claude-plugin/plugin.json: Claude Code plugin metadata for the legacy root-as-plugin layout (bitmovin-player-web)plugins/<skill-name>/.claude-plugin/plugin.json: Claude Code plugin metadata (per-plugin layout used by newer skills)plugins/<skill-name>/.codex-plugin/plugin.json: Codex plugin metadata (one per skill)plugins/<skill-name>/skills/<skill-name>/: symlink back toskills/<skill-name>/(for skills that ship onlySKILL.mdit can be a per-file symlink instead —bitmovin-player-webuses that variant).agents/plugins/marketplace.json: Codex marketplace metadataworker/: Cloudflare Worker that serves the hub skill atbitmovin.com/skillbin/,src/:@bitmovin/skillsnpx wizard sources
When you ask an agent to add video playback with Bitmovin, the skill:
- Defaults to Player v8 and only asks about PWX when the choice materially changes implementation
- Uses current UI guidance — default UI v4 for modern v8 setups, explicit/custom UI paths when needed
- Writes correct code — right npm package, right import paths, right API calls
- Covers DRM, ads, analytics, subtitles, network customization
- Uses framework patterns for React, Next.js (SSR-safe), and Vue
- Warns about common mistakes and links to authoritative docs
LLMs have stale or confused Bitmovin Player Web knowledge. Common failures without this skill:
- Wrong npm package (
@bitmovin/player— doesn't exist, it'sbitmovin-player) - Assuming manual
UIFactorywiring is required on every modern v8 integration - Using stale UI v3/v4 wiring or the wrong asset-loading path
- No SSR guard on Next.js imports → crash
- Outdated doc URLs (
/playback/docs/*instead of/playback/reference/*) - Mixing v8 and PWX APIs in the same code
Player v8 (stable): Installation, license keys, current default UI v4 guidance for modern releases, explicit/custom UI patterns, source config (HLS/DASH/Smooth/progressive), subtitles, thumbnails, poster, DRM (Widevine/PlayReady/FairPlay), ads (VAST/VMAP), analytics, network customization (preprocessHttpRequest + sendHttpRequest), React/Next.js/Vue patterns, modular builds, test streams, and full API references.
Player Web X / PWX (next-gen): Native PWX API (Player({key, defaultContainer}) + player.sources.add()), CDN bundles (hls, dash, core, bitmovin-v8 compat), v8 compatibility layer for drop-in migration, custom packages system, and dated notes about current feature gaps from the official support matrix.
When you ask an agent to start a Bitmovin live encoding, the skill:
- Drives the Encoding Templates API — a single
POST /encoding/templates/startcreates inputs, codec configs, encoding, streams, muxings, manifests, and starts the live encoding from one YAML document - Ships three Jinja templates — single RTMP, redundant RTMP (HA ingest), and SRT (LISTENER / CALLER, optional AES passphrase)
- Walks the user one question at a time — encoding name, cloud region, output (reuse or create), output base path, manifests, ladder, audio bitrate, segment length, encoder version, auto-shutdown timeouts
- Validates the rendered template against Bitmovin's published Encoding Template JSON schema before submitting (the API otherwise accepts mistyped fields silently and the encoding gets stuck in
CREATED) - Polls until
RUNNINGand prints the ingest URL, manifest URLs, and dashboard URL - Keeps secrets out of params, state, and logs — credentials are read from environment variables only
CMAF output (fmp4 muxings serving DASH and HLS, manifestGenerator: V2); RTMP / RTMPS / SRT ingest; AWS / GCP / Azure cloud regions; S3 / GCS outputs (reuse or create); per-encoding stream key (RTMP) or host:port (SRT); ACL choices (PUBLIC_READ / PRIVATE / NONE); auto-shutdown on stream loss / no bytes read; STABLE vs BETA encoder.
When you ask an agent to run a Bitmovin VOD encoding, the skill:
- Drives the Encoding Templates API — a single
POST /encoding/templates/startcreates inputs, codec configs, encoding, streams, muxings, manifests, and starts the encoding from one YAML document - Ships four Jinja templates — H.264 per-title (algorithm-picked ladder, THREE_PASS), H.264 fixed ladder (you specify renditions), AV1 per-title for UGC (progressive MP4 per rendition, no manifest), and an H.264 sports-clips template using NVIDIA hardware acceleration (
VOD_HARDWARE_SHORTFORMpreset, hardcoded 9-rendition sports ladder, HLS-only, pinned toAWS_EU_WEST_1) - Walks the user one question at a time — encoding name, input (reuse or create HTTPS), output (reuse or create), output base path, manifests, ladder, audio bitrate, segment length, encoder version, encoding mode
- Validates the rendered template against Bitmovin's published Encoding Template JSON schema before submitting
- Polls until
FINISHEDand prints manifest URLs and the dashboard URL - Refuses to materialize credentialed inputs — only HTTP/HTTPS inputs are created from the skill; S3 / GCS / Azure inputs MUST be reused via an existing input id, so credentials never enter the params or template
H.264 (per-title and fixed-ladder, SINGLE_PASS / TWO_PASS / THREE_PASS) and AV1 per-title; CMAF fmp4 (DASH + HLS) for the H.264 templates; progressive MP4 for AV1 UGC; HLS-only with explicit per-rendition manifest config for the sports-clips hardware template; HTTP / HTTPS / S3 / GCS / Azure inputs (creation only for HTTP/HTTPS); S3 / GCS outputs (reuse or create); ACL choices (PUBLIC_READ / PRIVATE / NONE) with scenario-aware defaults.
Skill files are plain markdown and can be reused in any agent environment that supports local skills, such as Cursor, Copilot, Codex, Goose, Gemini CLI, and Cline. The host-specific wrappers in this repo are .claude-plugin/ for Claude Code and plugins/<skill-name>/.codex-plugin/ for Codex.
The source of truth for each skill is skills/<skill-name>/ (with SKILL.md at the top plus any scripts, templates, and examples the skill ships). Keep it portable across hosts. If you change packaged plugin behavior or published metadata, keep the wrappers in sync:
.claude-plugin/plugin.json(legacy root-as-plugin layout, used bybitmovin-player-web).claude-plugin/marketplace.jsonplugins/<skill-name>/.claude-plugin/plugin.json(per-plugin layout, used by newer skills)plugins/<skill-name>/.codex-plugin/plugin.jsonplugins/<skill-name>/skills/<skill-name>/(symlink back toskills/<skill-name>/— directory symlink for skills that ship scripts/templates/examples; per-file symlink works forSKILL.md-only skills).agents/plugins/marketplace.json
The plugin skill path is intentionally a symlink back into skills/<skill-name>/ so the repo only has one canonical skill payload per skill.
Keep instructions concrete: code examples for every claim, primary-source links, and explicit "common mistakes" sections.
MIT