Repository navigation
Add the cloudinary-video skill - #23
Merged
Merged
Conversation
Covers building video experiences on the Cloudinary Video Player — adaptive streaming, chapters, captions, transcripts, hotspots and AI analysis — plus migrating media in from Brightcove, Vimeo, YouTube and Wistia. The skill ships with the claim tests it was built against. They assert the load-bearing factual claims (transformation behaviour, async output shapes, player distribution, source-platform limits) against live endpoints, so a claim going stale fails loudly rather than misleading an agent. The default mode needs no credentials; --cloud additionally provisions a cloud and needs media fixtures via MEDIA_DIR, which are too large to vendor here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
ed-cld
reviewed
Sep 24, 2026
…tion - Move the skill to skills/platform/cloudinary-video and list it under Platform in the README. - Split out the platform-migration content (getting originals off other platforms, mining an existing site, source-platforms.md) for a separate asset-migration skill; keep two short tips for media from other platforms. - Follow the repo conventions: version 1.0.0, a "Reference for... Use when..." description, When to Use, Quick Start rules, Additional Resources with tracked doc links, and Related Skills. Move upload and preparation detail to references/upload-and-prepare.md to keep SKILL.md under 500 lines. - Correct claims that the docs, the player 4.1.0 source, or live requests contradict: first-request behaviour (streams with the wrong duration; 423 only for async derivations), sourceTypes and breakpoints per source() call, maxDpr, autoplayMode, eager with f_auto, thresholds aligned with the field guidance, audio-only sources, lazy posters, seek thumbnails on loops, and warming with a browser User-Agent. - Trim player.md to traps and link the API reference, drop internal references, and replace em dashes. - Move the claim tests to tests/cloudinary-video, run them against the public demo cloud, and note the tests/ convention in CONTRIBUTING.md.
- Switching one player between progressive and ABR: the breakpoint resize
stays in the player's transformation, so breakpoints: false alone still
returns 400. Recommend separate players, and give the reset that works
(player.transformation({}) plus breakpoints: false), verified in a browser.
- Player facts from the 4.1.0 source: preload defaults to metadata, lazy
resolves to a placeholder until loadPlayer(), controls() is a wrapper
method, which bundles construct synchronously, and colors.text must contrast
with colors.base.
- Captions and tracks: translations need only a language, audio description
goes in a descriptions track, and Studio transcripts can be uploaded only
for translations.
- Delivery: use f_auto:video in the native fallback (matching
cloudinary-transformations), the combined f_auto,q_auto can encode
differently, e_preview fails on very short sources, eager isn't supported
with Optimize by default, and auto_video_details isn't supported by the
SDKs or the MCP.
- Remove undocumented internal endpoints, the unverified quota numbers, the
"how much is verified" section, and demo-specific wording; reconcile the
React guidance with cloudinary-react; make Phase headings H2.
- Make the warming loop stop on real errors and report a timeout, and test
that both f_auto forms are accepted rather than byte-identical.
- controls defaults to false in player 4.1.0, so a click-to-watch player shows no play button or control bar. Say to set controls: true (or the controls attribute) in SKILL.md B3 and player.md. - A type="video/mp4" hint on an f_auto:video source is fine: Chrome plays the WebM it is served. Remove the warning from the native <video> fallback. - Say "different players" for the ABR plus progressive page shape.
- Add the transcription entry points for existing assets (explicit method, Video Player Studio, the player, MediaFlows), the named progressive and ABR use cases, the "how will you measure impact" discovery question, and that generated transcripts can be edited in Studio before viewers see them. - Say which mobile players send analytics by default (iOS and Android), and describe mobile breakpoints only as undocumented. - Note that Optimize by default is enabled through support and is ignored when a URL has a format parameter or named transformation, and that q_auto supports H.264, H.265, and VP9 only.
konforti
commented
Oct 21, 2026
konforti
left a comment
Contributor
Author
There was a problem hiding this comment.
LGTM - approved! (GitHub won't let me approve my own PR :))
ed-cld
approved these changes
Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
cloudinary-videoto the collection as a platform skill, alongsidecloudinary-docsandcloudinary-transformations.What it covers
Building video experiences on the Cloudinary Video Player: choosing adaptive or progressive delivery per source, configuring the player and its saved settings, captions, chapters, transcripts, hotspots, and AI analysis. It covers the video-specific decisions that
cloudinary-transformationsandcloudinary-docsleave open, and points to them for everything else.Layout follows the existing skills:
SKILL.md(When to Use, Quick Start rules, Additional Resources, Related Skills) plus areferences/directory it links into. Version1.0.0; doc links carryinstall_sourceandreferrer=video-skill.Changes from the first version
Based on the review comments on this PR and the Oct 7 skills-pack discussion:
skills/platform/cloudinary-video/and listed under Platform in the README.asset-migrationuse-case skill (Add a draft asset-migration skill #25). Two short tips remain here.player.mdtrimmed to the traps, with a link to the API reference for every option.player.transformation({}); verified in a browser);maxDpr,preload,lazy,autoplayMode, eager withf_autoand with Optimize by default, translated captions, and audio-description tracks;The claim tests
The tests moved out of the skill directory to
tests/cloudinary-video/, so they no longer ship to users who install the skill (noted in CONTRIBUTING.md). They assert the skill's load-bearing claims against live endpoints, now on Cloudinary's publicdemocloud:./tests/cloudinary-video/skill-claims.sh # no credentials needed21 checks pass; the chapters and translated-transcript paths are skipped unless
FEATURE_CLOUDandFEATURE_IDpoint at a cloud that has them.--cloudprovisions a fresh cloud to assert the upload and add-on claims, using any JPEG and speech MP4 set inTEST_IMAGEandTEST_VIDEO.Useful links
Provenance
Developed by @konforti in CloudinaryLtd/cloudinary-video-skill, where the demo site it was built and validated against also lives. Revised by @ed-cld for the review above.
🤖 Generated with Claude Code