gstreamer-docs
Provides direct access to GStreamer API docs, element properties, and pipeline verification tools.
Install
mkdir -p .claude/skills/gstreamer-docs && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12256" && unzip -o skill.zip -d .claude/skills/gstreamer-docs && rm skill.zipInstalls to .claude/skills/gstreamer-docs
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Search and fetch official GStreamer documentation from gstreamer.freedesktop.org: application-development, tutorials, plugin-development, tools (gst-launch-1.0, gst-inspect-1.0, gst-device-monitor-1.0, gst-discoverer-1.0, gst-play-1.0, gst-typefind-1.0), libraries (core gstreamer, base, video, audio, rtp, webrtc, sdp, pbutils, app, coreelements, coretracers, libav). Use when the user asks to look up a GStreamer element, find an element's properties or pads, check caps negotiation rules, search GStreamer docs, verify a gst-launch pipeline, look up the gstreamer webrtcbin or hlssink API, or verify a GStreamer call against the real docs.Key capabilities
- →Search for GStreamer elements, properties, or signals.
- →Read full documentation for a specific GStreamer element.
- →Fetch a specific section of documentation by anchor.
- →Retrieve an entire documentation page.
- →Verify an element name, property, pad, or signal exists.
- →Prime the cache for offline use of GStreamer documentation.
How it works
The skill searches and retrieves official GStreamer documentation from gstreamer.freedesktop.org based on user queries for elements, properties, sections, or full pages.
Inputs & outputs
When to use gstreamer-docs
- →Find element properties
- →Verify gst-launch pipeline syntax
- →Lookup GStreamer plugin docs
About this skill
GStreamer Docs
Context: $ARGUMENTS
Quick start
- Find an element / property / signal: -> Step 2 (
search --query <term>) - Read the full docs for one element: -> Step 3 (
element --name <name>) - Read one section by anchor: -> Step 4 (
section --page <page> --id <anchor>) - Grab a whole page: -> Step 5 (
fetch --page <name>) - Prime cache for offline use: -> Step 6 (
index)
When to use
- User asks "what does element
Xdo?" or "what properties doeswebrtcbinexpose?" - Need to verify an element name, property, pad, or signal exists before recommending it.
- Need the canonical gstreamer.freedesktop.org URL to cite in a response.
- Before writing any non-trivial gst-launch-1.0 pipeline, verify the element and its caps/properties.
- Need to know which plugin package an element ships in.
Step 1 — Know the page catalog
The script targets a fixed list of plugin-index pages + top-level guides. Get the list:
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py list-pages
Common picks:
| Question | Page |
|---|---|
| "What does filesrc / queue / tee / capsfilter do?" | coreelements |
| "How do I use playbin3 / decodebin3 / uridecodebin3?" | playback |
| "RTSP client / server elements?" | rtsp, rtspserver |
| "HLS / DASH muxing / sinks?" | hls, dash |
| "WebRTC — webrtcbin (C) vs webrtcsink (Rust)?" | webrtc, rswebrtc |
| "SRT source / sink?" | srt |
| "x264enc / x265enc / VP9 options?" | x264, x265, vpx |
| "NVENC / NVDEC in GStreamer?" | nvcodec |
| "MP4 / QuickTime mux / demux?" | isomp4 |
| "Matroska / WebM mux?" | matroska |
| "V4L2 webcam?" | v4l2 |
| "OpenGL elements?" | opengl |
| "gst-launch-1.0 syntax rules?" | gst-launch |
| "gst-inspect-1.0 output fields?" | gst-inspect |
| "Core GObject API / GstElement / GstPad / GstCaps?" | gstreamer |
| "Base classes for writing elements (GstBaseSrc etc.)?" | base |
Read references/pages.md for the full catalog.
Step 2 — Search first (this is the default)
When the user names an element, property, pad, or signal, search across all pages:
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py search --query "webrtcbin" --limit 5
Scope to a page when you know it (faster, less noise):
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py search --query "animation-mode" --page videotestsrc
Output per hit:
--- <page>:<line> — <nearest heading>
<canonical URL with anchor>
<snippet with ±3 lines of context>
--format json for machine-parseable output; --regex for anchored patterns.
Step 3 — Read one element's docs
When you know the element name (e.g. filesrc, playbin3, webrtcbin):
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py element --name filesrc
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py element --name webrtcbin --format json
The script resolves element pages automatically across the two URL shapes GStreamer uses:
- Multi-element plugin:
/<plugin>/<element>.html(e.g./coreelements/filesrc.html,/playback/playbin3.html,/rtsp/rtspsrc.html,/hls/hlssink2.html,/srt/srtsrc.html,/rswebrtc/webrtcsink.html). - Singleton plugin:
/<element>/index.html(e.g./videotestsrc/index.html,/audiotestsrc/index.html,/webrtclib/index.html,/x264/index.html).
You can also debug which shape was picked:
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py resolve --element webrtcbin
Step 4 — Read one section
When a search hit shows an anchor like [§videotestsrc:animation-mode] and you want the whole block:
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py section --page videotestsrc --id "videotestsrc:animation-mode"
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py section --element webrtcbin --id ice-agent
--id accepts a raw anchor id or a heading keyword (case-insensitive substring match on the first matching heading).
Step 5 — Fetch a whole page
Rare — usually overkill. When you need it:
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py fetch --page coreelements
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py fetch --element playbin3 --format json
Step 6 — Prime cache (optional)
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py index
Downloads every known landing page into ~/.cache/gstreamer-docs/ with a 0.3s delay.
Override the cache directory with export GSTREAMER_DOCS_CACHE=/path/to/dir.
Clear: gstdocs.py clear-cache.
Gotchas
- Bare
/<element>.htmlis universally 404. Elements live under a plugin dir —/coreelements/filesrc.html, not/filesrc.html. Theelementsubcommand handles this for you; never construct the URL yourself. - Two element-page shapes exist. Multi-element plugin:
/<plugin>/<element>.html. Singleton plugin:/<element>/index.html.resolve --elementtells you which shape was picked. - Anchor syntax is Hotdoc-specific. You'll see three flavours inside page text:
#<element>(the element landing block),#<element>:<property>with a literal colon (e.g.#videotestsrc:animation-mode), and#Gst<CamelCase>!<pad>(e.g.#GstVideoTestSrc!srcfor thesrcpad). Pass the form you see in search output verbatim tosection --id. - webrtcbin vs webrtcsink are distinct.
webrtcbinis the low-level C element in pluginwebrtc— you handle SDP + ICE yourself.webrtcsink/webrtcsrcare the high-level Rust elements in pluginrswebrtcthat speak WHIP/WHEP and negotiate automatically. Don't mix their properties. - playbin vs playbin3.
playbinis the legacy high-level player.playbin3is the current one — different signals, different bus messages, different stream-selection API. Check which one you're actually using. - decodebin3 / urisourcebin stream-selection is different from decodebin/uridecodebin. Events are
GST_EVENT_SELECT_STREAMS+GST_MESSAGE_STREAM_COLLECTIONrather than the oldautoplug-*signals. Don't port old code verbatim. gst-inspect-1.0 <element>is authoritative for local builds. If the online docs don't match what your installed GStreamer exposes, the CLI is right — some plugins are rolled from different upstreams (gst-plugins-good vs bad vs ugly vs rs) and versions diverge.- Docs are Hotdoc-generated, NOT Sphinx. Don't assume Sphinx conventions like
:py:class:or_CPPv4N...— GStreamer anchors are flatter (element,element:property,GstType!pad). - Plugin packages: good/bad/ugly/base/rs. "bad" means "not yet up to par", NOT "buggy". Many widely-used elements (
webrtcbin,hlssink2,srtsink) live ingst-plugins-badorgst-plugins-rs. Ifgst-inspect-1.0 foocomes up empty, you probably haven't installed the plugin-set it ships in. - Rust plugins (
gst-plugins-rs) ship separately.webrtcsink,awstranscriber,fallbackswitch, etc. are Rust — checkrswebrtcand related index pages, not the C plugin pages. - Search may miss content in complex tables. The text extractor flattens multi-column property tables. If a search hit looks incomplete, open the canonical URL printed in the hit header.
- Cache never expires automatically. After a GStreamer release reshuffles plugins, run
clear-cache+index. - The script is stdlib-only — no pip install. Works anywhere Python 3.9+ runs.
Examples
Example 1 — "What properties does webrtcbin expose?"
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py element --name webrtcbin
Or search + jump:
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py search --query "webrtcbin" --page webrtc --limit 5
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py section --element webrtcbin --id "webrtcbin:stun-server"
Example 2 — "Does hlssink2 support fMP4 / CMAF?"
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py search --query "hlssink2" --page hls
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py element --name hlssink2
Example 3 — "What's the gst-launch-1.0 syntax for named elements and caps filters?"
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py search --query "pipeline description" --page gst-launch
Example 4 — "What does videotestsrc animation-mode=frames actually do?"
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py section --page videotestsrc --id "videotestsrc:animation-mode"
Example 5 — "Which plugin provides rtspclientsink?"
uv run ${CLAUDE_SKILL_DIR}/scripts/gstdocs.py resolve --element rtspclientsink
(Prints URL + shape. URL's first path segment is the plugin.)
Troubleshooting
Error: unknown page: foo
Cause: The name isn't in the catalog.
Solution: Run list-pages. Common mistakes: using elements instead of coreelements; rtspsrc (an element) instead of rtsp (the plugin).
Error: could not resolve element <name>
Cause: The element isn't in ELEMENT_HINTS, the singleton-plugin guess failed, and no known plugin landing page linked to it.
Solution: Run gst-inspect-1.0 <name> to confirm the element exists and see its plugin. Then search --query "<name>" across the whole catalog to find the right plugin page. If it's a Rust plugin not in our list yet, the element lives at /<plugin>/<name>.html under gst-plugins-rs — fetch the URL directly with urllib until the catalog is updated.
Error: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]
Cause: System certificate store is out of date (usually macOS Python).
Solution: Run /Applications/Python\ 3.x/Install\ Certificates.command, or set SSL_CERT_FILE to a valid CA bundle. Do NOT disable SSL verification.
Search returns zero hits
Cause: The term isn't on the pages you queried.
Solution: Drop --page to search everything; try a broader query. Some APIs are in the base-class pages (base, gstreamer) rather than the element page.
Anchor not found with section --id
Cause: Hotdoc anchors in
Content truncated.
When not to use it
- →When the query is not related to GStreamer documentation.
- →When the user wants to write a GStreamer pipeline without verification.
- →When the information needed is not available on gstreamer.freedesktop.org.
Limitations
- →Documentation is sourced only from gstreamer.freedesktop.org.
- →Does not support bare /<element>.html URLs.
- →Anchor syntax is Hotdoc-specific.
How it compares
This skill provides direct access and verification against official GStreamer documentation, handling URL structures and element resolution, unlike a generic web search.
Compared to similar skills
gstreamer-docs side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| gstreamer-docs (this skill) | 0 | 3mo | Review | Intermediate |
| protocolsio-integration | 1 | 2mo | Review | Intermediate |
| openapi-spec-generation | 22 | 2mo | No flags | Intermediate |
| frontend-to-backend-requirements | 8 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
protocolsio-integration
K-Dense-AI
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
openapi-spec-generation
wshobson
Generate and maintain OpenAPI 3.1 specifications from code, design-first specs, and validation patterns. Use when creating API documentation, generating SDKs, or ensuring API contract compliance.
frontend-to-backend-requirements
davila7
Document frontend data needs for backend developers. Use when frontend needs to communicate API requirements to backend, or user says 'backend requirements', 'what data do I need', 'API requirements', or is describing data needs for a UI.
microsoft-code-reference
github
Look up Microsoft API references, find working code samples, and verify SDK code is correct. Use when working with Azure SDKs, .NET libraries, or Microsoft APIs—to find the right method, check parameters, get working examples, or troubleshoot errors. Catches hallucinated methods, wrong signatures, and deprecated patterns by querying official docs.
openai-knowledge
openai
Use when working with the OpenAI API (Responses API) or OpenAI platform features (tools, streaming, Realtime API, auth, models, rate limits, MCP) and you need authoritative, up-to-date documentation (schemas, examples, limits, edge cases). Prefer the OpenAI Developer Documentation MCP server tools when available; otherwise guide the user to enable `openaiDeveloperDocs`.
api-documentation-generator
davila7
Generate comprehensive, developer-friendly API documentation from code, including endpoints, parameters, examples, and best practices