agentsclimarketplace

Ozor video library

Skill Mintii-Labs/ozor-skills/skills/ozor-video-library

Install
npx -y skills add Mintii-Labs/ozor-skills --skill ozor-video-library

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Browse, inspect, re-export, embed, or iterate on videos that already exist in the user's Ozor.ai account. Use this skill whenever the user wants to work with past or in-progress Ozor videos rather than create a new one — e.g. 'list my Ozor videos', 'show my recent videos', 'what's the status of my last video', 'get the embed code for that video', 'download my last Ozor video', 'share link for the explainer I made', 'check on the export', 'send a follow-up edit to that video', 'show the plan for video X', 'render that video again at 9:16', 'is the job done yet'. This skill orchestrates list_videos, get_video, get_job, get_plan, update_plan, send_message, wait_for_job, export_video, wait_for_export, and get_embed_code. Do NOT use this skill to create a new video from scratch — use ozor-generate, ozor-document-video, or ozor-url-to-video.

SKILL.md

7.4 KB, as published. Nobody here has run it

Ozor Video Library

Manage existing Ozor.ai videos via the MCP: list, inspect, re-export, embed, or send follow-up edits to the video agent. This skill is the "everything except creating from scratch" surface for mcp__ozor__*.

When to use

Use this skill when the user wants to operate on videos that already exist in their Ozor account. Signals:

  • "List / show my videos"
  • "What's the status of ..."
  • "Get the share link / download / embed for ..."
  • "Re-export that video at 9:16"
  • "Send a follow-up edit: change scene 2 to ..."
  • "Show me the plan for that video"
  • "Is the job done yet" / "check on the export"

Do NOT use this skill when:

  • Creating a new video from text → ozor-generate
  • Creating from a document/file → ozor-document-video
  • Creating from a URL → ozor-url-to-video

Required MCP tools

TaskTool
List recent videosmcp__ozor__list_videos
Get one video's detailsmcp__ozor__get_video
Check a build job statusmcp__ozor__get_job
Block until a job finishesmcp__ozor__wait_for_job
Fetch the plan a video was built frommcp__ozor__get_plan
Edit a planmcp__ozor__update_plan
Trigger a (new) exportmcp__ozor__export_video
Block until export readymcp__ozor__wait_for_export
Get <iframe> for embeddingmcp__ozor__get_embed_code
Send a follow-up edit message to the agentmcp__ozor__send_message
List available voicesmcp__ozor__list_voices

If the MCP isn't connected, tell the user and stop.

Common workflows

A. List recent videos

mcp__ozor__list_videos({ limit?: 10 })

Present as a table:

| # | Title | Status | Format | Updated | videoId |
|---|-------|--------|--------|---------|---------|
| 1 | ...   | exported | 16:9 | 2h ago | abc...  |

Offer 2–3 obvious next actions: "Want share links for any of these? An embed code? Re-export one as 9:16?"

B. Get details for a specific video

If the user names a video or gives an ID:

mcp__ozor__get_video({ videoId })

Surface: title, current status (draft / building / exported / failed), format, duration, last update, and any URLs that exist (share, editor, download).

C. "What's the status of my last video?"

  1. list_videos({ limit: 1 }) to find the most recent.
  2. If status is building, also call get_job (or wait_for_job if the user wants to block until it's done) to get progress.
  3. If status is exported, show the URLs.

D. Get the embed code

mcp__ozor__get_embed_code({ videoId })

If the video hasn't been exported yet, run the export first (workflow F below).

E. Get the share / download URL

If the video is already exported, get_video returns the URLs. If not:

mcp__ozor__export_video({ videoId })
mcp__ozor__wait_for_export({ videoId })

F. Re-export (e.g. user wants a fresh render after edits, or the URL expired)

mcp__ozor__export_video({ videoId })
mcp__ozor__wait_for_export({ videoId })   // -> fresh shareUrl, editorUrl, downloadUrl
mcp__ozor__get_embed_code({ videoId })    // -> fresh iframe

G. Re-render at a different format (e.g. landscape → vertical)

Format changes go through the plan:

  1. mcp__ozor__get_plan({ videoId }) — fetch the current plan
  2. mcp__ozor__update_plan({ planId, format: "9:16" }) — apply the change
  3. mcp__ozor__generate_from_plan({ planId }) is on the create-from-plan path — if the user wants the same project updated, prefer send_message instead (workflow H). If they want a new project at the new format, fall through to generate_from_plan, then export.

Note: generate_from_plan lives in ozor-document-video / ozor-url-to-video because it creates a fresh project. Tell the user when you're about to spin up a new project rather than mutating the existing one.

H. Send a follow-up edit to the agent

For copy/visual/scene tweaks on an existing video without starting over:

mcp__ozor__send_message({
  videoId,
  message: "<the user's edit, e.g. 'In scene 2, change the headline to X and make the background lighter'>"
})

This typically returns a new jobId. Then:

mcp__ozor__wait_for_job({ videoId, jobId })
mcp__ozor__export_video({ videoId })
mcp__ozor__wait_for_export({ videoId })

Surface the fresh URLs afterwards.

I. Inspect / edit a plan

mcp__ozor__get_plan({ videoId | planId })

Render the scenes as a numbered list to the user. If they want changes:

mcp__ozor__update_plan({ planId, ... })

Then re-fetch to confirm. Plan edits alone don't change the rendered video — they have to be followed by a regeneration (send_message for in-place, generate_from_plan for a new project) and an export.

J. List voices

When the user is choosing or swapping a voice:

mcp__ozor__list_voices()

Present a compact list (name, language, style). If swapping, update_plan({ planId, voice: "<voice id>" }) then regenerate.

Disambiguating "that video" / "my last video"

If the user says "that video" or "my last one" without an ID:

  1. list_videos({ limit: 5 }).
  2. If exactly one matches the description, use it.
  3. If multiple plausible matches, show the short list and ask which.

Don't silently pick a random video.

Presenting URLs

Always present available URLs labeled:

**Share:** <shareUrl>
**Editor:** <editorUrl>
**Download:** <downloadUrl>
**Embed:** (in a code block)

If a URL doesn't exist yet (e.g. video never exported), don't fabricate one — tell the user what's missing and offer to run the export.

Errors and recovery

  • videoId not found → list recent videos and ask which one they meant.
  • Job failed → relay the failure message verbatim; offer send_message with a fix or a re-export.
  • Export failed → retry once; if it fails again, surface the error and recommend opening the editor URL to inspect.
  • Plan / video out of sync (plan edited but not regenerated) → tell the user the changes are staged but not rendered, and offer to regenerate.

Rules

  1. Never invent video IDs, share URLs, or status. Everything comes from the MCP.
  2. For in-place edits, prefer send_message over creating a new project via generate_from_plan. The user almost always wants the existing video updated, not a duplicate.
  3. Re-exports are cheap and safe — if the user wants fresh URLs, just rerun export.
  4. When the user is vague about which video, ask — show a short list, don't guess.
  5. Surface every URL after every regeneration or re-export. Stale URLs from earlier in the conversation may have expired.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.