Start a project
WorkBlogResourcesAboutContact

Blog/Failures and fixes

Higgsfield Rejected My Portraits and Still Charged Me

Four harmless portraits were rejected as NSFW, but the attempts still reduced my Higgsfield credit balance.

By Jeff Zambrano··5 min read

Higgsfield Rejected My Portraits and Still Charged Me

Four of nine period-costume portraits ended with status: "nsfw".

The woman was wearing a dress closed to the neck. The prompts requested studio portraits, medium shots, and full-body views. Nothing in the intended content explained the rejection.

The failed images still cost credits.

The recorded balance change was 20 credits across 22 attempts. A rejection did not mean the generation was free.

That changed how I handled retries. Repeating the same harmless prompt was not a neutral test. Every attempt could reduce the balance again without returning an image I could use.

Moderation happened after generation

The observed behavior showed that the content classifier ran after the image had been generated.

The platform produced the image, charged for the work, and then discarded the result when the classifier marked it as NSFW. That is why the rejected job still affected the balance.

It also explained why similar prompts produced different outcomes.

In the same set, a full-body profile passed while a full-body frontal view was rejected. The prompts were nearly identical. There was no single trigger word that failed in a repeatable way across every image.

The moderation result was probabilistic for this type of content.

That makes automatic retries especially expensive. A loop cannot reason about the image that was rejected. It simply asks the platform to generate another version, pays again, and gives the classifier another chance to reject it.

For a paid API, “retry until success” is the wrong default. For a post-generation moderation failure, it is worse because each hidden result has already consumed generation work.

I simplified the language first

The first prompt change was to remove words describing the person’s body, even when those words were innocent in context.

That included:

slender elegant figure
figure
body

I also removed person categories from control clauses:

actress
model
singer

The fictional identity instruction expressed the same restriction using any real person instead of listing those categories.

With those two changes, the four rejected portraits passed on the retry.

That result did not prove that one forbidden word had caused every failure. The inconsistency between nearly identical prompts argued against such a clean explanation. The edits reduced the chance of another false positive without identifying a deterministic text trigger.

I therefore kept the retry count limited. One revised attempt gave me information. An automatic loop would only have repeated the cost.

Framing had a stronger measured effect

The more reliable reduction came from controlling where the portrait was cropped and how much skin appeared below the clavicle.

Portraits that showed a neckline or skin below that point were the ones that failed. The same facial traits passed when the prompt required a high, closed neckline and a tighter crop.

The working instruction was:

cropped at the collarbone, high closed neckline, no skin below the collarbone in frame

A face that had been rejected with a court-style low neckline generated successfully once the dress reached the throat.

The classifier did not interpret the historical clothing in context. The measured pattern followed visible skin.

That means changing adjectives alone can miss the part of the image that matters. If the model composes the portrait with exposed skin below the clavicle, a safe narrative description does not guarantee a safe classification.

I now specify the crop and neckline as visible constraints, not as background costume information.

The budget needs a rejection margin

A batch budget cannot be calculated only as the number of requested pieces multiplied by the expected generation cost.

Rejected images can still be charged. The batch therefore needs room for moderation failures, even when the subject is harmless.

That does not justify unlimited contingency. It makes controlled retries more necessary.

My response to an NSFW status on clearly innocent material is:

First, I stop. I do not let an automatic retry loop continue.

Then I remove unnecessary body language and person categories. I make the fictional identity clause refer to any real person.

I inspect the intended framing. If the composition may show skin below the clavicle, I request a collarbone crop and a neckline closed to the throat.

Then I retry once.

If the same type of shot fails twice in succession, I change the framing instead of submitting the same prompt again.

The rule I use now

A Higgsfield NSFW rejection counts as spent credit unless the balance proves otherwise.

I do not assume that a discarded result was never generated. I record the rejection, count its cost, revise the prompt, and allow one controlled retry.

When the problem repeats, I change the visible composition. A tighter crop and a high closed neckline have a stronger measured effect than repeatedly asking for the same portrait and hoping the classifier changes its decision.

Check your retry settings today. If a paid image request automatically repeats after status: "nsfw", turn that loop off. Make one deliberate change to the language and framing before spending another credit.


Every fix in this article was paid for with a mistake first. Better on my film than on your brand.

ShareXLinkedInWhatsApp
Jeff Zambrano

Jeff Zambrano is a Madrid-based AI film director. His debut, Borrowed Wounds, reached the Top 50 of the Higgsfield Global Film Festival out of 6,700 films. He writes these notes from his own productions.

WhatsApp