modelflaredev commited on
Commit
fdfbeba
路
verified 路
1 Parent(s): 1f220c1

Upload 2 files

Browse files
Files changed (2) hide show
  1. index.html +1 -1
  2. seedance-asset-library.html +137 -0
index.html CHANGED
@@ -39,6 +39,6 @@ footer a{color:var(--muted)}
39
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11.9.0/styles/github-dark.min.css"><script src="https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11.9.0/highlight.min.js"></script><script>document.addEventListener("DOMContentLoaded",()=>hljs.highlightAll());</script>
40
  </head>
41
  <body><div class="wrap"><header class="top"><a class="brand" href="index.html">Modelflare Blog</a><nav><a href="https://modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">modelflare.dev</a><a href="https://docs.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">Docs</a><a href="https://castaly.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">Castaly</a><a href="https://huggingface.co/Modelflare" target="_top">Hugging Face org</a></nav></header>
42
- <h1>Modelflare Blog</h1><p class="lead">Engineering notes and setup guides for Modelflare, the API gateway for text, image, and video models, and for Castaly, the studio built on it.</p><div class="list"><a class="card" href="introducing-modelflare.html"><img src="images/introducing-modelflare-cover.jpg" alt="Diagram: one entry point routed to several model backends"><div><h2>Introducing Modelflare: one API key for text, image, and video models</h2><p>Modelflare is an API gateway that serves text, image, and video models behind one key, with OpenAI-compatible, Anthropic, and Gemini endpoints and per-request cost records.</p></div></a><a class="card" href="openai-sdk-one-line.html"><img src="images/openai-sdk-one-line-cover.jpg" alt="Diagram: a request passing through a compatible interface"><div><h2>Switching the OpenAI SDK to Modelflare (Python, JavaScript, curl)</h2><p>Existing OpenAI SDK code works with Modelflare after changing the base URL to <code>https://modelflare.dev/v1</code> and supplying a Modelflare key.</p></div></a><a class="card" href="coding-agents-modelflare.html"><img src="images/coding-agents-modelflare-cover.jpg" alt="Diagram: a coding agent connected through a gateway to several services"><div><h2>Configuring coding agents with Modelflare: Claude Code, Codex, OpenCode, Gemini CLI, CC-Switch, and Grok Build</h2><p>Claude Code connects through Anthropic Messages at <code>https://modelflare.dev</code>, Codex, OpenCode, and Grok Build through <code>https://modelflare.dev/v1</code>, and Gemini CLI through <code>GOOGLE_GEMINI_BASE_URL</code>. All of them use the same Modelflare key.</p></div></a><a class="card" href="api-recipes-streaming-fallback.html"><img src="images/api-recipes-streaming-fallback-cover.jpg" alt="Diagram: parallel routes converging with fallback paths"><div><h2>Modelflare API recipes: streaming, routing fallback, images, and async video</h2><p>Request examples for streaming chat, gateway-side fallback with group failover and Smart API Keys, client-side model fallback, image generation, and the asynchronous video task flow.</p></div></a><a class="card" href="smart-api-key.html"><img src="images/smart-api-key-cover.jpg" alt="Illustration: a key module feeding a single route"><div><h2>Smart API Keys: one key for every model your account can use</h2><p>A Smart API Key is bound to <code>auto</code> instead of a fixed routing group. It resolves a group on each request and orders candidates by a routing strategy that you choose.</p></div></a><a class="card" href="model-groups-and-failover.html"><img src="images/model-groups-and-failover-cover.jpg" alt="Illustration: parallel routes converging on one output"><div><h2>Model groups and failover: how Modelflare routes a request</h2><p>Every request depends on two identifiers: the exact model ID in the body and the routing group on the key. Ordinary keys add ordered fallback groups that take over when a route cannot serve the request.</p></div></a><a class="card" href="usage-and-cost-records.html"><img src="images/usage-and-cost-records-cover.jpg" alt="Illustration: a balance weighing request units"><div><h2>Usage and cost records: reading what each request cost</h2><p>Modelflare records token usage and cost for every request. This guide covers where those records live, how billing units differ between text, image, and video, the cache hit guarantee, and how long logs are kept.</p></div></a><a class="card" href="media-skill-for-agents.html"><img src="images/media-skill-for-agents-cover.jpg" alt="Illustration: media inputs feeding a processing unit and a film strip"><div><h2>The Modelflare Media Skill: image and video generation from coding agents</h2><p>The Media Skill is an installable SKILL.md package. With it, Claude Code, Codex, and other skill-aware agents can choose a Modelflare image or video model, quote its price, send the request, and save the result.</p></div></a><a class="card" href="castaly-image-video-studio.html"><img src="images/castaly-cover.jpg" alt="Castaly cover: orbital ring city"><div><h2>Castaly: an AI video and image studio built on Modelflare</h2><p>Castaly is a browser studio for AI image and video generation. Models are compared by specification and price, generations are paid from a wallet shared with Modelflare, and every model is also available through the Modelflare API.</p></div></a></div>
43
  <footer>Modelflare on Hugging Face: <a href="https://huggingface.co/spaces/Modelflare/start" target="_top">start</a> 路 <a href="https://huggingface.co/spaces/Modelflare/openai-sdk" target="_top">openai-sdk</a> 路 <a href="https://huggingface.co/spaces/Modelflare/coding-agents" target="_top">coding-agents</a> 路 <a href="https://huggingface.co/spaces/Modelflare/api-recipes" target="_top">api-recipes</a> 路 <a href="https://huggingface.co/datasets/Modelflare/api-examples" target="_top">api-examples dataset</a><br>Business: <a href="mailto:business@modelflare.dev">business@modelflare.dev</a></footer></div></body>
