Image moderation and apparent age, from one API call.
Rigr's Media Examiner detects nudity, exposed intimate anatomy and sexual activity while estimating apparent age and developmental stage — with calibrated uncertainty and configurable review bands, so your platform auto-handles the clear cases and sends a human only the genuinely uncertain ones.
One image. One API call.
Media Examiner detects nudity, exposed intimate anatomy and sexual activity while estimating apparent age and developmental stage — all in one image-analysis API. There is no chaining a generic adult-content classifier to a separate age service, no submitting the image twice, and no reconciling two sets of coordinates afterwards.
That matters because the two signals are only useful together. “This image contains nudity” is a commodity answer that every moderation vendor can give you. “This image contains exposed intimate anatomy, the subject presents as pubescent, and here is the apparent age with its uncertainty” is a different decision — and it is one call.
What comes back
| Output | What it gives you |
|---|---|
| Image-level classification | A severity level from 0 to 5 with a stable machine-readable key — no sexual content, exploitative or suggestive, overt sexualised posing, non-penetrative activity, penetrative activity |
| Per-object detections | What triggered the result and where it is: exposed intimate anatomy, sexual acts, and contextual objects, each with a confidence score and a bounding box |
| Apparent developmental stage | Infant, toddler, prepubescent, pubescent or adult — inferred from the face and, where the face is hidden or turned away, from the body |
| Apparent age with uncertainty | Where a suitable face is visible, an apparent age in years and its calibrated uncertainty, on the same face detection |
| Contextual flags | Self-generated, sadomasochism, CG elements, bodily fluids — the character of the material, not just how explicit it is |
| Deployment | Hosted API, private endpoint, or a container you run yourself — including air-gapped |
Full field-by-field detail is in the Media Examiner API reference, with a machine-readable OpenAPI document so you can generate a client rather than write one.
Generic nudity detection is a commodity
Ours is not a better porn filter. What a platform actually needs on the hard cases is richer child-safety and policy signal from a single analysis: what triggered the result, where it is in the frame, the apparent developmental stage of the subject, and — where a face is visible — the estimated age and how confident that estimate is.
A binary “explicit / not explicit” answer collapses all of that into one bit, and the bit you lose is the one your policy team most needs.
The problem with a single label
Trust & Safety teams do not just need a label such as “adult” or “minor.” They need to know how uncertain the system is, how to route borderline content, how to tune false positives and false negatives, and how to defend the threshold used for human review.
AI-generated and manipulated imagery has made this harder: age-ambiguous content — both synthetic and user-uploaded — creates review queues that are expensive to staff and easy to get wrong in either direction. Generic prompting against a general-purpose vision-language model is not a calibrated, defensible safety control.
The wedge: a point estimate is not enough
A face estimated at 18.2 with high uncertainty is operationally different from a face estimated at 18.2 with low uncertainty — the first needs a human, the second may not. Rigr surfaces both numbers, not just the label, so that difference is visible in the workflow, not buried in technical documentation.
| Example result | Interpretation | Suggested workflow |
|---|---|---|
| 15.4 ± 0.8 | High-confidence minor-presenting signal | High-risk queue / immediate specialist review |
| 17.8 ± 2.5 | Borderline and uncertain | Escalate to trained human review; do not rely on a binary threshold |
| 22.1 ± 0.9 | Low-risk apparent-adult signal | Lower priority or sample audit, depending on policy |
| 19.0 ± 5.0 | Low confidence despite an adult point estimate | Manual review or secondary model signal |
Wiring it into an upload flow
A workable moderation pipeline is not one threshold. It is a set of routes, each earning its own decision:
- Auto-handle the clear violations. Severity 4 and 5 with high confidence rarely need a person to confirm what they are.
- Escalate anything where the subject may not be an adult. Apparent developmental stage and apparent age are what let you separate this route from ordinary adult content, rather than treating every explicit image the same way.
- Send low-confidence and borderline cases to human review. This is what the uncertainty value is for. A wide interval straddling your threshold is precisely the case a model should not decide alone.
- Retain the per-result reasons. The detections, scores and boxes are your audit trail for why an action was taken — useful for appeals, for regulators, and for tuning.
- Tune the thresholds to your own risk tolerance. Different platforms carry different risk, and the same number should not mean the same action on a children’s education service and on an adult dating app.
We do not publish a single universal threshold, because there isn’t one. Any vendor offering one is quietly making your policy decision for you. The configurable review band is the product.
Apparently underage subjects
This is the case platforms most need to get right, so it is worth being exact about what the system does and does not do.
Media Examiner returns an apparent developmental stage for detected subjects, and an apparent age with calibrated uncertainty where a suitable face is visible. Anatomy detections are themselves life-stage differentiated, so an exposed-anatomy detection carries a developmental-stage reading even where no face is available.
These are visual estimates. They do not verify identity and they do not establish a person’s legal age. They are a signal for routing and prioritisation, not a determination. High-risk and borderline decisions should include appropriate human review, and any confirmed child sexual abuse material must be handled under your legal reporting obligations, not simply removed.
Used properly, the value is triage: a platform can apply stricter handling wherever a subject appears not to be an adult, escalate rather than auto-action those cases, and put trained reviewers where they change the outcome.
Where this sits in age assurance
Age assurance is the umbrella term for establishing how old someone is. It covers several methods, and they are not interchangeable:
| Method | What it does | Do we provide it? |
|---|---|---|
| Age verification | Checks an identity document or an authoritative record to establish a stated age | No |
| Facial age estimation | Infers an apparent age from an image, with a confidence range | Yes — this is what we build |
| Age inference from behaviour or account history | Derives a likely age band from other signals held about a user | No |
| Self-declaration | Asks the user | No |
We are a facial age estimation component, not an end-to-end age assurance stack. A relying party integrates us as one signal in a workflow they own — usually alongside a document-verification route for the cases that need a proven age, and always with a human path for the borderline ones.
That distinction matters commercially as well as technically. If your obligation is to verify a specific person’s legal age, estimation alone will not discharge it. If your problem is triaging a large volume of imagery where no document exists and no account is attached — user uploads, AI-generated characters, content already in a moderation queue — estimation is the only method that applies at all.
On thresholds and buffer zones. Age assurance regimes generally expect a relying party to manage uncertainty rather than act on a single hard cut-off. That is precisely what the calibrated uncertainty above is for: a configurable buffer zone around your threshold, with everything inside it routed to a human. The Australian trial specifically noted this design, and it is why we do not publish one universal threshold.
Independently evaluated
Rigr AI took part in the Australian Age Assurance Technology Trial (2025), an independent evaluation commissioned by the Australian Government and conducted by the Age Check Certification Scheme, tested against a dataset the trial built rather than a vendor’s own.
The trial’s assessment found Rigr AI strong on technical readiness, privacy alignment and usability, with reliable threshold-based age decisions, fast on-device processing and low false-positive rates in real-world scenarios — and noted the configurable buffer zones that let a relying party manage uncertainty instead of relying on one hard threshold, which is the same wedge described above.
For a Trust & Safety team, the relevant part is not a leaderboard position but that the behaviour was checked by someone other than us, on data we did not choose. The individual test report is public.
Private benchmark pilot
For teams currently relying on generic VLM prompts, off-the-shelf classifiers, or manual-only queues, Rigr offers a private benchmark pilot: bring a representative sample and your current policy thresholds, and we return a calibration view, a false-positive/false-negative trade-off analysis, review-band recommendations, and an integration estimate.
See the Media Examiner API reference for the response schema, Age Estimation for the underlying age model, CSAM Classification for the investigative side of the same engine, and Deployment, sovereignty & information control for private and on-premise deployment options.
Frequently asked questions
Does Rigr detect adult nudity?
Yes. Media Examiner detects nudity and exposed intimate anatomy — genitalia, breasts and buttocks as separate classes — each returned with a confidence score and a bounding box, and each differentiated by apparent developmental stage rather than lumped into one "nudity" label.
Does it detect sexually explicit content?
Yes, and it grades it rather than flagging it. The image-level classification separates exploitative or suggestive material, overt sexualised posing, non-penetrative sexual activity, and penetrative sexual activity, with the specific detections that produced the result attached as rationale.
Can it detect subjects who appear to be underage?
It returns an apparent developmental stage — infant, toddler, prepubescent, pubescent or adult — and, where a suitable face is visible, an apparent age with calibrated uncertainty. Anatomy detections are themselves life-stage differentiated, so the signal survives when no face is visible. These are visual estimates: they do not verify identity or establish a person's legal age, and they are intended for routing and prioritisation with human review on high-risk and borderline cases, not for automated determinations.
Do I need a separate age-estimation API as well?
No. Facial age estimation is integrated into Media Examiner: set estimate_age=true and the same request that returns nudity, anatomy and sexual-content detections also returns apparent age and its calibrated uncertainty on each face detection. One image, one call.
Does the API return bounding boxes?
Yes. Every detection carries a bounding box and a confidence score. Boxes are normalised x, y, width and height with a top-left origin — fractions of the frame rather than pixels — so they scale with whatever resolution you render at.
Is it available for production use?
Yes. It runs as a hosted API, as a private endpoint, or as a container you run yourself, including in air-gapped environments. The default hosted quota is 120 requests per 60 seconds per key and can be raised for production volumes.
How much does it cost?
Pricing depends on expected image volume and throughput. Tell us your approximate monthly volume and expected peak requests per second and we will give you a fixed production price. A private benchmark pilot on your own sample is the usual first step.
Is this an age assurance solution?
It is a facial age estimation component for one, not an end-to-end age assurance stack. Age assurance is the umbrella term covering document-based age verification, facial age estimation, inference from account history and self-declaration. Rigr builds the estimation piece: a relying party integrates it as one signal in a workflow they own, typically alongside a document route for cases that need a proven age.
Can facial age estimation satisfy an age verification obligation?
Not on its own. If the obligation is to verify a specific person's legal age, an apparent-age estimate does not discharge it — that needs a document or an authoritative record. Estimation applies where no document exists and no account is attached: user uploads, AI-generated characters, and imagery already sitting in a moderation queue. Regimes generally expect a relying party to manage uncertainty rather than act on one hard cut-off, which is what the calibrated uncertainty and configurable buffer zone are for.
How should we set the threshold and buffer zone?
Against your own risk tolerance and your own data, not ours. We deliberately publish no universal threshold: the same number should not trigger the same action on a children's education service and an adult platform. The private benchmark pilot exists for exactly this — bring a representative sample and your current policy thresholds and we return a calibration view, a false-positive/false-negative trade-off, and review-band recommendations. The Australian trial specifically noted the configurable buffer zones as letting a relying party manage uncertainty instead of relying on a single hard threshold.
What is the difference between age estimation and age verification?
Age estimation infers an apparent age from an image. Age verification checks an identity document or an authoritative record to establish a stated age. Rigr provides estimation: a calibrated apparent-age signal for routing content to the right review queue, not a proof of identity.
What does apparent age mean?
It is how old a face appears, not a claim about the person's true age. The distinction matters most for synthetic and AI-generated characters, where there is no ground-truth age to verify at all.
Why does the uncertainty value matter for review routing?
Because two identical point estimates can need different handling. A face estimated at 18.2 with high uncertainty needs a human; the same estimate with low uncertainty may not. Rigr returns both numbers so that difference is visible in the workflow rather than buried in documentation.
Can it handle AI-generated or synthetic imagery?
Yes — this is a large part of why it exists. AI-generated and manipulated imagery creates age-ambiguous review queues that are expensive to staff and easy to get wrong in either direction, and apparent age is the only meaningful signal where no true age exists.
Can we benchmark it against our own data first?
Yes. Bring a representative sample and your current policy thresholds, and the private benchmark pilot returns a calibration view, a false-positive/false-negative trade-off analysis, review-band recommendations and an integration estimate.
Does it make the moderation decision?
No. Rigr informs review; it does not make policy or legal determinations. Borderline and low-confidence cases are designed to escalate to trained human reviewers.
Has the age estimation been independently tested?
Yes. Rigr AI took part in the Australian Age Assurance Technology Trial (2025), commissioned by the Australian Government and conducted by the Age Check Certification Scheme, which tested participants against a dataset the trial built rather than a vendor's own benchmark. Its assessment found Rigr strong on technical readiness, privacy alignment and usability, with low false-positive rates in real-world scenarios. The individual test report is public.