All posts
guide2026/09/11

Seedance Blocked NSFW Prompt: Why It Happens and the Fix

Seedance Blocked NSFW Prompt: Why It Happens and the Fix

A Seedance blocked NSFW prompt returns error 80006 and nothing else. Which stage fired, the three blocks no setting removes, and how to isolate the trigger.

A Seedance blocked NSFW prompt arrives as one error code with nothing attached to it. The code is 80006, it covers every safety refusal the pipeline can raise, and it comes back the same whether the request was explicit or entirely ordinary. If you are asking why is my prompt blocked on text that nobody would flag, the code is not withholding an explanation. It never had one to give. The failed job is refunded in full, so working out which part of the request tripped it costs time rather than money.

What error 80006 tells you

80006 means a safety check refused the request. That is the whole of it.

The code does not name the stage that fired. Three stages can produce it: the prompt text you submitted, a reference file you attached, or the video the model generated before handing it back. A refusal at the third stage is the one behind the common complaint about clean prompts coming back blocked, because nothing in the text was ever the problem.

Read usage.credits on the failed task to confirm the reserve came back. Failed jobs are refunded, so the figure should show the credits returned. That check matters more than usual when duration was set to -1, since -1 lets the model choose the length and takes the reservation at the 30-second cap regardless of what it would have produced.

Where a Seedance blocked NSFW prompt comes from

Start with the prompt, because it is the only stage you can read.

The field holds up to 20,000 characters and all of them are checked. Proper nouns are the usual trigger. A living person's name, a franchise, a character from a film, a product brand: those are refused on sight, and none of them look like NSFW content to the person who typed them.

Reference media is the second stage. A request can carry up to 30 images, 10 video clips and 10 audio tracks, and every file goes through the same check the prompt does. Thirty images is enough to lose track of what is in the set, and one photograph among them is enough to refuse the job.

Output is the third stage, which is why the prompt can be blameless. The model generated something, the check ran on the result, and the result was refused. Rewording an innocent prompt still helps here, since different wording produces a different scene.

The three blocks no setting removes

Three categories are refused inside the model itself, and no host, plan or parameter turns them off:

  • named real celebrities
  • third-party intellectual property
  • illegal content

The first two account for most self-inflicted refusals. The celebrity block is written against the name, so the name is the token to remove. The intellectual property block covers characters, titles and recognizable designs, which means a request can trip it without naming anything at all if a reference image carries the design.

These three sit apart from NSFW moderation and they do not respond to any of the settings below.

What content_filter changes and what it does not

content_filter defaults to true. Setting it to false selects a less restrictive channel and keeps the same pricing.

It does not disable moderation. The field is a routing control rather than a model parameter, and upstream policy checks run either way. The older alias for the same field is nsfw_checker; both names still validate.

The practical consequence is that flipping the field is worth one attempt and no more. If the same request refuses with content_filter set to false, the trigger is on a list that no channel changes, and the fix has to come out of the request itself.

Isolating the trigger in four runs

Failed runs are refunded, so a bisect costs nothing except the runs that pass. Work at 480p while you do it: $0.118589 per second of output puts a five-second test at about $0.59, against roughly $2.31 for the same test at 1080p.

  1. Remove every proper noun from the prompt and resubmit it otherwise unchanged. If it passes, a name was the trigger.
  2. Submit the prompt with no reference media at all. If it passes, the trigger is in the files.
  3. Submit the reference media with a plain, neutral prompt. Whichever files refuse are the ones to replace. With 30 images attached, split the set in half and repeat.
  4. Shorten the duration. Less output is less surface for the output-stage check, and a four-second version of a thirty-second request is faster and cheaper to iterate on.

If all four pass and the full request still refuses, the refusal is coming from the generated video, and the scene itself has to change.

Frequently asked questions

What does error 80006 mean? It is a safety refusal. The code covers every stage of moderation and does not indicate which one fired, so the prompt, the reference files and the generated output all stay candidates until you rule them out one at a time.

Does setting content_filter to false stop refusals? No. It routes the request through a less restrictive channel at the same price, and moderation still runs. Named real celebrities, third-party intellectual property and illegal content are refused regardless of how the field is set.

Why is my prompt blocked when it contains nothing explicit? Because the check that refused it may have run on the finished video rather than on the text. The same code comes back either way, which is how a clean prompt produces a refusal that looks unexplainable.

Do I pay for a blocked generation? No. Failed jobs are refunded in full, refusals included. Confirm it on the failed task by reading usage.credits.

The short version

A Seedance blocked NSFW prompt is error 80006 and nothing more specific than that. Three stages can raise it, the prompt is the only one you can read directly, and the model-level blocks on named celebrities, third-party intellectual property and illegal content stay in place whatever the content filter is set to. Strip the proper nouns, pull the reference files, test at 480p where a five-second run is about $0.59, and read usage.credits to confirm the refund landed.