44
  </html>
 
39
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11.9.0/styles/github-dark.min.css"><script src="https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11.9.0/highlight.min.js"></script><script>document.addEventListener("DOMContentLoaded",()=>hljs.highlightAll());</script>
40
  </head>
41
  <body><div class="wrap"><header class="top"><a class="brand" href="index.html">Modelflare Blog</a><nav><a href="https://modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">modelflare.dev</a><a href="https://docs.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">Docs</a><a href="https://castaly.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">Castaly</a><a href="https://huggingface.co/Modelflare" target="_top">Hugging Face org</a></nav></header>
42
+ <h1>Modelflare Blog</h1><p class="lead">Engineering notes and setup guides for Modelflare, the API gateway for text, image, and video models, and for Castaly, the studio built on it.</p><div class="list"><a class="card" href="introducing-modelflare.html"><img src="images/introducing-modelflare-cover.jpg" alt="Diagram: one entry point routed to several model backends"><div><h2>Introducing Modelflare: one API key for text, image, and video models</h2><p>Modelflare is an API gateway that serves text, image, and video models behind one key, with OpenAI-compatible, Anthropic, and Gemini endpoints and per-request cost records.</p></div></a><a class="card" href="openai-sdk-one-line.html"><img src="images/openai-sdk-one-line-cover.jpg" alt="Diagram: a request passing through a compatible interface"><div><h2>Switching the OpenAI SDK to Modelflare (Python, JavaScript, curl)</h2><p>Existing OpenAI SDK code works with Modelflare after changing the base URL to <code>https://modelflare.dev/v1</code> and supplying a Modelflare key.</p></div></a><a class="card" href="coding-agents-modelflare.html"><img src="images/coding-agents-modelflare-cover.jpg" alt="Diagram: a coding agent connected through a gateway to several services"><div><h2>Configuring coding agents with Modelflare: Claude Code, Codex, OpenCode, Gemini CLI, CC-Switch, and Grok Build</h2><p>Claude Code connects through Anthropic Messages at <code>https://modelflare.dev</code>, Codex, OpenCode, and Grok Build through <code>https://modelflare.dev/v1</code>, and Gemini CLI through <code>GOOGLE_GEMINI_BASE_URL</code>. All of them use the same Modelflare key.</p></div></a><a class="card" href="api-recipes-streaming-fallback.html"><img src="images/api-recipes-streaming-fallback-cover.jpg" alt="Diagram: parallel routes converging with fallback paths"><div><h2>Modelflare API recipes: streaming, routing fallback, images, and async video</h2><p>Request examples for streaming chat, gateway-side fallback with group failover and Smart API Keys, client-side model fallback, image generation, and the asynchronous video task flow.</p></div></a><a class="card" href="smart-api-key.html"><img src="images/smart-api-key-cover.jpg" alt="Illustration: a key module feeding a single route"><div><h2>Smart API Keys: one key for every model your account can use</h2><p>A Smart API Key is bound to <code>auto</code> instead of a fixed routing group. It resolves a group on each request and orders candidates by a routing strategy that you choose.</p></div></a><a class="card" href="model-groups-and-failover.html"><img src="images/model-groups-and-failover-cover.jpg" alt="Illustration: parallel routes converging on one output"><div><h2>Model groups and failover: how Modelflare routes a request</h2><p>Every request depends on two identifiers: the exact model ID in the body and the routing group on the key. Ordinary keys add ordered fallback groups that take over when a route cannot serve the request.</p></div></a><a class="card" href="usage-and-cost-records.html"><img src="images/usage-and-cost-records-cover.jpg" alt="Illustration: a balance weighing request units"><div><h2>Usage and cost records: reading what each request cost</h2><p>Modelflare records token usage and cost for every request. This guide covers where those records live, how billing units differ between text, image, and video, the cache hit guarantee, and how long logs are kept.</p></div></a><a class="card" href="media-skill-for-agents.html"><img src="images/media-skill-for-agents-cover.jpg" alt="Illustration: media inputs feeding a processing unit and a film strip"><div><h2>The Modelflare Media Skill: image and video generation from coding agents</h2><p>The Media Skill is an installable SKILL.md package. With it, Claude Code, Codex, and other skill-aware agents can choose a Modelflare image or video model, quote its price, send the request, and save the result.</p></div></a><a class="card" href="seedance-asset-library.html"><img src="images/seedance-asset-library-cover.jpg" alt="Illustration: image and media tiles feeding a central processing unit"><div><h2>The Seedance asset library: uploading reference media and using asset:// IDs</h2><p>Seedance 2.0 and 2.5 do not accept a photorealistic person or a realistic face as an image URL. Upload the media to the asset library, poll until it is <code>Active</code>, and reference it as <code>asset://&lt;ID&gt;</code> in a video request.</p></div></a><a class="card" href="castaly-image-video-studio.html"><img src="images/castaly-cover.jpg" alt="Castaly cover: orbital ring city"><div><h2>Castaly: an AI video and image studio built on Modelflare</h2><p>Castaly is a browser studio for AI image and video generation. Models are compared by specification and price, generations are paid from a wallet shared with Modelflare, and every model is also available through the Modelflare API.</p></div></a></div>
43
  <footer>Modelflare on Hugging Face: <a href="https://huggingface.co/spaces/Modelflare/start" target="_top">start</a> 路 <a href="https://huggingface.co/spaces/Modelflare/openai-sdk" target="_top">openai-sdk</a> 路 <a href="https://huggingface.co/spaces/Modelflare/coding-agents" target="_top">coding-agents</a> 路 <a href="https://huggingface.co/spaces/Modelflare/api-recipes" target="_top">api-recipes</a> 路 <a href="https://huggingface.co/datasets/Modelflare/api-examples" target="_top">api-examples dataset</a><br>Business: <a href="mailto:business@modelflare.dev">business@modelflare.dev</a></footer></div></body>
