Agent skill

Venice Video

by veniceai in veniceai/skills

Generate videos via Venice. An agent skill from veniceai/skills.

MITAuto-check passedMedia & Creative

Install Venice Video

skills CLI
$ npx skills add veniceai/skills --skill venice-video -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install veniceai/skills venice-video --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/veniceai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/venice-video .claude/skills/venice-video && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
venice-video
GitHub stars
144
Token cost
~6.3k tokens
SKILL.md length
2,440 words
Files
1
Skills in repo
22
Repo updated
First seen
Licence
MIT

At a glance

Generate videos via Venice. An agent skill from veniceai/skills.

  • Works in 4 steps: Price with /video/quote → Submit with /video/queue → Poll with /video/retrieve → …
  • Tasks that involve AI video generation
  • SKILL.md covers Use when, Pick a model first, Lifecycle — generation and /video/queue request fields, plus 5 more sections
  • Calls curl; reaches api.venice.ai; needs VENICE_API_KEY

What it does

Venice Video is an agent skill from veniceai/skills. Generate videos via Venice. Covers the async /video/quote + /video/queue + /video/retrieve + /video/complete loop, text-to-video, image-to-video, first/last-frame transitions, video-to-video and upscale, audio input, reference images / videos / audio (R2V) and their per-model caps, Kling elements and scene images, Seedance source-matched edit/extend and omnireferencetasktype, H3 Max Multi-Angle cameratrajectory, and replayed async failures. POST /video/transcriptions is retired (410) — use chat completions with…

Its SKILL.md is about 6.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Media & Creative, covering AI video generation. It works with Seedance and x402. The repository describes itself as: Agent Skills for the Venice.ai API. One folder per surface area, each with a SKILL.md for agent runtimes (Cursor, Claude, Codex, etc.). The licence is MIT.

When your agent uses it

  • Tasks that involve AI video generation

Example prompts

  • “/venice-video”

Requirements

  • A credential in VENICE_API_KEY

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Price with /video/quote
  2. Submit with /video/queue
  3. Poll with /video/retrieve
  4. Clean up with /video/complete

What it can do on your machine

Read from SKILL.md and the folder at commit 5eaeac5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.venice.ai

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • VENICE_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Venice Video loads about 6.3k tokens when it runs. Until then it costs about 136 tokens; SKILL.md has 2,440 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~136
When it runs · the whole SKILL.md, loaded when a task matches
~6.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from veniceai/skills at commit 5eaeac5, republished under its MIT licence (© veniceai). 2,440 words, ~6,277 tokens.

Download SKILL.mdSave it as .claude/skills/venice-video/SKILL.md (or your agent's skills folder).
name
venice-video
description
Generate videos via Venice. Covers the async /video/quote + /video/queue + /video/retrieve + /video/complete loop, text-to-video, image-to-video, first/last-frame transitions, video-to-video and upscale, audio input, reference images / videos / audio (R2V) and their per-model caps, Kling elements and scene images, Seedance source-matched edit/extend and omni_reference_task_type, H3 Max Multi-Angle camera_trajectory, and replayed async failures. POST /video/transcriptions is retired (410) — use chat completions with video_url.

Venice Video

Video is asynchronous — like audio music. Four live endpoints plus one retired one:

EndpointPurpose
POST /video/quotePrice in USD (no charge, no job). No API key needed, except for upscale models.
POST /video/queueValidate, charge, and enqueue. Returns queue_id immediately.
POST /video/retrievePoll status, download video/mp4, or receive the job's failure.
POST /video/completeCleanup of the finished media. Currently rejects queue_ids from /video/queue, so use delete_media_on_completion on retrieve instead (see step 4).
POST /video/transcriptionsRetired — always returns 410. See below.

/video/queue, /video/retrieve, and /video/complete accept a Bearer API key or an x402 SIGN-IN-WITH-X wallet header (see venice-x402).

Use when

  • You need text-to-video, image-to-video, first/last-frame transitions, reference-to-video (R2V), video-to-video, video upscale, or video-with-audio.
  • You can tolerate async execution (seconds to several minutes depending on model, duration, and queue depth — /video/retrieve returns average_execution_time and execution_duration for a live estimate).
  • You want to price a job precisely before committing (/video/quote).

Not for: understanding or summarizing an existing video — use venice-chat with a video_url content part.

Pick a model first

Every field below is model-specific. Read the model's constraints from GET /models?type=video (see venice-models) before building a request:

  • constraints.model_type — text-to-video, image-to-video (includes R2V and transition models), or video (video-to-video, motion control, upscale).
  • constraints.durations, aspect_ratios, resolutions — the exact accepted strings (case-sensitive: MiniMax H3 Max uses 480P / 768P / 1080P, MiniMax H3 uses 768P / 2K).
  • constraints.audio_configurable — only then may you send audio.
  • constraints.audio_input — only then may you send audio_url.
  • constraints.prompt_character_limit — present when the model sets its own limit; otherwise the limit is 2500 characters.

The request schema is strict per model: a field the model does not support is a 400 (e.g. "This model does not support aspect_ratio"), not silently ignored.

Lifecycle — generation

1. Price with /video/quote
bash
curl https://api.venice.ai/api/v1/video/quote \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-2.6-text-to-video",
    "duration": "5s",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "audio": true
  }'

