<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lee</title>
    <description>The latest articles on DEV Community by Lee (@lee_315dd1e13420e63e2b813).</description>
    <link>https://dev.to/lee_315dd1e13420e63e2b813</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3087450%2Fb8b5f2c9-2970-43b3-9990-91787cfa7512.png</url>
      <title>DEV Community: Lee</title>
      <link>https://dev.to/lee_315dd1e13420e63e2b813</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lee_315dd1e13420e63e2b813"/>
    <language>en</language>
    <item>
      <title>MiniMax H3 VRAM requirements and real render times, consolidated from 20 threads</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Tue, 25 Aug 2026 05:21:14 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/minimax-h3-vram-requirements-and-real-render-times-consolidated-from-20-threads-3k1n</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/minimax-h3-vram-requirements-and-real-render-times-consolidated-from-20-threads-3k1n</guid>
      <description>&lt;p&gt;Every H3 thread has the same two questions in the comments: will it run on my card, and how long does it take. The answers are scattered across twenty threads and they contradict each other, so I pulled the numbers into one place.&lt;/p&gt;

&lt;p&gt;The short version: the spread on a single card model is bigger than the spread between card models. Someone reported 22 minutes on a 5090 and got four replies saying they get the same work done in 3 to 5 minutes. Both are true. The difference is optimisation, not hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reported render times
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hardware&lt;/th&gt;
&lt;th&gt;Reported&lt;/th&gt;
&lt;th&gt;Settings noted&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5090&lt;/td&gt;
&lt;td&gt;~22 min, 362 frames&lt;/td&gt;
&lt;td&gt;768×1024, 8 steps, Turbo sampler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5090&lt;/td&gt;
&lt;td&gt;10:16&lt;/td&gt;
&lt;td&gt;896×1120, no turbo, 20 steps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5090&lt;/td&gt;
&lt;td&gt;"under 5 min"&lt;/td&gt;
&lt;td&gt;not specified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5090&lt;/td&gt;
&lt;td&gt;134 s for 15 s clip&lt;/td&gt;
&lt;td&gt;no turbo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5090&lt;/td&gt;
&lt;td&gt;~11 min for a 1:30 video&lt;/td&gt;
&lt;td&gt;12GB-optimised workflow, duration 30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3090&lt;/td&gt;
&lt;td&gt;~3 min&lt;/td&gt;
&lt;td&gt;6-step turbo LoRA + attention optimisation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5070 Ti + 64 GB&lt;/td&gt;
&lt;td&gt;118 s cold, 93 s warm&lt;/td&gt;
&lt;td&gt;608×352, default workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5070 Ti + 64 GB&lt;/td&gt;
&lt;td&gt;230 s&lt;/td&gt;
&lt;td&gt;0.4 MP (480×864)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4070 + 64 GB&lt;/td&gt;
&lt;td&gt;167 s&lt;/td&gt;
&lt;td&gt;608×352, default workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3080 12 GB + 32 GB&lt;/td&gt;
&lt;td&gt;works, Ref2VID&lt;/td&gt;
&lt;td&gt;not timed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12 GB VRAM&lt;/td&gt;
&lt;td&gt;~14 min for 30 s output&lt;/td&gt;
&lt;td&gt;purpose-built low-VRAM workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5060 Ti 16 GB + 128 GB&lt;/td&gt;
&lt;td&gt;OOM&lt;/td&gt;
&lt;td&gt;default t2v template, fresh install&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources are the comment threads on the 5090/362-frame post, the 12 GB 30-second workflow post, and the "12gb vram + 64ram" post. All within the last 30 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  What explains a 4× spread on the same GPU
&lt;/h2&gt;

&lt;p&gt;Reading through the replies, the same four things come up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Turbo LoRA with reduced steps.&lt;/strong&gt; Multiple people running 4 to 6 steps instead of 20. This is the single largest factor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SageAttention / attention backend.&lt;/strong&gt; Named repeatedly as the fix when someone reports a slow time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SLA speedup.&lt;/strong&gt; One reply attributes the 22-minute figure directly to not using it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolution and megapixels.&lt;/strong&gt; 608×352 versus 896×1120 is a large difference in work, and people quote times without stating either.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are benchmarking, state resolution, frame count, step count, and whether Turbo LoRA is on. Half the numbers floating around are unusable because they omit these.&lt;/p&gt;

&lt;h2&gt;
  
  
  The VRAM floor is lower than people assume, with a caveat
&lt;/h2&gt;

&lt;p&gt;12 GB runs it. There are working reports on a 3080 12 GB with 32 GB system RAM, and a 12 GB-targeted workflow that produces 30-second output in about 14 minutes.&lt;/p&gt;

&lt;p&gt;The caveat is that system RAM matters as much as VRAM here. The working 12 GB reports pair with 32 to 64 GB of system RAM. And a 5060 Ti with &lt;strong&gt;16 GB&lt;/strong&gt; VRAM and 128 GB system RAM still hit OOM on the default t2v template, which tells you the default template is not tuned for mid-range cards regardless of how much memory you have. Use a low-VRAM workflow rather than the default one and the floor drops.&lt;/p&gt;

&lt;h2&gt;
  
  
  "30-second generation" is stitched
&lt;/h2&gt;

&lt;p&gt;Worth knowing before you plan around it: the 30-second low-VRAM workflow uses &lt;code&gt;comfyui-h3-multishot&lt;/code&gt;, which joins three 10-second clips. It works, and the seams are handled, but it is not a native 30-second single pass. If your use case needs one continuous take with no join, test it before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  On the "$0 API cost" framing
&lt;/h2&gt;

&lt;p&gt;The 5090 post was titled with "$0 API cost" and the top reply was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"0$ cost" after pressing Queue button. but before that, Hardware cost quite much&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the honest framing. Local generation is free per clip and expensive up front. Which one wins depends entirely on volume, and the break-even is easy to compute for your own situation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;clips_to_break_even&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hardware_cost&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seconds_per_clip&lt;/span&gt; &lt;span class="err"&gt;×&lt;/span&gt; &lt;span class="n"&gt;api_rate_per_second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I did not want to guess at anyone's GPU price or electricity rate, so plug in your own. For the API side of that equation, published per-second rates for hosted H3 are $0.074/s at 768P and $0.119/s at 2K (&lt;a href="https://reapi.ai/models/minimax-h3" rel="noopener noreferrer"&gt;model page&lt;/a&gt; — disclosure: I work on reAPI). A 10-second 768P clip is $0.74, so at that rate a $2,000 card pays for itself somewhere around 2,700 clips, before electricity and before your own waiting time.&lt;/p&gt;

&lt;p&gt;That number moves a lot with resolution and clip length, which is why the formula is more useful than any single figure I could quote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where each one actually wins
&lt;/h2&gt;

&lt;p&gt;Local wins on: high volume, iteration where you are regenerating constantly, anything involving custom LoRAs, no content restrictions, and not caring about a 3-to-20-minute wait per attempt.&lt;/p&gt;

&lt;p&gt;Hosted wins on: low or bursty volume, needing output now rather than after a tuning session, not owning a card that clears the floor, and 2K where local memory pressure gets ugly.&lt;/p&gt;

&lt;p&gt;Most people posting here are firmly in the first group, which is why the local workflows get the upvotes. But the threads asking "can my 3060 do this" are a different group, and for them the arithmetic often does not favour buying a card.&lt;/p&gt;

&lt;h2&gt;
  
  
  What would help
&lt;/h2&gt;

&lt;p&gt;If you have timings, post them with resolution, frames, steps, and whether Turbo LoRA and SageAttention are on. Right now the useful data is spread across comment replies in threads whose titles are about something else, and half of it is missing the settings that would make it comparable.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Seedance 2.0 Is Now Uncensored"—What Changes in Seedance 2.5?</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Wed, 19 Aug 2026 00:18:53 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/seedance-20-is-now-uncensored-what-changes-in-seedance-25-3bc1</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/seedance-20-is-now-uncensored-what-changes-in-seedance-25-3bc1</guid>
      <description>&lt;p&gt;Two Reddit titles capture the question developers are actually asking: &lt;a href="https://www.reddit.com/r/VeniceAI/comments/1tvmwby/seedance_20_is_now_uncensored/" rel="noopener noreferrer"&gt;“Seedance 2.0 is Now Uncensored”&lt;/a&gt; and &lt;a href="https://www.reddit.com/r/VeniceAI/comments/1uycjts/will_seedance_25_be_uncensored_on_venice/" rel="noopener noreferrer"&gt;“Will Seedance 2.5 be uncensored on Venice?”&lt;/a&gt;. They are useful evidence of demand. They are not product specifications.&lt;/p&gt;

&lt;p&gt;The accurate answer is more technical. A hosted Seedance request passes through several policy and routing layers, so two services can expose the same model and reject different prompts. reAPI gives direct API callers an explicit &lt;code&gt;content_filter&lt;/code&gt; control for supported Seedance models, but that control selects a less-filtered execution channel. It does not suspend the model's limits, the provider's checks, or reAPI's &lt;a href="https://reapi.ai/acceptable-use" rel="noopener noreferrer"&gt;Acceptable Use Policy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fhero-16x9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fhero-16x9.png" alt="Seedance 2.0 and Seedance 2.5 content-filter routing for API developers" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  “Seedance uncensored” usually describes a route, not a model
&lt;/h2&gt;

&lt;p&gt;The word &lt;em&gt;uncensored&lt;/em&gt; collapses four different questions into one:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What can vary&lt;/th&gt;
&lt;th&gt;What a successful request does not prove&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Consumer product&lt;/td&gt;
&lt;td&gt;Upload rules, blocked terms, account restrictions&lt;/td&gt;
&lt;td&gt;That another product has the same rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API gateway&lt;/td&gt;
&lt;td&gt;Pre-checks and route selection&lt;/td&gt;
&lt;td&gt;That upstream checks are disabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model provider&lt;/td&gt;
&lt;td&gt;Input and generation policy&lt;/td&gt;
&lt;td&gt;That every lawful prompt will succeed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output handling&lt;/td&gt;
&lt;td&gt;Review after rendering&lt;/td&gt;
&lt;td&gt;That passing the prompt guarantees delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This explains much of the disagreement in community threads. One user may be describing a consumer app with a conservative prompt filter. Another may be using a direct API whose gateway adds less moderation before submission. Neither observation establishes that Seedance itself accepts every prompt.&lt;/p&gt;

&lt;p&gt;For an integration, “Which exact route handled this task?” is therefore a better question than “Is Seedance censored?” It produces an answer you can log and test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seedance 2.0 and 2.5 expose different production envelopes
&lt;/h2&gt;

&lt;p&gt;The two reAPI models share one asynchronous API pattern, but their output limits differ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;reAPI model ID&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Resolution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0&lt;/td&gt;
&lt;td&gt;&lt;code&gt;doubao-seedance-2.0-face&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4–15 seconds&lt;/td&gt;
&lt;td&gt;480p, 720p, 1080p, 4K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;doubao-seedance-2.5-face&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4–30 seconds&lt;/td&gt;
&lt;td&gt;480p, 720p, 1080p&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Seedance 2.0 is useful when 4K delivery matters. Seedance 2.5 extends a single generation to 30 seconds and supports a broader reference workflow. The full request fields and constraints are documented in the &lt;a href="https://reapi.ai/docs/seedance-2-0" rel="noopener noreferrer"&gt;Seedance 2.0 API reference&lt;/a&gt; and &lt;a href="https://reapi.ai/docs/seedance-2-5" rel="noopener noreferrer"&gt;Seedance 2.5 API reference&lt;/a&gt;. Live access and current pricing sit on the &lt;a href="https://reapi.ai/models/seedance-2-0" rel="noopener noreferrer"&gt;Seedance 2.0 model page&lt;/a&gt; and &lt;a href="https://reapi.ai/models/seedance-2-5" rel="noopener noreferrer"&gt;Seedance 2.5 model page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These are capability differences, not evidence that one version is “more uncensored.” Content handling depends on the execution route as well as the model version.&lt;/p&gt;