44
  </html>
seedance-asset-library.html ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>The Seedance asset library: uploading reference media and using asset:// IDs | Modelflare Blog</title>
7
+ <meta name="description" content="Seedance 2.0 and 2.5 do not accept a photorealistic person or a realistic face as an image URL or Base64 payload. Modelflare implements the Seedance asset-management routes, so you can upload that media once, wait for it to become Active, and reference it as asset://&lt;ID&gt; in a video request."><meta property="og:image" content="https://modelflare-blog.static.hf.space/images/seedance-asset-library-cover.jpg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:title" content="The Seedance asset library: uploading reference media and using asset:// IDs"><meta property="og:description" content="Seedance 2.0 and 2.5 do not accept a photorealistic person or a realistic face as an image URL or Base64 payload. Modelflare implements the Seedance asset-management routes, so you can upload that media once, wait for it to become Active, and reference it as asset://&lt;ID&gt; in a video request."><meta property="og:type" content="article"><meta property="og:url" content="https://modelflare-blog.static.hf.space/seedance-asset-library.html"><meta property="og:site_name" content="Modelflare Blog"><meta property="article:published_time" content="2026-10-20"><link rel="canonical" href="https://modelflare-blog.static.hf.space/seedance-asset-library.html"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="The Seedance asset library: uploading reference media and using asset:// IDs"><meta name="twitter:description" content="Seedance 2.0 and 2.5 do not accept a photorealistic person or a realistic face as an image URL or Base64 payload. Modelflare implements the Seedance asset-management routes, so you can upload that media once, wait for it to become Active, and reference it as asset://&lt;ID&gt; in a video request."><meta name="twitter:image" content="https://modelflare-blog.static.hf.space/images/seedance-asset-library-cover.jpg">
8
+ <style>
9
+ :root{--bg:#0b1020;--card:#121a2f;--text:#e8ecf7;--muted:#9aa6c2;--accent:#8b5cf6;--accent2:#ec4899;--border:rgba(255,255,255,.08)}
10
+ *{box-sizing:border-box}
11
+ body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:radial-gradient(1200px 600px at 10% -10%,#2a1850 0%,transparent 50%),radial-gradient(900px 500px at 100% 0%,#3b0f2e 0%,transparent 45%),var(--bg);color:var(--text);min-height:100vh;line-height:1.65}
12
+ .wrap{max-width:860px;margin:0 auto;padding:28px 18px 64px}
13
+ header.top{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;margin-bottom:28px;font-size:14px}
14
+ header.top a{color:var(--muted);text-decoration:none}header.top a:hover{color:#fff}
15
+ header.top .brand{color:#fff;font-weight:700;font-size:16px}
16
+ header.top nav{display:flex;flex-wrap:wrap;gap:14px}
17
+ h1{font-size:clamp(26px,4.6vw,38px);line-height:1.2;margin:0 0 12px}
18
+ h2{font-size:22px;margin:36px 0 10px}h3{font-size:17px;margin:24px 0 8px;color:#d6c7ff}
19
+ p,li{color:#cfd6e8}a{color:#c4b5fd}
20
+ .lead{color:var(--muted);font-size:17px}
21
+ article img{max-width:100%;height:auto;border-radius:12px;border:1px solid var(--border);display:block;margin:18px auto 6px}
22
+ article p em:only-child{display:block;text-align:center;color:var(--muted);font-size:14px}
23
+ pre{background:#070b16;border:1px solid var(--border);border-radius:12px;padding:0;overflow-x:auto}
24
+ pre code.hljs{background:transparent;padding:14px 16px;font-size:13.5px;line-height:1.55}
25
+ code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em}
26
+ p code,li code,td code{background:rgba(139,92,246,.14);padding:1px 5px;border-radius:5px}
27
+ table{border-collapse:collapse;width:100%;font-size:14px;margin:14px 0;display:block;overflow-x:auto}
28
+ th,td{border:1px solid var(--border);padding:8px 10px;text-align:left;vertical-align:top}th{background:var(--card)}
29
+ hr{border:0;border-top:1px solid var(--border);margin:32px 0}
30
+ .list{display:grid;gap:14px}
31
+ .card{display:flex;gap:16px;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:18px;text-decoration:none;color:inherit}
32
+ .card:hover{border-color:rgba(139,92,246,.5)}
33
+ .card img{width:200px;height:105px;object-fit:cover;border-radius:10px;flex-shrink:0}
34
+ .card h2{font-size:18px;margin:0 0 6px;color:#fff}.card p{margin:0;color:var(--muted);font-size:14px}
35
+ footer{margin-top:48px;padding-top:18px;border-top:1px solid var(--border);color:var(--muted);font-size:13px}
36
+ footer a{color:var(--muted)}
37
+ @media(max-width:600px){.card{flex-direction:column}.card img{width:100%;height:auto;aspect-ratio:1200/630}}
38
+ </style>
39
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11.9.0/styles/github-dark.min.css"><script src="https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11.9.0/highlight.min.js"></script><script>document.addEventListener("DOMContentLoaded",()=>hljs.highlightAll());</script>
40
+ </head>
41
+ <body><div class="wrap"><header class="top"><a class="brand" href="index.html">Modelflare Blog</a><nav><a href="https://modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">modelflare.dev</a><a href="https://docs.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">Docs</a><a href="https://castaly.modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=blog">Castaly</a><a href="https://huggingface.co/Modelflare" target="_top">Hugging Face org</a></nav></header>
42
+ <article><h1>The Seedance asset library: uploading reference media and using asset:// IDs</h1>
43
+ <p class="lead">Seedance 2.0 and 2.5 do not accept a photorealistic person or a realistic face as an image URL or Base64 payload. Modelflare implements the Seedance asset-management routes, so you can upload that media once, wait for it to become Active, and reference it as <code>asset://&lt;ID&gt;</code> in a video request.</p>
44
+ <img src="images/seedance-asset-library-cover.jpg" alt="Illustration: image and media tiles feeding a central processing unit">
45
+ <hr />
46
+ <p>Seedance video requests on <a href="https://modelflare.dev/?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=seedance-asset-library">Modelflare</a> use a single asynchronous envelope at <code>POST /v1/videos</code>. Text, frames, and reference media all go in <code>content[]</code>, and the <code>role</code> on each media item tells the model what it is for. Reference images can be sent as an image URL, with one exception: Seedance 2.0 and Seedance 2.5 cannot take a photorealistic person, a real-person photo, or a realistic face as an image URL or Base64 payload.</p>
47
+ <p>For that case the docs point to the Seedance asset library: 13 asset-management routes under <code>https://modelflare.dev/volc/asset/</code>. This article follows the documented flow from an empty group to a usable <code>asset://&lt;ID&gt;</code> reference.</p>
48
+ <p><img alt="Diagram: create a group, upload an asset, poll GetAsset from Processing to Active or Failed, then reference asset://&lt;ID&gt; in a video request" src="images/fig-seedance-assets.svg" />
49
+ <em>The asset lifecycle. Only Active assets can be referenced.</em></p>
50
+ <h2>Before you start</h2>
51
+ <ul>
52
+ <li><strong>Key type.</strong> Asset calls require a <a href="smart-api-key.html">Smart API Key</a> or a media group API key, plus an available media channel. Create or edit keys under <a href="https://modelflare.dev/keys?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=seedance-asset-library">API Keys</a>.</li>
53
+ <li><strong>Idempotency.</strong> Send an <code>Idempotency-Key</code> header with create, update, and delete requests. A retry with the same key for the same user replays the saved response and does not repeat the mutation.</li>
54
+ <li><strong>Cost.</strong> Asset-management operations do not add a separate user charge. The video generation itself is billed under the model's own pricing.</li>
55
+ <li><strong>Scope.</strong> The gateway records provider asset IDs, status, and user ownership. The Castaly local library is separate from this provider asset namespace.</li>
56
+ </ul>
57
+ <h2>1. Create a group</h2>
58
+ <p>Every asset belongs to a group. <code>Name</code> is required; <code>model</code> defaults to <code>volc-asset</code>.</p>
59
+ <pre><code class="language-bash">curl --request POST https://modelflare.dev/volc/asset/CreateAssetGroup \
60
+ --header &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot; \
61
+ --header &quot;Content-Type: application/json&quot; \
62
+ --data '{
63
+ &quot;Name&quot;: &quot;my-project-assets&quot;,
64
+ &quot;model&quot;: &quot;volc-asset&quot;
65
+ }'
66
+ </code></pre>
67
+ <p>The response contains the new group <code>Id</code>. Save it; every upload needs it as <code>GroupId</code>.</p>
68
+ <h2>2. Upload an asset</h2>
69
+ <p>Images, videos, and audio all use <code>POST /volc/asset/CreateAsset</code>. <code>AssetType</code> selects the media type; send the media in <code>URL</code> or as a multipart <code>file</code>. An image request:</p>
70
+ <pre><code class="language-json">{
71
+ &quot;model&quot;: &quot;volc-asset&quot;,
72
+ &quot;GroupId&quot;: &quot;group-20260320141746-zsf6b&quot;,
73
+ &quot;Name&quot;: &quot;character-reference&quot;,
74
+ &quot;AssetType&quot;: &quot;Image&quot;,
75
+ &quot;URL&quot;: &quot;https://example.com/image.jpg&quot;
76
+ }
77
+ </code></pre>
78
+ <p>The multipart form:</p>
79
+ <pre><code class="language-bash">curl --request POST https://modelflare.dev/volc/asset/CreateAsset \
80
+ --header &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot; \
81
+ --form &quot;model=volc-asset&quot; \
82
+ --form &quot;GroupId=group-20260320141746-zsf6b&quot; \
83
+ --form &quot;file=@image.jpg&quot;
84
+ </code></pre>
85
+ <p>Each type has its own <code>model</code> value and limits:</p>
86
+ <table>
87
+ <thead>
88
+ <tr>
89
+ <th><code>AssetType</code></th>
90
+ <th><code>model</code></th>
91
+ <th><code>URL</code> input</th>
92
+ <th>Limits</th>
93
+ </tr>
94
+ </thead>
95
+ <tbody>
96
+ <tr>
97
+ <td><code>Image</code></td>
98
+ <td><code>volc-asset</code></td>
99
+ <td>Public URL, data URI, or raw Base64</td>
100
+ <td>Smaller than 30 MB, 300 to 6000 px on each side, aspect ratio 0.4 to 2.5</td>
101
+ </tr>
102
+ <tr>
103
+ <td><code>Video</code></td>
104
+ <td><code>volc-asset-video</code></td>
105
+ <td>Public URL only; Base64 is not accepted</td>
106
+ <td>MP4 or MOV, 2 to 30 seconds, 24 to 60 FPS, 480p/720p/1080p/4K, no more than 200 MB; pixel limits on the docs page</td>
107
+ </tr>
108
+ <tr>
109
+ <td><code>Audio</code></td>
110
+ <td><code>volc-asset-audio</code></td>
111
+ <td>Public URL, data URI, or raw Base64</td>
112
+ <td>WAV or MP3, 2 to 30 seconds, no more than 15 MB</td>
113
+ </tr>
114
+ </tbody>
115
+ </table>
116
+ <p><code>Name</code> is optional (up to 64 characters). <code>ProjectName</code> defaults to <code>default</code> and must match the target group.</p>
117
+ <h2>3. Poll until the asset is Active</h2>
118
+ <p>Creation is asynchronous. The upload returns only an asset <code>Id</code>, and <code>Status</code> reads <code>Processing</code> until the work finishes. Poll <code>GetAsset</code> until <code>Status</code> is <code>Active</code> or <code>Failed</code>:</p>
119
+ <pre><code class="language-bash">curl --request POST https://modelflare.dev/volc/asset/GetAsset \
120
+ --header &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot; \
121
+ --header &quot;Content-Type: application/json&quot; \
122
+ --data '{
123
+ &quot;Id&quot;: &quot;asset-20260528140922-d9646&quot;
124
+ }'
125
+ </code></pre>
126
+ <p>There is no upload-time SLA. Typical times are about 6 to 9 seconds for an image, 9 to 12 for a video, and 3 to 6 for audio; a busy review queue can take roughly 10 seconds to 2 minutes, so set the polling timeout for the slow case.</p>
127
+ <p><code>GetAsset</code> also returns a temporary file <code>URL</code> with a documented lifetime of 12 hours. Store the asset ID, not that URL. A <code>Failed</code> asset cannot be used for inference.</p>
128
+ <h2>4. Reference the asset in a video request</h2>
129
+ <p>Once the status is <code>Active</code>, reference <code>asset://&lt;ID&gt;</code> in <code>content[]</code> of the Seedance request to <code>POST /v1/videos</code>. The rest follows the model contract. The <a href="https://docs.modelflare.dev/models/video/seedance-2-0/?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=seedance-asset-library">seedance-2.0</a> page lists <code>text</code>, <code>image_url</code>, <code>video_url</code>, and <code>audio_url</code> items with a <code>role</code>, allows up to nine images, three videos, and three audio clips, and orders media as text, image, video, then audio. Poll and download the task as with any video job (see <a href="api-recipes-streaming-fallback.html">API recipes</a>).</p>
130
+ <h2>Real people need a liveness check</h2>
131
+ <p>An asset showing a real person also requires a liveness check. <code>POST /volc/asset/CreateVisualValidateSession</code> accepts an optional <code>CallbackURL</code> and returns an <code>H5Link</code> and a temporary <code>BytedToken</code>. The person opens <code>H5Link</code> on a phone to complete the check. Then <code>POST /volc/asset/GetVisualValidateResult</code> with the <code>BytedToken</code> returns the liveness asset group <code>GroupId</code>. The field can be empty while processing, and the route returns <code>404</code> when the token does not exist. Use the returned real-person group for that person's assets. Validation needs a key with the required permission; keep it apart from ordinary uploads.</p>
132
+ <h2>Housekeeping and errors</h2>
133
+ <p><code>ListAssets</code> filters by name, group, and group type, and <code>ListAssetGroups</code> by name, ID, and group type; <code>ListAssets</code> pages with <code>PageNumber</code> and <code>PageSize</code> (default 10). <code>UpdateAsset</code> renames an asset or moves it to another group, <code>UpdateAssetGroup</code> renames a group, and <code>DeleteAsset</code> and <code>DeleteAssetGroup</code> remove them by ID.</p>
134
+ <p>Across these routes, <code>400</code> means the request is invalid and <code>401</code> means the API key is missing or unauthorized. Error bodies, when returned, carry an <code>error</code> object with <code>code</code> and <code>message</code>.</p>
135
+ <p>Full contracts for all 13 routes are in <a href="https://docs.modelflare.dev/guides/video/seedance-asset-management/?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=seedance-asset-library">Seedance asset management</a>; see also the <a href="https://docs.modelflare.dev/models/video/seedance-2-5/?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=seedance-asset-library">seedance-2.5</a> model page. For volume video workloads or access questions, contact <a href="mailto:business@modelflare.dev">business@modelflare.dev</a>.</p></article><p><a href="index.html">&larr; All articles</a></p>
136
+ <footer>Modelflare on Hugging Face: <a href="https://huggingface.co/spaces/Modelflare/start" target="_top">start</a> 路 <a href="https://huggingface.co/spaces/Modelflare/openai-sdk" target="_top">openai-sdk</a> 路 <a href="https://huggingface.co/spaces/Modelflare/coding-agents" target="_top">coding-agents</a> 路 <a href="https://huggingface.co/spaces/Modelflare/api-recipes" target="_top">api-recipes</a> 路 <a href="https://huggingface.co/datasets/Modelflare/api-examples" target="_top">api-examples dataset</a><br>Business: <a href="mailto:business@modelflare.dev">business@modelflare.dev</a></footer></div></body>
137
+ </html>