Response: {"quote": 0.55} (USD).

  • Required: model, and duration for models with fixed durations.
  • resolution and aspect_ratio fall back to the model default when omitted.
  • The quote endpoint discards fields a model doesn't use (e.g. audio on a model with audio_configurable: false, aspect_ratio on a model with no aspect_ratios, unknown keys) — /video/queue rejects them. A successful quote does not prove the queue body is valid.
  • Upscale models (topaz-video-upscale): quote requires a Bearer API key (403 without one, so x402 wallets can't quote them — queue directly and rely on the 402 balance check) and video_url — Venice fetches the file to detect duration, FPS, and height (400 if it can't read it). duration is ignored. Pass upscale_factor (1 / 2 / 4) to price the factor you will queue; resolution: "1x" / "2x" / "4x" is a deprecated alias.
  • Video-to-video models (e.g. wan-2-7-video-to-video): video_url is required; duration is detected from the file.
  • R2V models with reference-video support (Seedance 2.x, MiniMax H3 / H3 Max, Wan 3.0 R2V, …): pass reference_video_total_duration (aggregate seconds of all reference videos, capped at the model's aggregate limit — e.g. 15 for Seedance 2.0 / H3 / Wan 3.0, 30 for Seedance 2.5; over the cap is 400). Reference video is billed, so omitting it returns the no-reference price, which under-quotes. reference_image_count (≤ the model's reference-image cap, else 400) prices models billed per input image; omitted, one image is billed.
2. Submit with /video/queue
bash
curl https://api.venice.ai/api/v1/video/queue \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-2.6-text-to-video",
    "prompt": "Commerce being conducted in the city of Venice, Italy.",
    "negative_prompt": "low resolution, worst quality, defects",
    "duration": "5s",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "audio": true
  }'

Response: { "model": "...", "queue_id": "uuid" }, plus download_url for VPS-backed models.

  • Validation and the balance check happen before the 200; API-key callers are also charged then (x402 wallet callers are charged once the job is accepted). Content screening and the provider submit run after the response, so those failures are reported on /video/retrieve, not here. Failures are normally refunded (credits_refunded in the error body reports the outcome where present), with one exception: the Runway models (runway-gen4-5, runway-gen4-5-text, runway-gen4-turbo) keep the charge when the provider rejects the request on content policy (credits_refunded: false).
  • download_url is returned for VPS-backed models — currently every Grok Imagine video model, including the *-private ids and grok-imagine-1-5-lite-text-to-video / grok-imagine-1-5-lite-image-to-video. Decide by whether the queue response contains download_url, not by the model id. When it does, /video/retrieve returns JSON status only; GET the download_url (no auth header) once status is COMPLETED. Valid up to 24 h.