&lt;h2&gt;
  
  
  How &lt;code&gt;content_filter&lt;/code&gt; works on the reAPI Seedance API
&lt;/h2&gt;

&lt;p&gt;On supported public API models, &lt;code&gt;content_filter&lt;/code&gt; defaults to &lt;code&gt;true&lt;/code&gt;. Direct callers can set it to &lt;code&gt;false&lt;/code&gt; to request reAPI's Flexible, less-filtered channel. The browser playground keeps filtering enabled, so this choice belongs in an API request rather than a playground toggle.&lt;/p&gt;

&lt;p&gt;The distinction matters: &lt;code&gt;content_filter&lt;/code&gt; is a reAPI routing control, not a magic instruction passed inside the prompt. With Seedance 2.5, the Flexible route is a single attempt without fallback. With Seedance 2.0, reAPI uses a compatible Flexible route when available; if none is compatible, the request can use the selected Standard channel instead. A failed generation is still possible in either case.&lt;/p&gt;

&lt;p&gt;Here is a deliberately benign request that demonstrates the wire format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://reapi.ai/api/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$REAPI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "doubao-seedance-2.5-face",
    "prompt": "A contemporary dancer rehearses on an empty theater stage, wide shot, warm work lights, natural fabric movement",
    "resolution": "720p",
    "size": "16:9",
    "duration": 6,
    "content_filter": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The POST returns a task ID. Poll &lt;code&gt;GET https://reapi.ai/api/v1/tasks/{id}&lt;/code&gt; until the task reaches &lt;code&gt;completed&lt;/code&gt; or &lt;code&gt;failed&lt;/code&gt;; a successful response places the video URL under &lt;code&gt;output.video_urls&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For production code, keep &lt;code&gt;content_filter&lt;/code&gt; explicit in configuration. Do not infer it from the prompt or silently switch it after a refusal. That makes route choice reviewable and prevents a policy-sensitive behavior change from hiding inside retry logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  A less-filtered channel is useful for false positives, not policy bypass
&lt;/h2&gt;

&lt;p&gt;There are legitimate reasons to want a less-filtered route. Fashion footage, theatrical performance, sportswear, medical education, or close-cropped skin tones can trigger broad classifiers even when the intended output is lawful and non-explicit. An explicit API setting lets a team test whether an optional gateway layer caused the rejection.&lt;/p&gt;

&lt;p&gt;The route is still governed by service and provider rules. reAPI's Acceptable Use Policy prohibits sexually explicit content, sexual content involving minors, non-consensual intimate imagery, illegal material, and attempts to circumvent safety systems. Rights and consent also remain the caller's responsibility. An API accepting an image is not proof that the caller owns it or has permission from the person depicted.&lt;/p&gt;

&lt;p&gt;A sensible implementation records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the user and task ID;&lt;/li&gt;
&lt;li&gt;the selected model and &lt;code&gt;content_filter&lt;/code&gt; value;&lt;/li&gt;
&lt;li&gt;the input asset identifiers and proof of consent where relevant;&lt;/li&gt;
&lt;li&gt;the terminal status and structured error;&lt;/li&gt;
&lt;li&gt;any moderation or human-review outcome in the calling product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That record is more valuable than repeatedly changing prompt wording. If the upstream model or output review rejects a request, treat it as a terminal policy result rather than an invitation to obfuscate the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  When reAPI is the practical choice
&lt;/h2&gt;

&lt;p&gt;reAPI is a useful fit when a team needs Seedance 2.0 and 2.5 behind one stable task workflow, with the filtering route selected in code. Both use &lt;code&gt;POST /api/v1/videos/generations&lt;/code&gt;, both return an asynchronous task, and both are checked through &lt;code&gt;GET /api/v1/tasks/{id}&lt;/code&gt;. Moving between versions is mostly a model ID and parameter decision rather than a second integration.&lt;/p&gt;

&lt;p&gt;Choose the 2.0 route when 4K output or its 15-second production envelope matches the job. Choose 2.5 when a shot may run up to 30 seconds or needs its newer reference workflow. In both cases, use the Flexible channel only for material that remains permitted under the service policy and any upstream terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Seedance 2.0 actually uncensored?
&lt;/h3&gt;

&lt;p&gt;Not literally. reAPI can route supported API requests through a less-filtered Flexible channel, but provider, model, output, legal, and service-policy limits still apply.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will Seedance 2.5 be uncensored through an API?
&lt;/h3&gt;

&lt;p&gt;On reAPI, Seedance 2.5 already exposes &lt;code&gt;content_filter: false&lt;/code&gt; for a Flexible execution channel. That is a routing option, not a guarantee that every request will be accepted or returned.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does &lt;code&gt;content_filter: false&lt;/code&gt; allow sexually explicit content?
&lt;/h3&gt;

&lt;p&gt;No. The reAPI Acceptable Use Policy expressly prohibits sexually explicit content, as well as non-consensual, minor-related, illegal, and safety-circumvention uses. The setting does not override those rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why can the same Seedance prompt work on one platform and fail on another?
&lt;/h3&gt;

&lt;p&gt;Platforms can add different pre-filters and use different provider routes. The model version alone does not identify the entire moderation path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Reddit phrase “Seedance 2.0 is now uncensored” points to a real developer need, but the precise feature is route control. reAPI exposes that control through a documented &lt;code&gt;content_filter&lt;/code&gt; field while keeping one async API across Seedance 2.0 and 2.5. For teams investigating lawful false positives, that is useful and testable; it is not a promise of unrestricted generation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>MiniMax H3 Is Shockingly Uncensored, Wow"—What That Proves</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Wed, 19 Aug 2026 00:17:37 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/minimax-h3-is-shockingly-uncensored-wow-what-that-proves-5blm</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/minimax-h3-is-shockingly-uncensored-wow-what-that-proves-5blm</guid>
      <description>&lt;p&gt;&lt;a href="https://www.reddit.com/r/StableDiffusion/comments/1ves4o0/minimax_h3_is_shockingly_uncensored_wow/" rel="noopener noreferrer"&gt;“MiniMax H3 is shockingly uncensored, wow”&lt;/a&gt; is an excellent Reddit headline. It is also too broad to use as an API requirement.&lt;/p&gt;

&lt;p&gt;MiniMax H3 exists in at least three operational contexts: published model weights, MiniMax's hosted system, and third-party APIs. Each context has different infrastructure and controls. A result seen in one of them says little about the other two unless the route, checkpoint, preprocessing, and license are identified.&lt;/p&gt;

&lt;p&gt;For developers, the useful question is not whether H3 is “uncensored.” It is whether a deployment offers explicit moderation behavior, documented limits, and a legal route for the intended workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  A claim check for the widely discussed MiniMax H3 headline
&lt;/h2&gt;

&lt;p&gt;The community discussion is real. Alongside the widely discussed Stable Diffusion post, &lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1ve1mvh/minimaxh3_now_on_huggingface/" rel="noopener noreferrer"&gt;the Hugging Face release reached r/LocalLLaMA&lt;/a&gt;, where local deployment naturally became part of the conversation. But “open,” “locally runnable,” and “unrestricted” are separate claims.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;What the evidence supports&lt;/th&gt;
&lt;th&gt;What it does not establish&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;H3 weights are available&lt;/td&gt;
&lt;td&gt;MiniMax published H3 checkpoints under its community license&lt;/td&gt;
&lt;td&gt;That the license permits every location or use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A local run accepted a prompt&lt;/td&gt;
&lt;td&gt;That particular stack produced that output&lt;/td&gt;
&lt;td&gt;That hosted APIs behave the same way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A hosted route is less filtered&lt;/td&gt;
&lt;td&gt;One moderation layer or execution route differs&lt;/td&gt;
&lt;td&gt;That the service has no policy or upstream checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A text encoder is replaced&lt;/td&gt;
&lt;td&gt;One component in the pipeline changed&lt;/td&gt;
&lt;td&gt;That the model or its license became unrestricted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last distinction prompted a specific technical warning. The creator of Heretic advised users &lt;a href="https://www.reddit.com/r/StableDiffusion/comments/1vmdxzk/psa_im_the_creator_of_heretic_and_i_advise_you_to/" rel="noopener noreferrer"&gt;not to use “Heretic” models as H3 text encoders&lt;/a&gt;. Whatever a component swap changes, it should not be treated as proof that the full video system has been safely or correctly “uncensored.”&lt;/p&gt;

&lt;h2&gt;
  
  
  MiniMax H3 is open-weight, but the license still governs deployment
&lt;/h2&gt;

&lt;p&gt;MiniMax's &lt;a href="https://www.minimax.io/news/minimax-h3-open-source" rel="noopener noreferrer"&gt;official open-source announcement&lt;/a&gt; confirms the core H3 envelope: text, image, video, and audio context; 4–15 second output; up to 2K resolution; and native stereo audio. It also explains an architectural detail that matters when comparing local and hosted results: the released H3 Base is only part of the full system. Hosted context processing and the H3 Regenerate 2K stage are separate pieces, and the latter was not included in the initial weight release.&lt;/p&gt;

&lt;p&gt;So a self-hosted checkpoint and a hosted 2K API are not automatically equivalent, even before moderation enters the picture.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://huggingface.co/MiniMaxAI/MiniMax-H3/blob/main/LICENSE" rel="noopener noreferrer"&gt;MiniMax H3 Community License&lt;/a&gt; adds another boundary. As published on August 2, 2026, it defines an applicable territory that excludes the EU, UK, South Korea, and United States unless separate authorization is obtained. It also incorporates use restrictions, requires safeguards for hosted services built on H3, and prohibits bypassing MiniMax safety guardrails.&lt;/p&gt;

&lt;p&gt;This is why “open source” should not be used as shorthand for “no conditions.” If self-hosting is the plan, license review belongs before GPU planning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosted MiniMax H3 APIs have their own execution contract
&lt;/h2&gt;

&lt;p&gt;reAPI exposes H3 under the model ID &lt;code&gt;minimax-h3&lt;/code&gt;. The service supports text-to-video, image-to-video, and reference-to-video through one asynchronous endpoint. Outputs run from 4 to 15 seconds at &lt;code&gt;768P&lt;/code&gt; or &lt;code&gt;2K&lt;/code&gt;, with native stereo audio.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://reapi.ai/docs/minimax-h3" rel="noopener noreferrer"&gt;MiniMax H3 API documentation&lt;/a&gt; defines &lt;code&gt;content_filter&lt;/code&gt; as a boolean that defaults to &lt;code&gt;true&lt;/code&gt;. Direct API callers may set it to &lt;code&gt;false&lt;/code&gt;, which routes the task to an unmoderated execution channel. The reAPI playground pins filtering on. Current access details and rates are on the &lt;a href="https://reapi.ai/models/minimax-h3" rel="noopener noreferrer"&gt;MiniMax H3 model page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;“Unmoderated channel” is the execution label, not permission to ignore service rules. reAPI's &lt;a href="https://reapi.ai/acceptable-use" rel="noopener noreferrer"&gt;Acceptable Use Policy&lt;/a&gt; remains binding and prohibits sexually explicit content, non-consensual intimate imagery, any sexual content involving minors, illegal material, and attempts to circumvent safety systems. Upstream limits and output failures can still apply as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Call MiniMax H3 through reAPI with an explicit route choice
&lt;/h2&gt;

&lt;p&gt;The request below uses a safe product shot. Setting &lt;code&gt;content_filter&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; demonstrates the API contract without turning the example into a policy-evasion recipe.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://reapi.ai/api/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$REAPI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "minimax-h3",
    "prompt": "A handmade ceramic cup on a studio workbench, slow orbiting camera, soft morning window light, subtle room ambience and the quiet sound of a brush on clay",
    "aspect_ratio": "16:9",
    "duration": 6,
    "resolution": "768P",
    "content_filter": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The POST to &lt;code&gt;https://reapi.ai/api/v1/videos/generations&lt;/code&gt; returns a task ID rather than waiting for the render. Poll &lt;code&gt;GET https://reapi.ai/api/v1/tasks/{id}&lt;/code&gt; until the state becomes &lt;code&gt;completed&lt;/code&gt; or &lt;code&gt;failed&lt;/code&gt;. On success, read the generated URL from &lt;code&gt;output.video_urls&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For a moderated request, omit &lt;code&gt;content_filter&lt;/code&gt; or set it to &lt;code&gt;true&lt;/code&gt;. Do not write fallback code that changes the flag after a rejection without recording that decision. Route selection is part of your product's safety configuration and should be visible in logs and review tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  When reAPI is a better fit than self-hosting H3
