Why the model refuses your reference photo
You upload a portrait, ask for a five-second shot, and get back
InputImageSensitiveContentDetected.PrivacyInformation — "input image may contain real
person". No video, no explanation, no obvious next move — and it happens to characters you generated
yourself, for a film nobody else is in. Here is what the filter actually reacts to, which treatments get
a sheet through in practice, and the one we now use by default.
The line is photorealism, not identity
The first surprise is who gets caught. A synthetic character who never existed — generated by an image model, from your own prompt, for your own film — is refused exactly like a photograph of a stranger, as long as they look real. Provenance is not part of the check: an image made by the provider's own image model and served from their own storage is refused just the same. The filter looks at the picture and asks whether it reads as a photograph of a human being.
Which means the practical question isn't "how do I hide the face". It's "how do I make this read as something other than a photograph, without losing the character".
What actually gets through
Ranked by how reliably it works in practice. Note that everything except the last row is probabilistic — the same trick passes on Monday and fails on Tuesday, so expect to retry.
| Treatment | Works? | Notes |
|---|---|---|
| Monochrome noise over the whole image | Most reliable | Grain breaks up the photographic read while leaving features intact. The generator sees through it — the rendered video comes back clean. |
| Grid asked for in the image prompt | Sometimes | Have the image model draw the grid as part of the picture rather than pasting one on top. Cheap to try, inconsistent. |
| Red grid painted over the face by hand, thick lines | Sometimes | Thin lines don't do it. Real risk: the grid bleeds into the render and turns up on faces in the finished video. |
| Explicit cartoon styling | Always | "Pixar/DreamWorks style, NOT photorealistic". Reliable, but it decides the look of your whole project. |
| Clean photograph, untouched | Never | Don't bother. |
| Light CGI treatment — "AAA game cinematic" | Never | Half-measures read as photographs. It's a cliff, not a slope. |
The noise recipe
This is the one we reach for. Take the finished character sheet, add a noise layer over the whole thing, export, upload. In Figma that is Effects → Noise with:
- Type: Mono
- Noise size: 3 × 3
- Density: 100%
- Colour: black at 60%
- Export as PNG at 1×
Any tool that can lay uniform grain over an image will do — the effect is the point, not the software. Apply it across the entire sheet rather than just the face: patchy treatment reads as a photograph with something stuck on it, which is the case that gets refused.
Two things worth knowing. The grain does not come through into the video: the generator reads the features and renders clean footage, which is exactly what makes this better than the grid tricks. And it is still probabilistic — a sheet that passed last week can be refused today, so treat a refusal as "try again", not as a verdict on the picture.
What a refusal costs, and what a pass commits you to
Worth knowing before you experiment, because the two directions are asymmetric.
A refusal is synchronous and free. The request to create the task returns HTTP 400 in about five seconds; no task is created, nothing is queued, nothing is billed. You can iterate on a portrait as many times as you like at no cost.
A pass is immediate and final. Within a fraction of a second the task is already running, and a delete request comes back with a "running task cannot be deleted" conflict. There is no window in which you know it passed and can still call it off. Once the reference clears, you are paying for that take.
One more piece of sequencing that matters if you plan to probe cheaply: parameters are validated before moderation. Sending a deliberately invalid duration to test an image gets you a parameter error for any image at all, valid or not. There is no free dry run — the only way to learn whether a picture passes is to submit a real request that will cost money if it does.
Longtake turns that asymmetry into a feature rather than a surprise: when you add a character with a portrait, the studio runs a four-second screen test at the cheapest available model — about $0.14 — and tells you the verdict up front. If moderation refuses, the character is not saved and you have paid nothing. If it passes, the clip is kept as that character's screen test, because you paid for it either way.
The routes that don't involve outsmarting anything
Noise works, but it is a workaround, and on some days it doesn't. If a photorealistic recurring character is central to the project — especially one played by a real person — these routes are built for it:
- A verified real-human asset. Providers run an identity route for exactly this: the actor receives an invitation, verifies their own face, and the library returns an asset id you pass as
asset://<id>instead of an image. Consent is established at the source, so the moderation question doesn't arise. - A virtual character library. Pre-cleared synthetic people, ready to reference. You give up bespoke casting and get a face that always works. Note these carry images only — no voices — so voice consistency is still your problem to solve.
- A character without a face. Shot from behind, hands only, silhouette, helmet. No reference image, no moderation, full freedom — and a surprisingly workable constraint for a lot of stories.
And the answer that is often simply right: make the project animated. Cartoon styling passes every time, character sheets in that style are cheap to generate, and holding a character consistent across scenes is easier in animation than in photorealism.
Text-to-video is unrestricted
None of this applies when there is no reference image. Describing a person in words — age, build, clothing, bearing — generates without complaint. What you lose is the ability to reproduce the same person in the next scene, which is precisely why references exist and why this filter is such a persistent nuisance for serial work.
Questions
- Does a grid over the face help?
- Sometimes, and less reliably than noise. A grid the image model drew as part of the picture works more often than one pasted on afterwards; a hand-painted red grid needs thick lines to do anything at all. Both carry a risk noise doesn't: the grid can bleed into the render and show up on faces in the finished video.
- Does it matter that the image is AI-generated rather than a photograph?
- Not at all. A synthetic photorealistic person is refused the same way. Provenance isn't part of the check — we confirmed this with an image made by the provider's own model and served from their own URL.
- Am I billed for a refused request?
- No. It fails before the task is created. The opposite case is the one to watch: a reference that passes starts rendering instantly and can't be cancelled.
- Can I test a picture cheaply before committing?
- Not by sending bad parameters — those are checked first, so you never reach moderation. In Longtake the screen test does it deliberately for about $0.14 on the cheapest model, and refuses to save a character whose portrait was rejected.
- What passes most reliably?
- Two things. Explicit animation always works — "Pixar/DreamWorks style, NOT photorealistic" — but it decides the look of the whole project. For photorealistic characters, monochrome noise over the whole sheet is the practical answer: mono grain, size 3, full density, black at about 60%. Half-measures like "AAA game cinematic" styling never pass.
- Does the noise show up in the generated video?
- No. The generator reads the features through the grain and returns clean footage. That is the main advantage over grid tricks, which can leave marks on faces in the render.
- The same image passed yesterday and is refused today. Why?
- Because the check is probabilistic at the margin. Everything except full cartoon styling is a matter of odds, so a refusal means retry rather than "this picture will never work".
Related
Tested in August 2026 against Seedance 2.0 through BytePlus ModelArk. Moderation behaviour is a provider policy and can change without notice — the reasoning holds better than the specific verdicts.