3. Poll with /video/retrieve
bash
curl https://api.venice.ai/api/v1/video/retrieve \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"wan-2.6-text-to-video","queue_id":"...","delete_media_on_completion":false}' \
  --output out.mp4

Body: model + queue_id (both required), optional delete_media_on_completion (default false). No other keys are accepted.

  • Processing: 200 JSON {"status":"PROCESSING","average_execution_time":145000,"execution_duration":53200} (ms; average_execution_time is a P80 estimate).
  • Completed (most models): 200 binary video/mp4 body.
  • Completed (VPS-backed): 200 JSON {"status":"COMPLETED", ...} — fetch the download_url from the queue response.
  • Failed: a non-200 JSON error (see Errors). Terminal failures (submit failures, content-policy rejections, provider-side failures, expired media) are recorded on the job, so re-polling the same queue_id returns the same error. A 429 is transient — back off and poll again.
  • delete_media_on_completion: true requests deletion of the stored output once it has been returned, replacing the separate /video/complete call.
  • queue_ids are scoped to the key's user and expire after 24 h; unknown or expired ids return 400 "Request ID is invalid.".
4. Clean up with /video/complete
bash
curl https://api.venice.ai/api/v1/video/complete \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"...","queue_id":"..."}'

Body: model + queue_id only. Response: 200 {"success": true}, or {"success": false} if the delete did not go through. Currently it returns 400 "Request ID is invalid." for queue_ids issued by /video/queue, so don't rely on it: clean up by polling with delete_media_on_completion: true.

/video/queue request fields