&lt;/h2&gt;

&lt;p&gt;Self-hosting offers infrastructure control, but H3 is not a small single-file model. Teams must account for the checkpoints, compatible inference stack, capacity planning, media storage, task orchestration, and the license obligations attached to any downstream service.&lt;/p&gt;

&lt;p&gt;reAPI is the practical option when the goal is to ship H3 generation rather than operate the model. It provides one authenticated task flow for T2V, I2V, and R2V, including the hosted 2K route and native audio. It also makes the moderation route an explicit request field instead of leaving developers to infer behavior from a consumer interface.&lt;/p&gt;

&lt;p&gt;That recommendation is conditional. Choose self-hosting when you have the licensing position, GPUs, and engineering staff to own the complete deployment. Choose reAPI when a documented API, predictable task lifecycle, and explicit route control are more valuable than owning the inference layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  A safer way to evaluate “uncensored” model claims
&lt;/h2&gt;

&lt;p&gt;Before choosing any H3 provider, write down five facts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The exact model or checkpoint serving the request.&lt;/li&gt;
&lt;li&gt;Whether context preprocessing and 2K regeneration are included.&lt;/li&gt;
&lt;li&gt;Which moderation field or route is documented, and its default.&lt;/li&gt;
&lt;li&gt;Which acceptable-use and model-license terms govern the workload.&lt;/li&gt;
&lt;li&gt;How rejected tasks, logs, output retention, and user reports are handled.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This turns a community claim into an integration decision. It also prevents a local screenshot from being mistaken for a hosted-service guarantee.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is MiniMax H3 unrestricted?
&lt;/h3&gt;

&lt;p&gt;No. Local checkpoints, MiniMax's hosted workflow, and third-party APIs have different stacks, while licenses and acceptable-use restrictions still apply.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does reAPI support a less-filtered MiniMax H3 route?
&lt;/h3&gt;

&lt;p&gt;Yes. Direct API requests can set &lt;code&gt;content_filter: false&lt;/code&gt; to select reAPI's unmoderated execution channel. The playground keeps the filter enabled, and the Acceptable Use Policy applies to both routes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does open weight availability mean I can deploy H3 anywhere?
&lt;/h3&gt;

&lt;p&gt;No. The current MiniMax H3 Community License contains territorial and use restrictions. Review the license and obtain appropriate advice or authorization before deploying.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the reAPI MiniMax H3 endpoint support?
&lt;/h3&gt;

&lt;p&gt;It supports text-to-video, image-to-video, and reference-to-video under &lt;code&gt;minimax-h3&lt;/code&gt;, with 4–15 second output, &lt;code&gt;768P&lt;/code&gt; or &lt;code&gt;2K&lt;/code&gt; resolution, and native stereo audio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;“MiniMax H3 is shockingly uncensored” is a strong description of one community reaction, not a complete technical finding. The model is available as published weights, the full hosted workflow contains additional services, and API providers define their own routing contract. reAPI is worth considering because that contract is explicit: one H3 endpoint, documented &lt;code&gt;content_filter&lt;/code&gt; behavior, and a clear policy boundary around every route.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI video generators, reviewed by what their APIs reject</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Wed, 12 Aug 2026 05:35:58 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/ai-video-generators-reviewed-by-what-their-apis-reject-428m</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/ai-video-generators-reviewed-by-what-their-apis-reject-428m</guid>
      <description>&lt;p&gt;Most AI video generator reviews score the output: how the faces hold up, whether the physics look right, which one nails a dolly zoom. That is useful for picking a tool to open in a browser. It is close to useless if you are going to call one from code, because output quality changes with every checkpoint, while the parameter contract is what your integration has to live with for the next year.&lt;/p&gt;

&lt;p&gt;So here is the other review. Six video models, judged on what their APIs refuse to accept, where the refusal is silent, and how much of your client survives swapping one model for another. Everything below comes from a request surface I maintain.&lt;/p&gt;

&lt;p&gt;One framing note. I am not affiliated with any of these labs. I reach these models through third-party channels, so channel-level caps can differ from whatever a first-party API exposes, and none of this is official documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same parameter can have three contracts inside one model
&lt;/h2&gt;

&lt;p&gt;MiniMax H3 takes an &lt;code&gt;aspect_ratio&lt;/code&gt;. What that field means depends entirely on which mode you are in.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;&lt;code&gt;aspect_ratio&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text to video&lt;/td&gt;
&lt;td&gt;Required, and &lt;code&gt;adaptive&lt;/code&gt; is rejected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image to video&lt;/td&gt;
&lt;td&gt;Forbidden. Orientation comes from the source image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference to video&lt;/td&gt;
&lt;td&gt;Optional, defaults to &lt;code&gt;adaptive&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The middle row is the interesting one. The field is not ignored there, and it is not optional. Sending a valid enum value, one this same model accepts in another mode, fails the request. A generic client that always sets &lt;code&gt;aspect_ratio&lt;/code&gt; from user config works in two modes out of three, and the failure surfaces as a validation error about a field the docs told you to send.&lt;/p&gt;

&lt;p&gt;Seedance 2.5 has the same shape with different edges. It accepts seven ratios plus &lt;code&gt;adaptive&lt;/code&gt;, but first-plus-last-frame requests have to leave the size at &lt;code&gt;adaptive&lt;/code&gt;, because upstream rejects any other value at submit time. Same model, same field, and whether it is settable depends on which image mode you chose two fields earlier.&lt;/p&gt;

&lt;p&gt;Mode is not a filter over one schema. It is several schemas that happen to share field names.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documented as optional, enforced as required
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5 requires a prompt on every request, minimum three characters, image-to-video included. The documentation for the channel describes the prompt as optional when reference material is supplied. The endpoint disagrees and returns an error.&lt;/p&gt;

&lt;p&gt;The version history makes this worse for anyone upgrading. The 2.0 family let you submit an image with no prompt and take whatever motion the model inferred. Point the same client at 2.5 and every bare image-to-video call starts failing. Nothing in the model name signals that the required fields changed.&lt;/p&gt;

&lt;p&gt;"Optional" in a vendor doc is a hypothesis, not a fact. The cheap test is to fire one deliberately minimal request per mode during integration and record what comes back. It takes ten minutes, and the result is the only version of the schema you can trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The channel decides the parameter surface, not the model
&lt;/h2&gt;

&lt;p&gt;Veo 3.1 is one model. Reached through three different resale channels, it is three different APIs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Channel A&lt;/th&gt;
&lt;th&gt;Channel B&lt;/th&gt;
&lt;th&gt;Channel C&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;Fixed 8s&lt;/td&gt;
&lt;td&gt;Fixed 8s&lt;/td&gt;
&lt;td&gt;Selectable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolution control&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Negative prompt&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seed&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nothing here is a quality difference. It is the same weights. But an integration written against the third column, using seed for near-reproducible re-rolls and a negative prompt to suppress a recurring artifact, loses both the moment someone flips a routing env var to the second column. The requests still succeed. The outputs just stop respecting parameters you are still sending.&lt;/p&gt;

&lt;p&gt;The adapter layer you write to paper over those differences tends to widen the silence rather than close it. Mine did. Normalizing per-channel enums looks harmless:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;aspect_ratio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;aspect_ratio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;aspect_ratio&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;VALID_ASPECT_RATIOS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That clamp stops the channel erroring, and it means a user who asks for 21:9 where only two ratios exist gets a successful 16:9 render, billed normally, with nothing anywhere saying they were overruled. Parameters a channel never implemented are not read at all, so they vanish a layer earlier. Decide deliberately whether an unsupported value should clamp or fail, and tell the caller which one happened.&lt;/p&gt;

&lt;p&gt;The same config carried a fourth channel that was mapped, wired, and non-functional: the routing layer rejects it for this model with an invalid-tier error on every call. A provider being present in your config is not evidence that it is reachable.&lt;/p&gt;

&lt;p&gt;So &lt;code&gt;model_name&lt;/code&gt; is not a sufficient key for capability. &lt;code&gt;(model_name, channel)&lt;/code&gt; is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some models have no mode parameter at all
&lt;/h2&gt;

&lt;p&gt;HappyHorse 1.0 exposes a single model id and infers the mode from which media fields you populated, in priority order: a video URL wins, then a first-frame image, then a list of reference images, then prompt-only.&lt;/p&gt;

&lt;p&gt;This is elegant until you leave a field set. A client that keeps &lt;code&gt;video_url&lt;/code&gt; from the previous request while the user is now trying a text-to-video generation does not get an error. It gets a video edit. The request is well formed, the mode is just not the one anyone intended, and the bill lands in the edit tier.&lt;/p&gt;

&lt;p&gt;Anywhere the API derives intent from field presence rather than an explicit mode enum, clear your media fields on mode switch. Explicitly, not by trusting your form state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraints that no schema can express
&lt;/h2&gt;

&lt;p&gt;Three real ones, all of which have to live in application code because a flat parameter list cannot hold them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MiniMax H3 accepts audio references, but not alone. At least one image or video reference has to accompany them. That is a cross-field rule, not a field rule.&lt;/li&gt;
&lt;li&gt;The same model's wire format allows a last-frame-only image-to-video request. Expressing "either frame, at least one" in a schema of independent fields is not possible, so the form requires a first frame and quietly gives up some capability.&lt;/li&gt;
&lt;li&gt;Grok Imagine Video 1.5 is image-to-video only, and its audio is generated in the same pass with no toggle. There is no audio parameter to expose, so "does this model support audio" and "does this model have an audio parameter" have different answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a place where a schema-driven form or a generated client rejects valid requests, or accepts invalid ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Billing is part of the contract
&lt;/h2&gt;

&lt;p&gt;No numbers here, since rates move and differ per channel. The shapes are the part a per-second price will not tell you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attaching a reference video can make the bill count input seconds on top of output seconds, with a floor and a ceiling. A ten-second reference clip is not free context. Trim references to the segment that demonstrates the thing you want.&lt;/li&gt;
&lt;li&gt;Auto-duration, where the model chooses the length, reserves at the maximum and settles afterward. If your app quotes the user before generating, auto-duration and upfront quoting are in conflict, and the model tends to pick short.&lt;/li&gt;
&lt;li&gt;Reference images past a free allowance can bill individually, so "up to 9 images" and "9 images at no extra cost" are different sentences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I check before integrating
&lt;/h2&gt;

&lt;p&gt;The review criteria, in the order that has saved me the most time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fire one minimal request per mode and record what comes back. That is the real schema.&lt;/li&gt;
&lt;li&gt;Diff the required fields across modes, not just across models.&lt;/li&gt;
&lt;li&gt;Ask which fields are forbidden, not just which are required. Forbidden fields are the ones docs skip.&lt;/li&gt;
&lt;li&gt;Confirm which channel you are on and pin it. Capability follows the channel.&lt;/li&gt;
&lt;li&gt;Check whether mode is explicit or inferred from field presence.&lt;/li&gt;
&lt;li&gt;Find the cross-field rules, since those are the errors your form will not catch.&lt;/li&gt;
&lt;li&gt;Read the billing shape for reference media before you design an upload UI around it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of that tells you which model makes the prettiest video. That is deliberate. I have no benchmark worth publishing, and a quality verdict written today expires at the next checkpoint, while a contract quirk tends to outlive several.&lt;/p&gt;

