ozor-url-to-video — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ozor-url-to-video (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
End-to-end web-page-to-video on Ozor.ai. Hand Ozor a URL, get a plan back that reflects the actual page content (headlines, value props, social proof, CTA), approve or edit, and ship a finished video.
Use this skill when the input is a URL. Signals:
Do NOT use this skill when:
ozor-generateozor-document-videoozor-landing-page-to-video (prompt-only skill)ozor-video-librarymcp__ozor__analyze_document — accepts a url parameter directly; no upload neededmcp__ozor__get_plan / mcp__ozor__update_plan — review/edit the plan before generationmcp__ozor__generate_from_plan — kicks off the build, returns projectIdmcp__ozor__wait_for_job — if the response includes a jobIdmcp__ozor__export_video, mcp__ozor__wait_for_exportmcp__ozor__get_embed_codeIf the MCP isn't connected, tell the user and stop. Do not browse the URL yourself and hand-write a prompt — Ozor extracts brand colors, hero imagery, and structure directly from the page. Your scraped text would lose that.
mcp__ozor__analyze_document({
url: "<the URL>",
...optional hints: targetDuration, format, audience, tone, focus
})For URLs:
format: "9:16" or "16:9" (ask if not obvious — vertical is great for social, landscape for embedding on the site itself), targetDuration: "30s"–"45s", tone "confident".format: "16:9", targetDuration: "60s"–"90s", tone "informative".format: "16:9", targetDuration: "30s"–"45s", tone "energetic", focus "one scene per shipped feature".format: "16:9", targetDuration: "60s", tone "clear, technical", focus "explain what this feature does and how to use it".Returns { planId, plan }.
Render the plan to the user concisely:
📋 Ozor plan for <URL>
**Source:** <page title or domain>
**Format:** 16:9 / 9:16
**Estimated duration:** ~X seconds
**Detected brand:** <colors / product name if Ozor surfaced them>
**Scenes:** N
(1) <scene title> — <one-line direction>
(2) <scene title> — <one-line direction>
...
Approve as-is, or change anything? You can edit scenes, swap format, change tone, or shift focus.Wait for approval. Don't call generate_from_plan yet.
Use mcp__ozor__update_plan({ planId, ... }). Re-show the plan with get_plan. Loop until approved.
mcp__ozor__generate_from_plan({ planId }) // -> { projectId, jobId? }If a jobId comes back, mcp__ozor__wait_for_job({ videoId: projectId, jobId }).
mcp__ozor__export_video({ videoId: projectId })
mcp__ozor__wait_for_export({ videoId: projectId }) // -> shareUrl, editorUrl, downloadUrlmcp__ozor__get_embed_code({ videoId: projectId })🎬 Video ready from <URL>
**Share:** <shareUrl>
**Editor:** <editorUrl>
**Download:** <downloadUrl>
**Embed (drop this on your site):**<iframe ...></iframe>
Want a vertical 9:16 cut for social, or a longer 90s explainer version? I can regenerate from the same plan.If the user didn't say:
9:1616:916:9When ambiguous, propose 16:9 as default and offer a 9:16 rerun at the end.
Mention these only after the user has the first video — don't preemptively generate them:
update_plan({ planId, format: "9:16" }).audience hint.ozor-generate.update_plan with corrected colors before generating.update_plan, retry.wait_for_export again; it resumes.generate_video — that throws away Ozor's brand and visual extraction.generate_from_plan. The plan is where format and tone get locked in.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.