FieldTypeNotes
modelstringRequired.
promptstringRequired (≥ 1 non-whitespace char) except for upscale models and minimax-h3-max-multi-angle. Max length per model: 2500 default; constraints.prompt_character_limit otherwise (from 1000 for Runway up to 20000 for Wan 3.0).
negative_promptstringSame max length as prompt. Ignored by models without negative-prompt support.
durationstringRequired, from constraints.durations (values span 1s–30s). Upscale and video-to-video models: omit it (server detects the source length) or send seconds as a string such as "12.5" (≤ 300) — the literal "Auto" is rejected. seedance-2-5-reference-to-video-basic also accepts "-1" / "auto" (match the source clip).
aspect_ratiostringRequired when the model lists aspect_ratios; rejected when the list is empty (image-driven models take the ratio from the input). The Seedance 2.0 R2V -basic models (standard / fast / mini) and seedance-2-5-reference-to-video-basic also accept adaptive / auto (match the source clip).
resolutionstringFrom constraints.resolutions; defaults to the model default. Rejected when the model lists no resolutions, and on upscale models — use upscale_factor.
upscale_factorinteger 1 / 2 / 4Upscale models only. 1 = enhancement only. Defaults to the model default (2 for topaz-video-upscale).
audioboolOnly when audio_configurable: true; default true.
image_urlURL or data: URLStart frame for image-to-video. Rejected on text-to-video models.
end_image_urlURL or data: URLEnd frame, on models that support one (otherwise 400). Required for transition models (pixverse-c1-transition, pixverse-v5.6-transition, flux-3-first-last-frame-to-video).
audio_urlURL or data: URLModels with audio_input: true. WAV / MP3; generally ≤ 30 s and ≤ 15 MB. On Seedance 2.x R2V and MiniMax H3 R2V it is treated as one more reference audio (same per-clip limits).
video_urlURL or data: URLRequired for upscale and video-to-video models. MP4, MOV, WebM and other common containers.
reference_image_urls[]URLsR2V character / style references. Cap per model (4 if unspecified) — see limits.
reference_video_urls[]URLsR2V motion / camera / style donors (.mp4 / .mov). Also the source clip for Seedance edit / extend.
reference_audio_urls[]URLsVoice, narration, or SFX donors (.wav / .mp3). On Seedance, reference them in the prompt as <Audio 1>, <Audio 2>. Must be paired with at least one image or video reference — audio-only is 400.
reference_document_urls[]URLs, ≤ 1wan-3-0-reference-to-video only: a document (pdf, docx, pptx, xlsx, txt, md, …; ≤ 100 MB) or public webpage.
elements[]array, ≤ 4Kling O3 R2V models and kling-v3-4k-reference-to-video (which also requires image_url). Each element needs frontal_image_url (plus up to 3 reference_image_urls) or a video_url. Reference in the prompt as @Element1, @Element2.
scene_image_urls[]URLs, ≤ 4Same models as elements: scene / style refs; reference as @Image1, @Image2.
camera_trajectory[]array, 2–12minimax-h3-max-multi-angle only — see recipe.
omni_reference_task_typeauto / reference / edit / extendseedance-2-5-reference-to-video-basic only (editing / extension accepted as aliases). edit / extend require reference_video_urls. Omitted with reference_video_urls present, Venice infers it from the prompt.
bitrate_modestandard / highSeedance 2.0 / 2.5 models (not 1.5). Default standard; does not change the price.
image_references[]{image_url, type?: subject|background, ref_name?}Typed references (e.g. pixverse-c1-reference-to-video); reference as @ref_name.
video_references[]{video_url, ref_name?, audio_url?}Models with per_reference_audio: true (e.g. wan-2-7-reference-to-video): reference clips with optional per-entity voice.
voice_idstringgrok-imagine-1-5-reference-to-video-private: a preset Grok voice id (e.g. eve; an invalid id's 400 lists the allowed values); uploaded audio is not supported.
consentsobjectSeedance face-consent attestation — see Gotchas. Not used by any model that /models lists.
anon_user_idstring, ≤ 128Optional end-user identifier (printable ASCII, no ||).

Every media URL must be a data: URL or an http(s):// URL on a public host — private, loopback, link-local, and cloud-metadata addresses are rejected with 400. bitrate_mode, image_references, video_references, voice_id, and anon_user_id are accepted but not listed in the published OpenAPI schema.

Show full SKILL.md (1,043 more words)Show less
Reference media limits

The limits differ per model. Current caps for common R2V families (as of 2026-09-30):

Model familyRef imagesRef videos (per clip / total)Ref audios (per clip / total)
seedance-2-0-*-reference-to-video-basic (incl. fast / mini)93 (2–15 s, ≤ 50 MB / 15 s)3 (2–15 s, ≤ 15 MB / 15 s)
seedance-2-5-reference-to-video-basic3010 (2–30 s, ≤ 50 MB / 30 s)10 (2–30 s, ≤ 15 MB / 30 s)
seedance-2-5-us-reference-to-video-private3010 (2–30 s, ≤ 200 MB / 30 s)10 (2–30 s, ≤ 15 MB / 30 s)
wan-3-0-*reference-to-video105 (1–15 s, ≤ 100 MB / 15 s)5 (1–15 s, ≤ 15 MB / 15 s)
minimax-h3-reference-to-video, minimax-h3-max-reference-to-video93 (2–15 s, ≤ 50 MB / 15 s)3 (2–15 s, ≤ 15 MB / 15 s; audio_url counts toward the 3)
minimax-h3-enhanced-reference-to-video9—3 (as above)
kling-o3-{standard,pro}-reference-to-video, kling-v3-4k-reference-to-video4——
kling-o3-4k-reference-to-video, pixverse-c1-reference-to-video, grok-imagine-reference-to-video-private, grok-imagine-1-5-reference-to-video-private7——
gemini-omni-flash-1-1-reference-to-video10——
gemini-omni-flash-reference-to-video3——

Over-limit arrays are 400. When a model lists constraints.reference_image_min_aspect_ratio / reference_image_max_aspect_ratio (0.4 and 2.5 on Seedance and MiniMax H3), images outside that width/height ratio are rejected; images below reference_image_min_short_side_pixels are upscaled automatically.

Common recipes

Text → video with audio
json
{
  "model": "wan-2.6-text-to-video",
  "prompt": "A golden retriever chasing a frisbee in slow motion at sunset.",
  "duration": "10s",
  "aspect_ratio": "16:9",
  "resolution": "1080p",
  "audio": true
}
Image → video
json
{
  "model": "wan-2.6-image-to-video",
  "prompt": "Camera slowly zooms out, revealing the cityscape.",
  "image_url": "https://example.com/cityscape.jpg",
  "duration": "5s",
  "resolution": "720p"
}

No aspect_ratio: this model's aspect_ratios list is empty, so the ratio follows the image and sending one is 400.

Video upscale
json
{
  "model": "topaz-video-upscale",
  "video_url": "https://example.com/input.mp4",
  "upscale_factor": 2
}

No prompt or duration needed (duration is detected from the file); resolution is rejected. The source may be up to 300 s long.

Multi-element consistency (Kling O3 R2V)
json
{
  "model": "kling-o3-pro-reference-to-video",
  "prompt": "@Element1 walks toward @Element2 against @Image1.",
  "duration": "5s",
  "aspect_ratio": "16:9",
  "elements": [
    { "frontal_image_url": "https://example.com/char1.png", "reference_image_urls": ["https://example.com/alt1.png"] },
    { "frontal_image_url": "https://example.com/char2.png" }
  ],
  "scene_image_urls": ["https://example.com/street-scene.jpg"]
}
Seedance 2.5 edit (match the source clip)
json
{
  "model": "seedance-2-5-reference-to-video-basic",
  "prompt": "Strictly edit <Video 1>: make it snow, keep everything else unchanged.",
  "reference_video_urls": ["https://example.com/source.mp4"],
  "omni_reference_task_type": "edit",
  "duration": "auto",
  "aspect_ratio": "adaptive",
  "resolution": "720p"
}

duration: "auto" / "-1" needs a 4–30 s source clip (otherwise 400). Quote it with the same duration / aspect_ratio plus reference_video_total_duration (required for source-matched quotes, otherwise 400).

H3 Max Multi-Angle (camera orbit)
json
{
  "model": "minimax-h3-max-multi-angle",
  "image_url": "https://example.com/scene.jpg",
  "duration": "5s",
  "resolution": "768P",
  "camera_trajectory": [
    { "time": 0, "azimuth": 0, "elevation": 0, "distance": 1 },
    { "time": 1, "azimuth": 45, "elevation": 10, "distance": 1 }
  ]
}

camera_trajectory: 2–12 keyframes, each with exactly time, azimuth, elevation, distance (extra keys are 400). time is 0–1 and strictly increasing, azimuth is signed degrees (total absolute travel ≤ 32 turns), elevation −90…90, distance > 0 relative to the initial camera (1 = unchanged). Omit it to let the model choose the path. image_url is required, prompt is optional, and the aspect ratio follows the image (sending aspect_ratio is 400).

/video/transcriptions (retired)

POST /video/transcriptions has been removed. Every request — authenticated or not — gets 410 with headers Deprecation: true and Link: </api/v1/chat/completions>; rel="successor-version", </api/v1/models>; rel="describedby", and an error message pointing to the replacement (callers exceeding 60 requests/min per IP get 429 with the same message prefixed by Rate limit exceeded.).

Replacement: to analyze, summarize, or ask questions about a video (including YouTube URLs where the provider supports them), call POST /chat/completions with a {"type":"video_url","video_url":{"url":"..."}} content part on a model whose model_spec.capabilities.supportsVideoInput is true — at most 3 videos per request. See venice-chat. For a verbatim transcript of an audio file, use venice-audio-transcription.

Full polling loop

ts
// Pass download_url from the queue response whenever it is present.
async function waitForVideo(model: string, queueId: string, downloadUrl?: string) {
  while (true) {
    const res = await fetch(`${base}/video/retrieve`, {
      method: 'POST', headers,
      body: JSON.stringify({ model, queue_id: queueId, delete_media_on_completion: true }),
    })
    const ct = res.headers.get('content-type') ?? ''
    if (res.ok && ct.startsWith('video/')) {
      return Buffer.from(await res.arrayBuffer())
    }
    const body = await res.json()
    if (!res.ok) {
      // Job failures are replayed here (e.g. 422 with credits_refunded). 429 / 502 / 503 are transient.
      if ([429, 502, 503].includes(res.status)) { await new Promise(r => setTimeout(r, 15000)); continue }
      throw new Error(`video failed (${res.status}): ${JSON.stringify(body)}`)
    }
    if (body.status === 'COMPLETED' && downloadUrl) {
      const v = await fetch(downloadUrl)
      return Buffer.from(await v.arrayBuffer())
    }
    if (body.status === 'COMPLETED') throw new Error('COMPLETED without download_url: pass download_url from the queue response')
    if (body.status !== 'PROCESSING') throw new Error(`unexpected ${body.status}`)
    await new Promise(r => setTimeout(r, 5000))
  }
}

Errors

CodeMeaning
400Invalid params (unsupported field for this model, bad enum, missing prompt / image_url / video_url, over-limit arrays, blocked or unreadable media URL, corrupted image). On /video/retrieve: "Request ID is invalid." for an unknown or expired queue_id. On /video/complete: the same message currently comes back for every queue_id issued by /video/queue — clean up with delete_media_on_completion: true instead (see step 4).
401Authentication failed.
402Insufficient balance or the API key's spend limit (checked on /video/queue before the charge). A wallet below the $0.10 floor gets the x402 PAYMENT_REQUIRED body and PAYMENT-REQUIRED header; a wallet above the floor but below this job's quote gets the plain {"error":"Insufficient USD or Diem balance…"} body with no header — top up via /x402/top-up and retry.
403Model unavailable in your region, not permitted by the API key's model-privacy setting, or an unauthenticated upscale quote.
404Model not found (any video endpoint). On /video/retrieve: media expired or already deleted.
409/video/queue only, unlisted face-enabled Seedance models: {"error":{"code":"needs_consent",...},"consent_flow":"seedance","face_media_roles":[...],"consent":{"consent_version","policy_text"},"docs_url"}.
410/video/transcriptions (retired).
413Payload too large — shrink or host the media instead of inlining data: URLs.
422Content policy or provider-side failure. Screening runs after the job is accepted, so these normally arrive on /video/retrieve: provider rejection {"error":{"message","type":"provider_content_policy","credits_refunded",...}} (may include recommended_model), or provider-side failure {"error","credits_refunded"} (plus hint when available).
429Rate limit (/video/queue 40 req/min, /video/retrieve 120 req/min, authenticated upscale quotes 40 req/min — per user) or model overloaded.
500Inference or internal failure. A 500 replayed by /video/retrieve is terminal for that queue_id — resubmit (after revising the prompt / media if it may have been blocked).
502/video/retrieve only: the video finished but couldn't be fetched from the provider. Not recorded on the job — back off and poll again.
503Model offline or at capacity — retry later.

See venice-errors for body shapes and retry strategy.

Gotchas

  • The quote validates less than the queue. Quote drops unsupported fields; queue returns 400 for them. Build the queue body from /models constraints, not from a successful quote.
  • aspect_ratio is required on /video/queue whenever the model lists aspect ratios, and forbidden when it lists none.
  • Queue success ≠ generation success. Moderation and provider errors surface on /video/retrieve, with the refund status in credits_refunded where present. Always handle non-200 retrieve responses. Runway content-policy rejections are not refunded.
  • download_url is only returned for VPS-backed models (the Grok Imagine models) — check for the field, not the id. Handle both paths: binary from /video/retrieve, or GET download_url after COMPLETED. It expires within 24 h — download promptly.
  • Upscale models use upscale_factor, never resolution (queue rejects resolution; quote accepts 1x / 2x / 4x only as a deprecated alias).
  • GET /models lists "Auto" as the duration for most upscale and video-to-video models, but /video/queue rejects the literal "Auto" — omit duration instead.
  • Seedance naming: the listed Seedance ids end in -basic (e.g. seedance-2-0-text-to-video-basic), plus the separate seedance-2-5-us-*-private family. Neither uses consents / needs_consent, and media showing identifiable people may be rejected upstream. The face-consent flow (consents.seedance with confirmed_terms_and_privacy, confirmed_legal_right, confirmed_screening_acknowledged all true, resubmitted after a 409) applies only to unlisted Seedance ids that /models does not return.
  • Seedance source-matched values: aspect_ratio: "adaptive" / "auto" works on the -basic Seedance 2.0 / 2.5 R2V models, duration: "-1" / "auto" only on seedance-2-5-reference-to-video-basic. Both require reference_video_urls on queue and reference_video_total_duration on quote. The seedance-2-5-us-*-private models don't support them (adaptive is 400, auto is an ordinary ratio option there). Elsewhere "auto" is also just an ordinary aspect-ratio option (e.g. Flux 3).
  • MiniMax H3 and H3 Max reference-to-video models reject image_url / end_image_url combined with reference media, and count audio_url toward the reference-audio cap.
  • data: URLs count toward payload size; large base64 videos can trip 413 — prefer hosted URLs.
  • Prices are dynamic (resolution, duration, audio, reference media, promotions) — always quote; don't hard-code.

© veniceai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/venice-video of veniceai/skills.

Open the folder on GitHubat commit 5eaeac5

Compare with similar skills

Venice Video next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Venice Video compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Venice Video this skillveniceai/skills144—~6.3kAutomated safety check: PassMIT
Seedance Storyboard Generatorliangdabiao/Seedance2-Storyboard-Generator2.6k—~2.2kAutomated safety check: PassNone
Libtv Videonexu-io/nexu3.3k—~3.5kAutomated safety check: PassMIT
Analyze Videokrusemediallc/arcads-claude-code1.6k—~4.2kAutomated safety check: PassMIT
Imagesmixs/visual-skills494—~2.1kAutomated safety check: PassCC-BY-4.0
Jianying Video Gencclank/lanshu-waytovideo252—~760Automated safety check: PassNone

Similar skills

  • Seedance Storyboard Generator

    liangdabiao/Seedance2-Storyboard-Generator

    专业的Seedance 2.0平台AI视频脚本和分镜生成器。当用户要求:(1) 将文章/故事转换为视频脚本,(2) 生成Seedance 2.0分镜提示词,(3) 规划多集AI视频系列,(4) 为GPT-Image-2、Seedream、Nano Banana…

    2.6k GitHub stars~2.2k tokensUpdated 20 days ago
    Media & CreativeAuto-check passed
  • Libtv Video

    nexu-io/nexu

    Seedance 2.0 video & image generation via LibTV Gateway - AI text-to-video, image-to-video, video continuation, style transfer, and text-to-image using Seedance 2.0 model.

    3.3k GitHub stars~3.5k tokensUpdated 5 mo ago
    Media & CreativeAuto-check passed
  • Analyze Video

    krusemediallc/arcads-claude-code

    Analyze a reference video and reverse-engineer its style into a reusable Seedance 2.0 prompting template.

    1.6k GitHub stars~4.2k tokensUpdated 18 days ago
    Media & CreativeAuto-check passed
  • Image

    smixs/visual-skills

    Image prompting skill for Nano Banana (NBP/NB2) and GPT Image 2.5 (Flare/Sunburst).

    494 GitHub stars~2.1k tokensUpdated 25 days ago
    Media & CreativeAuto-check passed
  • Jianying Video Gen

    cclank/lanshu-waytovideo

    使用剪映(Jianying/小云雀)的 Seedance 2.0 模型自动生成AI视频。支持文生视频(T2V)、图生视频(I2V)、参考视频生成(V2V)和向后延伸(Extend)四种模式。当用户需要生成AI视频、使用Seedance模型创作短片、基于参考图像/视频进行风格转换,或对已有结果继续延长时使用此技能。需要预先配置 cookies.json 登录凭证。

    252 GitHub stars~760 tokensUpdated 6 mo ago
    Media & CreativeAuto-check passed
  • Super Video Maker

    Bomx/super-video-maker-skill

    End-to-end AI video production skill for agentic frameworks.

    310 GitHub stars~11k tokensUpdated 2 mo ago
    Media & CreativeAuto-check: notes

More from veniceai/skills

All 22 skills in this repo
  • Picks which Venice text model to call for a prompt based on privacy tier, input modality, capabilities and cost, and decides when to escalate from a local agent.

    144 GitHub stars~5.2k tokensUpdated 5 days ago
    Auto-check passed
  • Venice Models API

    veniceai/skills

    Documents Venice's model discovery endpoints, GET /models, /models/traits and /models/compatibility_mapping, so an agent can pick a model by capability, constraint or price.

    144 GitHub stars~4.3k tokensUpdated 5 days ago
    Auto-check passed
  • Venice API Keys

    veniceai/skills

    Manages Venice API keys through the /api_keys endpoints: create, list, update and revoke keys, set spending limits, and read rate limits.

    144 GitHub stars~3.8k tokensUpdated 5 days ago
    Auto-check passed
  • Venice API Overview

    veniceai/skills

    High-level map of the Venice.ai API: base URL, auth modes per endpoint, endpoint categories, response headers, pricing model, error shape and versioning.

    144 GitHub stars~3.5k tokensUpdated 5 days ago
    Auto-check passed
  • Venice Audio Music

    veniceai/skills

    Async music, sound-effect and long-form voice generation via Venice.

    144 GitHub stars~3.1k tokensUpdated 5 days ago
    Auto-check passed
  • Venice Audio Speech

    veniceai/skills

    Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices.

    144 GitHub stars~3.6k tokensUpdated 5 days ago
    Auto-check passed

Works with

Questions about Venice Video

What does Venice Video do?

Generate videos via Venice. An agent skill from veniceai/skills. Venice Video is an agent skill from veniceai/skills. Generate videos via Venice.

When should I use Venice Video?

Venice Video fits situations like: tasks that involve AI video generation.

How do I install Venice Video in Claude Code?

Run `npx skills add veniceai/skills --skill venice-video -a claude-code`. Or copy the skill folder (skills/venice-video in veniceai/skills) into .claude/skills/venice-video in your project. Claude Code loads it when a task matches its description.

How do I install Venice Video in Codex?

Run `npx skills add veniceai/skills --skill venice-video -a codex`. Or copy the skill folder (skills/venice-video in veniceai/skills) into .agents/skills/venice-video in your project. Codex loads it when a task matches its description.

Can I use Venice Video in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add veniceai/skills --skill venice-video -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/venice-video, .gemini/skills/venice-video, .github/skills/venice-video and .opencode/skills/venice-video in your project.

What does Venice Video need to run?

Going by SKILL.md and its folder, Venice Video needs the command-line tools its instructions call (curl) and credentials named VENICE_API_KEY. Our summary lists: A credential in VENICE_API_KEY.

Does Venice Video access the network?

SKILL.md names 1 domain. In commands or code: api.venice.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Venice Video safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Venice Video use?

Venice Video is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Venice Video use?

About 6.3k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Venice Video?

Skills that share tags, products or a category with Venice Video: Seedance Storyboard Generator (liangdabiao/Seedance2-Storyboard-Generator, 2.6k stars), Libtv Video (nexu-io/nexu, 3.3k stars), Analyze Video (krusemediallc/arcads-claude-code, 1.6k stars) and Image (smixs/visual-skills, 494 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Venice Video?

veniceai (a GitHub organization) maintains it in veniceai/skills, which has 144 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 5, 2026.

Source: veniceai/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.