&lt;p&gt;If you want to poke at these surfaces before writing any client code, &lt;a href="https://clipdance.ai/" rel="noopener noreferrer"&gt;clipdance.ai&lt;/a&gt; puts the reference-to-video parameters of several of these models behind form controls, which surfaces the per-mode field sets and the upload ceilings faster than reading error strings does. The models belong to their respective labs; this is third-party access.&lt;/p&gt;

&lt;p&gt;This space is still shipping capability faster than it ships stable contracts, and a review scored on output quality cannot see that at all. If you have hit a rejection I did not list, especially a silent one, I would like to read it in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>video</category>
      <category>api</category>
      <category>generativeai</category>
    </item>
    <item>
      <title>Seedance 2.5 vs Wan 3.0: separating what ships from what's promised</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Sat, 08 Aug 2026 05:15:50 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-vs-wan-30-separating-what-ships-from-whats-promised-5fp2</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-vs-wan-30-separating-what-ships-from-whats-promised-5fp2</guid>
      <description>&lt;p&gt;The 30-second club just got its second member. ByteDance's Seedance 2.5 has been generating half-minute takes with synced audio for a while now. On August 6, Alibaba opened the public beta for Wan 3.0 and claimed the same headline number. Launch coverage points to a formal event on August 10 in Hangzhou, so by the time you read this there may be more official material than I had.&lt;/p&gt;

&lt;p&gt;That timing gap shapes everything below. One of these models I can poke at through a third-party channel and describe from its actual parameter surface. The other is days old, lives behind Alibaba's own platforms, and has no public API documentation yet. I am not going to pretend those are symmetrical sources, so this comparison is explicit about where each fact comes from.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each side can prove today
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Seedance 2.5&lt;/th&gt;
&lt;th&gt;Wan 3.0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Length&lt;/td&gt;
&lt;td&gt;4 to 30 s, you pick the exact second&lt;/td&gt;
&lt;td&gt;"Native 30s Duration" with what Alibaba calls intelligent duration control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio&lt;/td&gt;
&lt;td&gt;on by default, dialogue via double quotes, can be switched off&lt;/td&gt;
&lt;td&gt;"sound design" and "immersive audiovisual" per the official site; no documented control surface yet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;References&lt;/td&gt;
&lt;td&gt;30 images + 10 videos + 10 audio files&lt;/td&gt;
&lt;td&gt;"up to 20 reference assets, including complex document and webpage parsing"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolution&lt;/td&gt;
&lt;td&gt;480p / 720p on available channels&lt;/td&gt;
&lt;td&gt;not officially pinned; beta listings show a 480p tier and coverage reports 1080p&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Editing&lt;/td&gt;
&lt;td&gt;generation only; chaining via a returned last frame&lt;/td&gt;
&lt;td&gt;instruction-based and reference-based editing, presented as a core feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;third-party web platforms and API aggregators, now&lt;/td&gt;
&lt;td&gt;Alibaba's own platforms, public beta; API "opening soon"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open weights&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no; the Wan-Video GitHub org still stops at Wan 2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources for the right column: the wan.video homepage copy, the Wan-Video GitHub organization, and the fact that Alibaba Cloud's Model Studio documentation index still tops out at Wan 2.7 API references as I write this. Everything on the left comes from using Seedance 2.5 and reading its request schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reference systems solve different problems
&lt;/h2&gt;

&lt;p&gt;This is the comparison that actually matters, and it is not about the numbers 50 and 20.&lt;/p&gt;

&lt;p&gt;Seedance 2.5 references are media: you feed it images, clips, and audio tracks, and they answer the question "make it look and sound like this." A character sheet keeps a face stable across takes. An audio track sets the mood the video gets generated to fit. It is a consistency machine.&lt;/p&gt;

&lt;p&gt;Wan 3.0's headline reference feature is document and webpage parsing. Feed it a deck, a spreadsheet, a page, and it builds a video of that content. That answers a different question entirely: "make a video about this." If the demos hold up, that is closer to an explainer-video pipeline than to a cinematic generator.&lt;/p&gt;

&lt;p&gt;Those are both legitimate directions. They are just not the same product decision, and which one you need depends on whether your input is a mood board or a quarterly report. I have seen nothing yet on how well Wan 3.0 handles the media-consistency job, and Seedance has no answer at all to the document job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Editing is Wan's bet
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5, at least through the channels I can reach, generates. If you want to change a finished clip you regenerate, or you chain a new segment off the returned last frame. There is no edit mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reapi.ai/models/wan-3-0" rel="noopener noreferrer"&gt;Wan 3.0&lt;/a&gt; puts "Precision Video Editing" on its front page, with both instruction-driven and reference-driven variants. Editing inside the generation model, rather than in a separate tool, would collapse a real step out of the workflow. Whether it works well enough to rely on is exactly the kind of thing a homepage cannot tell you, and I flag it here as the feature I most want to test rather than one I can vouch for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The openness twist
&lt;/h2&gt;

&lt;p&gt;Wan built its reputation on open weights. Wan 2.1 and 2.2 are sitting on GitHub and a lot of self-hosted pipelines run them. So it is worth saying plainly: Wan 3.0 has no downloadable weights, no checkpoint, no repo. As of this week it is a hosted, closed model, same as Seedance 2.5. If you were waiting for 3.0 to upgrade a self-hosted stack, nothing has shipped for you yet, and nobody official has said whether it will.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I cannot compare and will not fake
&lt;/h2&gt;

&lt;p&gt;Output quality, because I have not generated with Wan 3.0 and a launch-week verdict based on cherry-picked demo reels would be worthless anyway. Pricing, because Seedance costs vary by channel and Wan's beta pricing is fragmentary. And the fine print that decides real integrations, like Wan's prompt limits, rate behavior, or how those 20 reference slots are actually typed, because the API docs that would answer this do not exist publicly yet.&lt;/p&gt;

&lt;p&gt;That last gap cuts one way for now. If you need a 30-second audio-native model inside a pipeline this week, Seedance 2.5 is the one with a schema you can script against today; the parameter surface is all exposed in the browser at &lt;a href="https://seedance2.so/seedance-25" rel="noopener noreferrer"&gt;seedance 2.5&lt;/a&gt; if you want to see it without writing code. Wan 3.0 deserves a real evaluation in about a month, once the documentation lands and the launch-week fog clears. I plan to write that follow-up, and I honestly do not know yet which way it will go.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>video</category>
      <category>generativeai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Seedance 2.5 vs MiniMax H3 (Hailuo 03): a spec-level comparison for builders</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Sat, 08 Aug 2026 05:06:52 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-vs-minimax-h3-hailuo-03-a-spec-level-comparison-for-builders-53oe</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-vs-minimax-h3-hailuo-03-a-spec-level-comparison-for-builders-53oe</guid>
      <description>&lt;p&gt;Two of the most interesting audio-native video models right now sit in adjacent slots: ByteDance's Seedance 2.5 and MiniMax's H3, also known as Hailuo 03. Both generate speech, sound effects, and music in the same pass as the picture. Both take text, images, and reference media as input. The marketing copy makes them sound interchangeable. The parameter surfaces say otherwise, and the differences are the kind that decide pipelines, not preferences.&lt;/p&gt;

&lt;p&gt;I use both through the same third-party platform, which makes the comparison unusually clean: same harness, same uploaders, same meter, two different sets of constraints. The usual caveat applies: these are the models as exposed on the channels available today, not official documentation, and channel-level caps can differ from whatever first-party APIs eventually expose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-table version
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Seedance 2.5&lt;/th&gt;
&lt;th&gt;MiniMax H3 (Hailuo 03)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clip length&lt;/td&gt;
&lt;td&gt;4 to 30 s (default 5)&lt;/td&gt;
&lt;td&gt;4 to 15 s (default 6)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;480p / 720p, MP4 or MOV&lt;/td&gt;
&lt;td&gt;fixed 2K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio&lt;/td&gt;
&lt;td&gt;on by default, can be switched off&lt;/td&gt;
&lt;td&gt;always on, stereo, no toggle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt&lt;/td&gt;
&lt;td&gt;required, minimum 3 characters&lt;/td&gt;
&lt;td&gt;required, 1 to 7,000 characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aspect ratio&lt;/td&gt;
&lt;td&gt;adaptive by default in every mode&lt;/td&gt;
&lt;td&gt;must be chosen for text-to-video; derived from the image for image-to-video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference budget&lt;/td&gt;
&lt;td&gt;30 images + 10 videos + 10 audio&lt;/td&gt;
&lt;td&gt;9 images + 3 videos + 3 audio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference video cap&lt;/td&gt;
&lt;td&gt;30 s combined&lt;/td&gt;
&lt;td&gt;15 s combined&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio-only reference&lt;/td&gt;
&lt;td&gt;accepted&lt;/td&gt;
&lt;td&gt;rejected, needs an image or video alongside&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every row below gets unpacked where it changes a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Length and resolution pull in opposite directions
&lt;/h2&gt;

&lt;p&gt;The counterintuitive part first. The newer Seedance tops out at 720p on the channels you can use today, while H3 ships fixed 2K with no resolution field at all. Meanwhile Seedance doubles the length ceiling: 30-second single takes against H3's 15.&lt;/p&gt;

&lt;p&gt;So the first question is not "which model is better." It is "is your deliverable long or sharp." A 30-second continuous take with synced dialogue is something only one of these produces. A crisp 2K clip that goes straight into an edit without an upscale step is the other one. If you need both properties, you are choosing which post-production step you tolerate: upscaling Seedance output, or cutting and chaining H3 clips.&lt;/p&gt;

&lt;p&gt;On chaining: &lt;a href="https://seedance2.so" rel="noopener noreferrer"&gt;Seedance 2.5&lt;/a&gt; has a &lt;code&gt;return_last_frame&lt;/code&gt; flag that hands you the closing frame as a still, which you can feed back as the first frame of the next request. H3 has no equivalent on this channel, so extending past 15 seconds means prompt continuity rather than pixel continuity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audio: both native, different philosophies
&lt;/h2&gt;

&lt;p&gt;Seedance treats audio as a parameter. It is on by default, you can switch it off, and dialogue follows a documented convention: wrap spoken lines in double quotes and they become speech, while unquoted text stays scene direction.&lt;/p&gt;

&lt;p&gt;H3 treats audio as part of the output. Stereo, always on, no toggle exposed. If your pipeline needs silent clips because licensed music gets added later, that difference is a checkbox on one model and a strip-the-track post step on the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aspect ratio: one model trusts you, the other decides
&lt;/h2&gt;

&lt;p&gt;This is my favorite structural difference because neither choice is wrong. Seedance 2.5 defaults to &lt;code&gt;adaptive&lt;/code&gt; in every mode and lets the model pick a ratio when you do not care. H3 refuses &lt;code&gt;adaptive&lt;/code&gt; for text-to-video, forcing an explicit choice, and forbids the field entirely for image-to-video, where orientation comes from your source image.&lt;/p&gt;

&lt;p&gt;If your output feeds a fixed slot, a 9:16 shorts feed or a 21:9 banner loop, H3's forced choice is a feature: there is no way to forget it. If you are exploring and want the model to compose freely, Seedance's adaptive default saves a decision. Both cover the same range from 21:9 to 9:16.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference systems: differently sized, differently shaped
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5 gives you 30 images, 10 videos, and 10 audio tracks, with reference videos capped at 30 seconds combined. Audio alone is a valid input, which flips the order of operations for music-first work: finish the track, generate the video to fit it. Real-person reference images are explicitly accepted on the channel I use, with the obvious consent and disclosure obligations attached.&lt;/p&gt;

&lt;p&gt;H3 gives you 9 images, 3 videos, and 3 audio tracks, videos capped at 15 seconds combined, and audio can never be the only reference. The budget is smaller but not small: nine images is still enough for a character sheet plus a location set.&lt;/p&gt;

&lt;p&gt;The advice that holds for both: spend the budget on roles, not volume. One character reference, one environment, one camera-movement clip beats twenty near-duplicates on either model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Billing shape, without the numbers
&lt;/h2&gt;

&lt;p&gt;I will not quote prices since they vary by channel, but two structural things are worth knowing before you script against either model.&lt;/p&gt;

&lt;p&gt;Both bill reference-video input seconds on top of the seconds you generate, so a long style-reference clip quietly multiplies cost on both. Trim references to the segment that matters.&lt;/p&gt;

&lt;p&gt;The asymmetries: H3 meters reference images past the fifth, so image count is a cost dial there, while Seedance image references add nothing. Seedance applies a minimum floor to the bill when reference videos are attached. Check the pricing page of whatever channel you use and read the reference-media rows specifically; per-second rates are the least surprising part of either bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one, when
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Long continuous takes, chained scenes, dialogue-led story beats: Seedance 2.5. The 30-second ceiling plus last-frame chaining is the whole game.&lt;/li&gt;
&lt;li&gt;Sharp deliverables with no upscale step: H3. Fixed 2K out of the box.&lt;/li&gt;
&lt;li&gt;Music-first workflows: Seedance 2.5, since a lone audio track is a legal input.&lt;/li&gt;
&lt;li&gt;Fixed-format feeds where a forgotten ratio ruins a batch: H3's mandatory choice protects you from yourself.&lt;/li&gt;
&lt;li&gt;Reference-heavy character consistency work: Seedance 2.5's 50-file budget.&lt;/li&gt;
&lt;li&gt;Quick social drafts under 15 seconds: genuinely either. This is where the two overlap almost completely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On output quality I am deliberately silent. Quality is prompt-dependent, content-dependent, and moves with every silent model update; I have no benchmark rigorous enough to publish and would not trust one that fit in a blog post. The specs above are the part you can actually plan against.&lt;/p&gt;

&lt;p&gt;Both models run in the browser on the platform I use for all of this: the H3 side lives at &lt;a href="https://seedance2.so/minimax-h3" rel="noopener noreferrer"&gt;minimax-h3&lt;/a&gt;, and Seedance 2.5 has its own page on the same site. Underneath it is ByteDance's model and MiniMax's model respectively, reached through a third-party channel. Try the same prompt on both at 15 seconds, watch where each one spends your attention in review, and the right default for your pipeline usually announces itself within an afternoon.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>generativeai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Seedance 2.5 field notes: 30-second takes, native audio, and the limits that will shape your build</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Sat, 08 Aug 2026 04:59:45 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-field-notes-30-second-takes-native-audio-and-the-limits-that-will-shape-your-build-58ap</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-field-notes-30-second-takes-native-audio-and-the-limits-that-will-shape-your-build-58ap</guid>
      <description>&lt;p&gt;Seedance 2.5 changes the two numbers that made AI video awkward to build around: clip length (15 seconds becomes 30) and audio (none becomes dialogue, sound effects, and music generated in the same pass). The headline features are easy to find. The constraints are not, and the constraints are what decide whether the model fits your pipeline. These notes cover the parameter surface as it exists on the channels you can actually use today, gotchas first.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1d7zret2za0abkqldzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1d7zret2za0abkqldzz.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One framing note before the details: Seedance is ByteDance's model family. I work with it through third-party channels, so nothing here is official documentation, and channel-level caps can differ from whatever a first-party API eventually exposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers that changed
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Seedance 2.0 family&lt;/th&gt;
&lt;th&gt;Seedance 2.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clip length&lt;/td&gt;
&lt;td&gt;4 to 15 s&lt;/td&gt;
&lt;td&gt;4 to 30 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio&lt;/td&gt;
&lt;td&gt;none, add it in post&lt;/td&gt;
&lt;td&gt;generated with the video: speech, SFX, background music&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image-to-video prompt&lt;/td&gt;
&lt;td&gt;optional&lt;/td&gt;
&lt;td&gt;required, minimum 3 characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference budget&lt;/td&gt;
&lt;td&gt;9 images + 3 videos + 3 audio&lt;/td&gt;
&lt;td&gt;30 images + 10 videos + 10 audio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio-only reference&lt;/td&gt;
&lt;td&gt;rejected (needs an image or video)&lt;/td&gt;
&lt;td&gt;accepted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolution&lt;/td&gt;
&lt;td&gt;up to 4K on some tiers&lt;/td&gt;
&lt;td&gt;480p / 720p&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two rows deserve a second look. The reference budget: 30 + 10 + 10 is 50, which is exactly the "50 multimodal reference files" figure from the launch messaging. That number turns out to be a real upload limit, not marketing rounding. And the resolution row goes down, not up. More on that at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt is required now, even for image-to-video
&lt;/h2&gt;

&lt;p&gt;The 2.0 family let you submit an image with no prompt and take whatever motion the model guessed. &lt;a href="https://seedance2.so/seedance-2-5" rel="noopener noreferrer"&gt;Seedance 2.5&lt;/a&gt; rejects any request without a prompt, image-to-video included, with a floor of three characters.&lt;/p&gt;

&lt;p&gt;This reads like a regression and behaves like a feature. An image-to-video prompt should describe what changes, not what exists; the model already sees the frame. Being forced to write "she turns toward the window, curtain moves in the wind" instead of submitting a bare image is the difference between specifying motion and gambling on it. My re-roll rate dropped once the habit formed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dialogue goes in double quotes
&lt;/h2&gt;

&lt;p&gt;Audio generation defaults to on and covers three layers at once: spoken lines, sound effects, and background music. The convention that makes it usable: wrap anything that should be spoken in double quotes. Text outside quotes is treated as scene direction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rainy night outside a convenience store. A woman in her twenties
closes her umbrella and pushes the door open. The bell above the
door rings. The clerk looks up and says "Late shift again?"
She smiles: "Yeah. Overtime."
Camera: slow zoom-in from outside, through the glass.
Warm fluorescent tones.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two practical notes. Only the quoted lines are candidates for speech, so keep dialogue and direction visually separate, screenplay style. And props that make noise are doing double duty: the rain and the bell in that prompt are also sound-effect directives. A prompt made of abstract mood words gives the audio layer nothing to attach to.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Seedance 2.5 reference budget and its fine print
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Per file&lt;/th&gt;
&lt;th&gt;Combined cap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Images&lt;/td&gt;
&lt;td&gt;up to 30&lt;/td&gt;
&lt;td&gt;JPEG / PNG / WEBP and friends&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Videos&lt;/td&gt;
&lt;td&gt;up to 10&lt;/td&gt;
&lt;td&gt;2 to 30 s, up to 200 MB, MP4 / MOV&lt;/td&gt;
&lt;td&gt;30 s total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio&lt;/td&gt;
&lt;td&gt;up to 10&lt;/td&gt;
&lt;td&gt;2 to 30 s, up to 15 MB, WAV / MP3&lt;/td&gt;
&lt;td&gt;30 s total&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The combined 30-second caps are the ones that bite. Uploading a whole take as a style reference will hit the ceiling fast; trim reference clips to the segment that actually demonstrates what you want.&lt;/p&gt;

&lt;p&gt;Audio-only reference is new. The 2.0 channel required an image or a video somewhere in the mix; 2.5 accepts a lone audio track. If your workflow starts from a finished song, the order of operations flips: track first, video generated to fit it.&lt;/p&gt;

&lt;p&gt;Real-person reference images are accepted on this channel. The obvious rules apply: faces you own or have permission to use, and check the synthetic-media disclosure settings on whatever platform you publish to.&lt;/p&gt;

&lt;p&gt;The budget is also better spent on roles than on volume: a character sheet, a background set, a camera-movement clip. Thirty near-duplicate images of the same face buy you very little.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chaining past 30 seconds
&lt;/h2&gt;

&lt;p&gt;There is a &lt;code&gt;return_last_frame&lt;/code&gt; flag. Set it and the response includes the closing frame as a still image alongside the video. Feed that still back as the first frame of the next request (first-plus-last-frame mode) and you have a manual scene-chaining loop: 30-second segments that start from pixel continuity instead of prompt continuity. Not guaranteed seamless, but a far better starting point than describing the previous shot from memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost scales the way you expect, plus one quirk
&lt;/h2&gt;

&lt;p&gt;Generation cost is per second and tiered by resolution, so a 30 s / 720p take costs several multiples of a 5 s / 480p draft. The workflow that follows is obvious once stated: iterate composition at 5 s / 480p, commit to full length once the prompt is settled. Doing it in the other order is expensive.&lt;/p&gt;

&lt;p&gt;The quirk: on the channel I use, attaching a reference video makes billing count input seconds as well as output seconds, with a minimum floor. Image and audio references add no billable time. So trimming reference clips saves money on top of staying under the combined cap. Check your channel's pricing page for the exact mechanics before you script anything against it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ceilings, stated plainly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;480p and 720p only, on the channels available right now. If the deliverable is 4K, budget an upscale step. Whether 2.5 gets a higher ceiling later is unannounced as far as I can find.&lt;/li&gt;
&lt;li&gt;No seed parameter, so no reproducibility. Two identical requests are two different videos.&lt;/li&gt;
&lt;li&gt;MOV output exists for color-sensitive post work, but some players will not open it. Stay on MP4 unless you know why you need MOV.&lt;/li&gt;
&lt;li&gt;Seven aspect ratios from 21:9 to 9:16, plus an adaptive default. First-plus-last-frame requests keep the input image's ratio regardless.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Trying it without writing code
&lt;/h2&gt;

&lt;p&gt;If you want to poke at the parameter surface before committing to an integration, &lt;a href="https://seedance2.so/" rel="noopener noreferrer"&gt;seedance 2.0&lt;/a&gt; runs Seedance 2.5 in the browser with everything above exposed as form controls, which is how I mapped most of this. It is ByteDance's model underneath, reached through a third-party channel.&lt;/p&gt;

&lt;p&gt;The shift since 2.0 is easy to summarize: that generation produced clips you edited into scenes; Seedance 2.5 produces scenes. Thirty seconds with synced sound covers a full beat of story, an entire product demo, most of a short. If you have built against it and hit constraints I missed, I would genuinely like to hear them in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>video</category>
      <category>generativeai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Seedance 2.5 is priced 53% above 2.0 per token, and its 480p frame shrank</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Wed, 05 Aug 2026 03:55:51 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-is-priced-53-above-20-per-token-and-its-480p-frame-shrank-5fki</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/seedance-25-is-priced-53-above-20-per-token-and-its-480p-frame-shrank-5fki</guid>
      <description>&lt;p&gt;Seedance 2.5's API opens on August 7. ByteDance published the pricing ahead of it, and there is a detail in there that will quietly break your cost model if you carry it over from 2.0.&lt;/p&gt;

&lt;p&gt;Video is quoted per second and metered per token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tokens = (input_video_seconds + output_seconds) × width × height × fps / 1024
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;fps is fixed at 24. Multiply by the per-million-token rate and that is the bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The published rates
&lt;/h2&gt;

&lt;p&gt;USD per million tokens:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;No video input&lt;/th&gt;
&lt;th&gt;With video input&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5 (480p, 720p)&lt;/td&gt;
&lt;td&gt;10.70&lt;/td&gt;
&lt;td&gt;6.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 (480p, 720p)&lt;/td&gt;
&lt;td&gt;7.00&lt;/td&gt;
&lt;td&gt;4.30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 (1080p)&lt;/td&gt;
&lt;td&gt;7.70&lt;/td&gt;
&lt;td&gt;4.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 (4K)&lt;/td&gt;
&lt;td&gt;4.00&lt;/td&gt;
&lt;td&gt;2.40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;2.5 costs 52.9% more per token without video input and 48.8% more with it. Only 480p and 720p are published for 2.5. No 1080p, no 4K, and offline inference reads "not supported yet".&lt;/p&gt;

&lt;p&gt;Look at the 4K row before you move on. It is the cheapest tier per token, 43% below 480p, and it is also the most expensive output on the board, because a 3840×2160 frame carries 19.4 times the pixels of what 480p actually renders. The rate drops 43% while the token count climbs 1940%. Comparing providers by scanning the rate column gets you the wrong answer by roughly a factor of eleven.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 480p frame changed and nobody said so
&lt;/h2&gt;

&lt;p&gt;This is not in any release note. It falls out of dividing ByteDance's own worked examples by their own token rates.&lt;/p&gt;

&lt;p&gt;Their published five-second, 16:9, no-reference examples:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;480p&lt;/th&gt;
&lt;th&gt;720p&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5&lt;/td&gt;
&lt;td&gt;$0.514 ($0.103/s)&lt;/td&gt;
&lt;td&gt;$1.156 ($0.231/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0&lt;/td&gt;
&lt;td&gt;$0.352 ($0.070/s)&lt;/td&gt;
&lt;td&gt;$0.756 ($0.151/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Divide price by token rate to recover the token count, then by 24/1024 to recover pixels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pricePerVideo&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ratePerMillion&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pixels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;outputSeconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Seedance 2.5, 480p:  0.514 / (10.70/1e6) / 5  =  9,607 tokens/sec&lt;/span&gt;
&lt;span class="c1"&gt;//                      9,607 * 1024/24          =  409,899 px  -&amp;gt;  ~854 x 480&lt;/span&gt;
&lt;span class="c1"&gt;// Seedance 2.0, 480p:  0.352 / (7.00/1e6)  / 5  = 10,057 tokens/sec&lt;/span&gt;
&lt;span class="c1"&gt;//                      10,057 * 1024/24         =  429,105 px  -&amp;gt;  ~873 x 491&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;720p resolves to 21,600 tokens per second on both versions, which is exactly 1280 × 720. That the same arithmetic lands on a clean, verifiable number at 720p is what makes the 480p result trustworthy instead of a rounding artifact.&lt;/p&gt;

&lt;p&gt;So 2.5 renders 480p at a true 16:9 854 × 480 while 2.0 uses a slightly taller frame. That 4.5% pixel reduction explains a discrepancy that otherwise looks like a pricing error: &lt;strong&gt;480p rises 46% per second while the token rate rises 53%.&lt;/strong&gt; At 720p, where the frame is unchanged, the two match exactly.&lt;/p&gt;

&lt;p&gt;If you quote customers per second, your 2.0 conversion factor is wrong on 2.5 by about five percent at 480p.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your input clip bills like generated video
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;input_video_seconds&lt;/code&gt; sits inside the same parenthesis as the output. A reference-to-video job pays for the source clip at the same rate as the frames the model invented.&lt;/p&gt;

&lt;p&gt;Providers surface this as a discounted per-second rate for reference mode, which reads like a deal until you total it. Seedance 2.5's published range makes the point on its own: a five-second 720p generation costs $1.244 with a short reference and $4.838 with a 30-second one. Same output, 3.9× the bill.&lt;/p&gt;

&lt;p&gt;2.5 also doubled the input window, from 15 seconds on 2.0 to 30.&lt;/p&gt;

&lt;p&gt;There is a floor too, and the number is unpublished. Their examples price two-second and four-second inputs identically, which implies a minimum around four seconds. The docs point at a spreadsheet calculator rather than stating it. If you resell this, customers sending two-second clips cost you more than your arithmetic predicts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Converting any token rate to per-second
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TOKENS_PER_SEC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;480p@2.5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;854&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;//   9,607&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;480p@2.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;864&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;496&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;//  10,044&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;720p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="mi"&gt;1280&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;720&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;//  21,600&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1080p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="mi"&gt;1920&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;//  48,600&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;4k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="mi"&gt;3840&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2160&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// 194,400&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;costUsd&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ratePerMillion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inputSec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;outputSec&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputSec&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;outputSec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;TOKENS_PER_SEC&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;ratePerMillion&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Sanity check against the vendor's own example:&lt;/span&gt;
&lt;span class="nf"&gt;costUsd&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;720p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ratePerMillion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;outputSec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// 0.756&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line matches ByteDance's published figure exactly, so the formula is not an approximation.&lt;/p&gt;

&lt;p&gt;One caveat for anyone metering downstream: token counts are estimates until the job finishes. The formula predicted 40,176 for a config where the API returned 40,594, about 1% high. Bill on the returned &lt;code&gt;usage.completion_tokens&lt;/code&gt;, not on your estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I could not determine
&lt;/h2&gt;

&lt;p&gt;Why 1080p and 4K have no published rate for 2.5. Either those tiers do not ship at launch or they arrive separately.&lt;/p&gt;

&lt;p&gt;The exact minimum input duration. It exists and it is not a published number.&lt;/p&gt;

&lt;p&gt;Whether the same formula holds outside the Seedance family. Pixels × duration × fps is a plausible general shape, but the constants and the input-billing rule are not something I would assume for Veo, Kling or Sora without checking. If you have run the same back-solve against those, I would genuinely like to know how it came out.&lt;/p&gt;

&lt;p&gt;Full writeup with the Seedance 2.0 rate card in per-second and per-minute terms: &lt;a href="https://reapi.ai/blog/seedance-2-5-pricing-per-token" rel="noopener noreferrer"&gt;reapi.ai/blog/seedance-2-5-pricing-per-token&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live parameter reference and a browser playground: &lt;a href="https://reapi.ai/models/seedance-2-0" rel="noopener noreferrer"&gt;reapi.ai/models/seedance-2-0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>video</category>
      <category>pricing</category>
    </item>
    <item>
      <title>Video generation pricing, fully itemized: what a second of Seedance 2.0 actually costs</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:40:34 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/video-generation-pricing-fully-itemized-what-a-second-of-seedance-20-actually-costs-370i</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/video-generation-pricing-fully-itemized-what-a-second-of-seedance-20-actually-costs-370i</guid>
      <description>&lt;p&gt;Most video-generation pricing pages give you a "from $X" and stop there. You find out what a job really costs after you have already run it.&lt;/p&gt;

&lt;p&gt;This post is the opposite. Every rate we charge for video, itemized, plus the two billing rules that decide what lands on your invoice. We cut all of it by 15-21% this week, ahead of the Seedance 2.5 API launching on August 7.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5 ships on the 7th and we will have it up the same day. Seedance 2.0 is not going anywhere and is not losing features, but with 2.5 arriving it belongs at a lower price. So we moved it now instead of waiting.&lt;/p&gt;

&lt;p&gt;To be clear about what does not exist yet: 2.5 is unreleased. Nobody has API access to it today, us included.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full video rate card
&lt;/h2&gt;

&lt;p&gt;Priced per second of output, in USD. The second column applies when your request includes a reference video.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Resolution&lt;/th&gt;
&lt;th&gt;Text / image input&lt;/th&gt;
&lt;th&gt;With reference video&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seedance 2.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.072&lt;/td&gt;
&lt;td&gt;$0.044&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.154&lt;/td&gt;
&lt;td&gt;$0.094&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1080p&lt;/td&gt;
&lt;td&gt;$0.383&lt;/td&gt;
&lt;td&gt;$0.233&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4K&lt;/td&gt;
&lt;td&gt;$0.780&lt;/td&gt;
&lt;td&gt;$0.480&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seedance 2.0 Fast&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.059&lt;/td&gt;
&lt;td&gt;$0.034&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.124&lt;/td&gt;
&lt;td&gt;$0.075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seedance 2.0 Mini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.036&lt;/td&gt;
&lt;td&gt;$0.023&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.077&lt;/td&gt;
&lt;td&gt;$0.047&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mini moved the furthest. Its 480p reference tier is $0.023 per second, so a five-second clip runs about eleven cents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two rules that decide your bill
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Billing is per second, not per clip.&lt;/strong&gt; A four-second test costs four seconds. There is no five-second minimum quietly rounding your experiments up, which matters when you are burning through prompt variations to find one that works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference mode bills your input clip plus your output.&lt;/strong&gt; Send a ten-second reference and generate five seconds, and you are charged for fifteen. This is the same basis the model itself uses to meter the job, so the estimate you compute up front is the number you pay. It also means the cheaper per-second rate in that second column is not free money: a long reference clip can cost more in total than a short text-to-video job at the higher rate. Probe your source length before you quote a price to your own users.&lt;/p&gt;

&lt;p&gt;Failed generations refund automatically. You do not pay for a job the model could not finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calling it
&lt;/h2&gt;

&lt;p&gt;Media generation is asynchronous. You POST a job, get an id back immediately, then poll.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://reapi.ai/api/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer rk_live_xxx"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "doubao-seedance-2.0-face",
    "prompt": "A kitten yawning at the camera, cinematic warm tones",
    "resolution": "720p",
    "size": "16:9",
    "duration": 5
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns &lt;code&gt;{ "id": "task_...", "status": "processing" }&lt;/code&gt;. Then poll until the status goes terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;waitForVideo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://reapi.ai/api/v1/tasks/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;completed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;video_urls&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;failed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poll every one to two seconds. The account limit is five requests per second and polling counts against it, so a tight loop across many concurrent jobs will start collecting 429s.&lt;/p&gt;

&lt;p&gt;The same shape covers images and audio: swap &lt;code&gt;videos&lt;/code&gt; for &lt;code&gt;images&lt;/code&gt; or &lt;code&gt;audio&lt;/code&gt; in the path, poll the identical &lt;code&gt;/tasks/{id}&lt;/code&gt; endpoint. One key works across all of them, LLM endpoints included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference images and real faces
&lt;/h2&gt;

&lt;p&gt;Seedance has a consumer build that rejects real human faces on sight. That is not the build behind this API. Reference images containing real people work, up to nine of them per request.&lt;/p&gt;

&lt;p&gt;Safety checking is a parameter you control. &lt;code&gt;nsfw_checker&lt;/code&gt; defaults to &lt;code&gt;true&lt;/code&gt;, and direct API callers can send &lt;code&gt;false&lt;/code&gt;, at any resolution up to 4K.&lt;/p&gt;

&lt;p&gt;Relaxed is not unlimited, and it would be dishonest to imply otherwise. The model still refuses named real celebrities, third-party IP, and illegal content. That refusal lives in the model and applies to every host running it, including us. It is not a setting anyone can turn off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Images and LLMs moved too
&lt;/h2&gt;

&lt;p&gt;Per image, in USD:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;1K&lt;/th&gt;
&lt;th&gt;2K&lt;/th&gt;
&lt;th&gt;4K&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2 Lite&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;td&gt;$0.028&lt;/td&gt;
&lt;td&gt;$0.043&lt;/td&gt;
&lt;td&gt;$0.064&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana Pro&lt;/td&gt;
&lt;td&gt;$0.033&lt;/td&gt;
&lt;td&gt;$0.033&lt;/td&gt;
&lt;td&gt;$0.035&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedream 5.0 Pro&lt;/td&gt;
&lt;td&gt;$0.032&lt;/td&gt;
&lt;td&gt;$0.063&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT Image 2&lt;/td&gt;
&lt;td&gt;$0.030&lt;/td&gt;
&lt;td&gt;$0.050&lt;/td&gt;
&lt;td&gt;$0.080&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nano Banana 2 Lite came down 25 percent, Seedream 5.0 Pro at 2K came down 30 percent.&lt;/p&gt;

&lt;p&gt;Per million tokens, input and output:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Luna&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;$4.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;$24.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5&lt;/td&gt;
&lt;td&gt;$2.40&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.2&lt;/td&gt;
&lt;td&gt;$0.90&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;$0.14&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;$1.74&lt;/td&gt;
&lt;td&gt;$3.48&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DeepSeek cache hits bill at $0.0028 for Flash and $0.0145 for Pro. Those decimal places are correct.&lt;/p&gt;

&lt;p&gt;The GPT-5.6 tiers run 20 percent under the published rate on both input and output, so an existing cost model just multiplies by 0.8. Claude Opus 5 comes in under half.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would want to know before signing up
&lt;/h2&gt;

&lt;p&gt;Signup credits are $0.10. That is around three 1K images and does not cover a single five-second 720p clip. It is enough to prove your integration works end to end and nowhere near enough to evaluate output quality. Evaluating quality costs money, and I would rather write that here than let you discover it after the free credits run out.&lt;/p&gt;

&lt;p&gt;Fast and Mini cap at 720p. Only Seedance 2.0 itself reaches 4K. Individual clips run 4 to 15 seconds; chain them with &lt;code&gt;return_last_frame&lt;/code&gt; when you need something longer.&lt;/p&gt;

&lt;p&gt;Credits are $0.001 each, they do not expire, and there is no subscription or monthly minimum underneath any of this.&lt;/p&gt;

&lt;p&gt;Full parameter reference: &lt;br&gt;
&lt;a href="https://reapi.ai/models/seedance-2-0" rel="noopener noreferrer"&gt;reapi.ai/models/seedance-2-0&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reapi.ai/" rel="noopener noreferrer"&gt;reapi.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will post again on the 7th when 2.5 is live.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Video generation pricing, fully itemized: what a second of Seedance 2.0 actually costs</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:35:23 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/video-generation-pricing-fully-itemized-what-a-second-of-seedance-20-actually-costs-2min</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/video-generation-pricing-fully-itemized-what-a-second-of-seedance-20-actually-costs-2min</guid>
      <description>&lt;p&gt;Most video-generation pricing pages give you a "from $X" and stop there. You find out what a job really costs after you have already run it.&lt;/p&gt;

&lt;p&gt;This post is the opposite. Every rate we charge for video, itemized, plus the two billing rules that decide what lands on your invoice. We cut all of it by 15-21% this week, ahead of the Seedance 2.5 API launching on August 7.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5 ships on the 7th and we will have it up the same day. Seedance 2.0 is not going anywhere and is not losing features, but with 2.5 arriving it belongs at a lower price. So we moved it now instead of waiting.&lt;/p&gt;

&lt;p&gt;To be clear about what does not exist yet: 2.5 is unreleased. Nobody has API access to it today, us included.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full video rate card
&lt;/h2&gt;

&lt;p&gt;Priced per second of output, in USD. The second column applies when your request includes a reference video.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Resolution&lt;/th&gt;
&lt;th&gt;Text / image input&lt;/th&gt;
&lt;th&gt;With reference video&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seedance 2.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.072&lt;/td&gt;
&lt;td&gt;$0.044&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.154&lt;/td&gt;
&lt;td&gt;$0.094&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1080p&lt;/td&gt;
&lt;td&gt;$0.383&lt;/td&gt;
&lt;td&gt;$0.233&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4K&lt;/td&gt;
&lt;td&gt;$0.780&lt;/td&gt;
&lt;td&gt;$0.480&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seedance 2.0 Fast&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.059&lt;/td&gt;
&lt;td&gt;$0.034&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.124&lt;/td&gt;
&lt;td&gt;$0.075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seedance 2.0 Mini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.036&lt;/td&gt;
&lt;td&gt;$0.023&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.077&lt;/td&gt;
&lt;td&gt;$0.047&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mini moved the furthest. Its 480p reference tier is $0.023 per second, so a five-second clip runs about eleven cents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two rules that decide your bill
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Billing is per second, not per clip.&lt;/strong&gt; A four-second test costs four seconds. There is no five-second minimum quietly rounding your experiments up, which matters when you are burning through prompt variations to find one that works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference mode bills your input clip plus your output.&lt;/strong&gt; Send a ten-second reference and generate five seconds, and you are charged for fifteen. This is the same basis the model itself uses to meter the job, so the estimate you compute up front is the number you pay. It also means the cheaper per-second rate in that second column is not free money: a long reference clip can cost more in total than a short text-to-video job at the higher rate. Probe your source length before you quote a price to your own users.&lt;/p&gt;

&lt;p&gt;Failed generations refund automatically. You do not pay for a job the model could not finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calling it
&lt;/h2&gt;

&lt;p&gt;Media generation is asynchronous. You POST a job, get an id back immediately, then poll.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://reapi.ai/api/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer rk_live_xxx"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "doubao-seedance-2.0-face",
    "prompt": "A kitten yawning at the camera, cinematic warm tones",
    "resolution": "720p",
    "size": "16:9",
    "duration": 5
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns &lt;code&gt;{ "id": "task_...", "status": "processing" }&lt;/code&gt;. Then poll until the status goes terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;waitForVideo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://reapi.ai/api/v1/tasks/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;completed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;video_urls&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;failed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poll every one to two seconds. The account limit is five requests per second and polling counts against it, so a tight loop across many concurrent jobs will start collecting 429s.&lt;/p&gt;

&lt;p&gt;The same shape covers images and audio: swap &lt;code&gt;videos&lt;/code&gt; for &lt;code&gt;images&lt;/code&gt; or &lt;code&gt;audio&lt;/code&gt; in the path, poll the identical &lt;code&gt;/tasks/{id}&lt;/code&gt; endpoint. One key works across all of them, LLM endpoints included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference images and real faces
&lt;/h2&gt;

&lt;p&gt;Seedance has a consumer build that rejects real human faces on sight. That is not the build behind this API. Reference images containing real people work, up to nine of them per request.&lt;/p&gt;

&lt;p&gt;Safety checking is a parameter you control. &lt;code&gt;nsfw_checker&lt;/code&gt; defaults to &lt;code&gt;true&lt;/code&gt;, and direct API callers can send &lt;code&gt;false&lt;/code&gt;, at any resolution up to 4K.&lt;/p&gt;

&lt;p&gt;Relaxed is not unlimited, and it would be dishonest to imply otherwise. The model still refuses named real celebrities, third-party IP, and illegal content. That refusal lives in the model and applies to every host running it, including us. It is not a setting anyone can turn off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Images and LLMs moved too
&lt;/h2&gt;

&lt;p&gt;Per image, in USD:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;1K&lt;/th&gt;
&lt;th&gt;2K&lt;/th&gt;
&lt;th&gt;4K&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2 Lite&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;td&gt;$0.028&lt;/td&gt;
&lt;td&gt;$0.043&lt;/td&gt;
&lt;td&gt;$0.064&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana Pro&lt;/td&gt;
&lt;td&gt;$0.033&lt;/td&gt;
&lt;td&gt;$0.033&lt;/td&gt;
&lt;td&gt;$0.035&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedream 5.0 Pro&lt;/td&gt;
&lt;td&gt;$0.032&lt;/td&gt;
&lt;td&gt;$0.063&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT Image 2&lt;/td&gt;
&lt;td&gt;$0.030&lt;/td&gt;
&lt;td&gt;$0.050&lt;/td&gt;
&lt;td&gt;$0.080&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nano Banana 2 Lite came down 25 percent, Seedream 5.0 Pro at 2K came down 30 percent.&lt;/p&gt;

&lt;p&gt;Per million tokens, input and output:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Luna&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;$4.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;$24.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5&lt;/td&gt;
&lt;td&gt;$2.40&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.2&lt;/td&gt;
&lt;td&gt;$0.90&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;$0.14&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;$1.74&lt;/td&gt;
&lt;td&gt;$3.48&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DeepSeek cache hits bill at $0.0028 for Flash and $0.0145 for Pro. Those decimal places are correct.&lt;/p&gt;

&lt;p&gt;The GPT-5.6 tiers run 20 percent under the published rate on both input and output, so an existing cost model just multiplies by 0.8. Claude Opus 5 comes in under half.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would want to know before signing up
&lt;/h2&gt;

&lt;p&gt;Signup credits are $0.10. That is around three 1K images and does not cover a single five-second 720p clip. It is enough to prove your integration works end to end and nowhere near enough to evaluate output quality. Evaluating quality costs money, and I would rather write that here than let you discover it after the free credits run out.&lt;/p&gt;

&lt;p&gt;Fast and Mini cap at 720p. Only Seedance 2.0 itself reaches 4K. Individual clips run 4 to 15 seconds; chain them with &lt;code&gt;return_last_frame&lt;/code&gt; when you need something longer.&lt;/p&gt;

&lt;p&gt;Credits are $0.001 each, they do not expire, and there is no subscription or monthly minimum underneath any of this.&lt;/p&gt;

&lt;p&gt;Full parameter reference: &lt;br&gt;
&lt;a href="https://reapi.ai/models/seedance-2-0" rel="noopener noreferrer"&gt;reapi.ai/models/seedance-2-0&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reapi.ai/" rel="noopener noreferrer"&gt;reapi.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will post again on the 7th when 2.5 is live.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>showdev</category>
      <category>video</category>
    </item>
    <item>
      <title>Building an AI Video Generator with Proper Audio Sync: What I Learned</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Mon, 15 Dec 2025 05:54:08 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/building-an-ai-video-generator-with-proper-audio-sync-what-i-learned-575a</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/building-an-ai-video-generator-with-proper-audio-sync-what-i-learned-575a</guid>
      <description>&lt;p&gt;I've been working on &lt;a href="https://wan26.io" rel="noopener noreferrer"&gt;Wan 2.6&lt;/a&gt; - an AI video generator that creates 1080p videos from text and images. The thing that kept me up at night? Making the audio actually sync properly with the visuals.&lt;br&gt;
Let me share the journey, the challenges, and what I learned building this.&lt;br&gt;
Why I Built This&lt;br&gt;
Here's what frustrated me about existing AI video tools:&lt;br&gt;
The audio sync was awful. Generate a video of someone talking, and their lips move like a badly dubbed movie. It just looked... wrong.&lt;br&gt;
Quality was all over the place. Your character would morph halfway through. One frame they're a young woman, next frame they're somehow a different person.&lt;br&gt;
Limited control. You'd get what you get, no way to fine-tune or adjust.&lt;br&gt;
I wanted to build something that actually worked well. Something I'd want to use myself.&lt;br&gt;
What Wan 2.6 Does&lt;br&gt;
Let me break down the core features:&lt;br&gt;
Text-to-Video&lt;br&gt;
Type a description, get a video.&lt;br&gt;
Example: "A chef flipping a pancake in a sunny kitchen" → You get a 15-second video of exactly that in 1080p.&lt;br&gt;
Image-to-Video&lt;br&gt;
Got a static image? Bring it to life.&lt;br&gt;
Upload a photo and describe what should happen. "Make her wave at the camera" or "zoom into the product" - that kind of thing.&lt;br&gt;
Text-to-Image&lt;br&gt;
Need custom visuals? Generate images to use in your videos or standalone.&lt;br&gt;
Everything outputs at 1080p resolution, 24fps, with native audio synchronization.&lt;br&gt;
The Audio Sync Nightmare&lt;br&gt;
This was the hardest part by far.&lt;br&gt;
When you generate video with AI, you're creating each frame. But when someone speaks, their mouth needs to match the sounds they're making. Not just roughly - it needs to be precise.&lt;br&gt;
The Challenge&lt;br&gt;
Think about it: when you say "P" or "B", your lips close. When you say "O", your mouth forms a circle. Every sound has a specific mouth shape, and it happens at exact milliseconds in the audio.&lt;br&gt;
Getting an AI to:&lt;/p&gt;

&lt;p&gt;Understand the audio timing&lt;br&gt;
Generate the right mouth shapes&lt;br&gt;
Keep the face consistent&lt;br&gt;
Make it look natural&lt;/p&gt;

&lt;p&gt;...is incredibly complex.&lt;br&gt;
What Didn't Work&lt;br&gt;
Attempt 1: Generate video first, add audio later.&lt;br&gt;
Result: Looked like a ventriloquist dummy. Terrible.&lt;br&gt;
Attempt 2: Generate audio first, then create video to match.&lt;br&gt;
Result: Better, but timing was always slightly off. Still weird.&lt;br&gt;
Attempt 3: Generate both simultaneously with shared information.&lt;br&gt;
Result: Finally! This worked.&lt;br&gt;
The breakthrough was realizing audio and video can't be separate processes. They need to be generated together, each informing the other in real-time.&lt;br&gt;
Took months to get right, but now the lip sync actually looks believable.&lt;br&gt;
Keeping Characters Consistent&lt;br&gt;
Another major challenge: making sure your subject doesn't morph into a different person.&lt;br&gt;
Early versions would do this thing where the character would slowly change. Ask for "a woman reading a book" and by the end, she's somehow a completely different person.&lt;br&gt;
Not ideal for any kind of storytelling.&lt;br&gt;
The Solution&lt;br&gt;
The system now "remembers" what your subject looks like in the first frame and maintains those features throughout. It tracks key characteristics - facial features, clothing, style - and keeps them consistent.&lt;br&gt;
It's not perfect (AI never is), but it's way better than the morphing mess we started with.&lt;br&gt;
The 1080p Challenge&lt;br&gt;
Here's the thing: generating high-quality video is computationally expensive.&lt;br&gt;
1080p at 24fps means generating tons of pixels. And each frame needs to be:&lt;/p&gt;

&lt;p&gt;High quality&lt;br&gt;
Consistent with previous frames&lt;br&gt;
Generated in reasonable time&lt;/p&gt;

&lt;p&gt;We had to get creative:&lt;br&gt;
Smart upscaling: Generate at a lower resolution first, then intelligently upscale. The trick is making the upscaling look natural, not artificial.&lt;br&gt;
Frame interpolation: Generate key frames, then create smooth transitions between them. Cuts computational load in half while keeping motion smooth.&lt;br&gt;
Optimization everywhere: Batch processing, smart caching, and tons of other tweaks to make it actually usable.&lt;br&gt;
Currently, a 5-second video takes about 45 seconds to generate. Not instant, but way better than the 10+ minutes early versions took.&lt;br&gt;
Making Static Images Move&lt;br&gt;
One of my favorite features is image-to-video. Upload a static image, describe what should happen, and watch it animate.&lt;br&gt;
The challenge? Making the motion look natural.&lt;br&gt;
You can't just randomly move pixels around. The system needs to understand:&lt;/p&gt;

&lt;p&gt;What objects are in the image&lt;br&gt;
How those objects should move realistically&lt;br&gt;
What motion makes sense for the prompt&lt;/p&gt;

&lt;p&gt;A person waving should look like a natural wave. A car driving should follow physics. A product rotating should maintain its shape.&lt;br&gt;
This took a lot of iteration, but when it works well, it's pretty magical.&lt;br&gt;
Real-World Use Cases&lt;br&gt;
I built this thinking about content creators and marketers. But people use it for all sorts of things:&lt;br&gt;
Educators creating teaching materials and explainer videos&lt;br&gt;
Small businesses making product demos without expensive video production&lt;br&gt;
Authors creating book trailers on limited budgets&lt;br&gt;
Social media managers generating quick content for posts and stories&lt;br&gt;
Marketers testing video concepts before investing in full production&lt;br&gt;
Hobbyists just making cool stuff for fun&lt;br&gt;
The variety of use cases has been surprising and awesome.&lt;br&gt;
What Works Well&lt;br&gt;
Let me be honest about what Wan 2.6 does really well:&lt;br&gt;
✅ Audio sync - This is our strong point. Lip movements actually match speech naturally.&lt;br&gt;
✅ Quality - 1080p output looks professional, not AI-generated garbage.&lt;br&gt;
✅ Consistency - Characters stay recognizable throughout the video.&lt;br&gt;
✅ Ease of use - No complex settings or technical knowledge needed.&lt;br&gt;
✅ Multiple workflows - Text-to-video, image-to-video, text-to-image all in one place.&lt;br&gt;
Current Limitations (Being Real)&lt;br&gt;
Nothing's perfect. Here's what we're still working on:&lt;br&gt;
Video length: Currently capped at 15 seconds. Longer videos while maintaining quality is technically challenging.&lt;br&gt;
Processing time: 45 seconds per 5-second video isn't bad, but faster would be better.&lt;br&gt;
Fine control: Users want more precise control over specific elements. Working on it.&lt;br&gt;
Edge cases: Weird or complex prompts sometimes produce unexpected results.&lt;br&gt;
Hardware requirements: Quality generation needs decent computing power.&lt;br&gt;
I'm not hiding these - they're just the reality of current AI video technology.&lt;br&gt;
Lessons Learned&lt;br&gt;
Solve The Hardest Problem First&lt;br&gt;
I wasted time on UI before tackling audio sync. Should've solved the toughest technical challenge first, then built around it.&lt;br&gt;
Quality &amp;gt; Speed (Usually)&lt;br&gt;
I could've launched with 720p and saved on compute. But in video, quality is immediately noticeable. People care about how it looks.&lt;br&gt;
Users Surprise You&lt;br&gt;
I thought this would mostly be for marketing videos. The actual use cases are way more diverse and creative than I imagined.&lt;br&gt;
Iteration Is Everything&lt;br&gt;
The first version was terrible. The tenth version was better. The hundredth version actually worked. Keep iterating.&lt;br&gt;
Listen To Feedback&lt;br&gt;
Users find problems you'd never spot. They want features you'd never think of. Pay attention.&lt;br&gt;
What's Next&lt;br&gt;
We're actively working on:&lt;/p&gt;

&lt;p&gt;Longer videos (30+ seconds)&lt;br&gt;
More control over specific elements and scenes&lt;br&gt;
Faster generation through better optimization&lt;br&gt;
Better motion in image-to-video&lt;br&gt;
More customization options&lt;/p&gt;

&lt;p&gt;The roadmap is driven by what users actually need, not just what's technically cool.&lt;br&gt;
Try It Out&lt;br&gt;
Wan 2.6 is live at wan26.io.&lt;br&gt;
Whether you're creating content for social media, making educational materials, or just experimenting with AI video - give it a shot and see what you can create.&lt;br&gt;
The interface is straightforward: enter your prompt or upload an image, hit generate, and get your video. No complex setup, no technical knowledge required.&lt;/p&gt;

&lt;p&gt;What would you create with AI video generation? Any specific use cases you'd love to see supported? Drop your thoughts in the comments - I'm genuinely curious what the dev community thinks! 💬&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Chat Photo AI: Revolutionizing Image Editing Through Conversation</title>
      <dc:creator>Lee</dc:creator>
      <pubDate>Fri, 06 Jun 2025 02:00:21 +0000</pubDate>
      <link>https://dev.to/lee_315dd1e13420e63e2b813/chat-photo-ai-revolutionizing-image-editing-through-conversation-4b8n</link>
      <guid>https://dev.to/lee_315dd1e13420e63e2b813/chat-photo-ai-revolutionizing-image-editing-through-conversation-4b8n</guid>
      <description>&lt;h1&gt;
  
  
  Chat Photo AI: Revolutionizing Image Editing Through Conversation
&lt;/h1&gt;

&lt;p&gt;In today's digital landscape, visual content reigns supreme. Whether you're a professional photographer, marketing specialist, or social media enthusiast, the quality of your images can make or break your online presence. Enter &lt;a href="https://chat-photo.com" rel="noopener noreferrer"&gt;Chat Photo AI&lt;/a&gt;, an innovative platform that's transforming how we approach image editing through the power of conversation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgd7dyjpeb39gvlr2vs3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgd7dyjpeb39gvlr2vs3x.png" alt=" " width="800" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dawn of Conversational Image Editing
&lt;/h2&gt;

&lt;p&gt;Traditional image editing requires technical knowledge, complex software, and a steep learning curve. Chat Photo AI disrupts this paradigm by introducing a natural language interface to photo editing. Rather than navigating through menus and mastering tools, users can simply describe what they want—and watch as AI brings their vision to life.&lt;/p&gt;

&lt;p&gt;"Transform my portrait to have a cinematic look" or "Make this landscape more vibrant" are all it takes to create professional-grade edits. This conversational approach democratizes photo editing, making it accessible to everyone regardless of technical expertise.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Chat Photo AI Works
&lt;/h2&gt;

&lt;p&gt;The magic behind Chat Photo begins when you upload an image. The platform's advanced machine learning algorithms analyze your photo's composition, lighting, and style elements. Then, through natural conversation, you direct the AI to make specific enhancements or transformations.&lt;/p&gt;

&lt;p&gt;The system processes these requests in real-time, typically delivering results within seconds. This instant feedback loop creates an intuitive editing experience that feels more like collaborating with a professional photo editor than using software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features That Set Chat Photo Apart
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Intuitive Conversational Interface
&lt;/h3&gt;

&lt;p&gt;Unlike traditional editing tools with complex interfaces, Chat Photo uses natural language processing to understand exactly what you want. Simply describe your desired outcome, and the AI handles the technical aspects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-Time Transformations
&lt;/h3&gt;

&lt;p&gt;Watch as your images transform before your eyes. The platform processes edits in seconds, allowing for quick iterations and experimentation without the usual time investment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Diverse AI Models
&lt;/h3&gt;

&lt;p&gt;Chat Photo offers specialized AI models for different types of photography. Whether you're working with portraits, landscapes, product photos, or artistic images, there's a tailored solution to optimize your results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Batch Processing Capabilities
&lt;/h3&gt;

&lt;p&gt;For professionals handling large volumes of images, Chat Photo's batch processing feature is a game-changer. Maintain consistent style and quality across hundreds of photos simultaneously, saving countless hours of manual editing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Professional-Grade Output
&lt;/h3&gt;

&lt;p&gt;Despite its user-friendly approach, Chat Photo doesn't compromise on quality. The platform produces commercial-grade images suitable for professional applications, from marketing campaigns to portfolio work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Benefits from Chat Photo AI?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Professional Photographers
&lt;/h3&gt;

&lt;p&gt;For photographers like James Wilson, Chat Photo streamlines post-processing workflows. "The chat photo platform has transformed my photography business! I can enhance client photos instantly and create stunning variations," he shares.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graphic Designers
&lt;/h3&gt;

&lt;p&gt;Sarah Chen, a graphic designer, relies on Chat Photo for client projects. "The AI enhancement capabilities are remarkable, and I can process hundreds of images quickly. This platform has revolutionized my creative workflow completely."&lt;/p&gt;

&lt;h3&gt;
  
  
  Marketing Teams
&lt;/h3&gt;

&lt;p&gt;Marketing professionals like Emma Thompson leverage Chat Photo to maintain brand consistency while creating unique variations for campaigns. The result? Elevated content quality and improved engagement rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  E-commerce Specialists
&lt;/h3&gt;

&lt;p&gt;Product photographers such as David Kim appreciate the platform's ability to understand context and deliver professional results consistently. This reliability is crucial for e-commerce businesses where image quality directly impacts sales.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Image Editing
&lt;/h2&gt;

&lt;p&gt;Chat Photo represents the vanguard of a significant shift in creative tools. By combining advanced AI with natural language interfaces, it removes technical barriers that have traditionally limited creative expression.&lt;/p&gt;

&lt;p&gt;As AI technology continues to evolve, we can expect even more sophisticated capabilities from platforms like Chat Photo. The gap between imagination and execution is narrowing, enabling creators to focus more on creative vision and less on technical execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Chat Photo
&lt;/h2&gt;

&lt;p&gt;Beginning your journey with Chat Photo is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload your image to the platform&lt;/li&gt;
&lt;li&gt;Describe how you'd like to transform it&lt;/li&gt;
&lt;li&gt;Review the AI-generated result&lt;/li&gt;
&lt;li&gt;Refine with additional instructions if needed&lt;/li&gt;
&lt;li&gt;Download your enhanced image&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With pricing plans starting at $9.99, Chat Photo offers solutions for everyone from hobbyists to enterprise users. Each plan includes a set number of generation credits and access to various AI models based on your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Chat Photo AI represents a paradigm shift in image editing—one that prioritizes creative intent over technical knowledge. By enabling users to edit photos through natural conversation, it opens up professional-quality image enhancement to a broader audience than ever before.&lt;/p&gt;

&lt;p&gt;As visual content continues to dominate digital communication, tools like Chat Photo that combine accessibility with professional results will become increasingly valuable. Whether you're looking to enhance a single portrait or transform thousands of product images, conversational AI editing offers a compelling alternative to traditional methods.&lt;/p&gt;

&lt;p&gt;The future of image editing isn't about mastering more complex tools—it's about having a conversation with AI that understands your creative vision and brings it to life.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
