What companion apps actually need
- A written yes. App-store reviewers, payment partners and your own lawyers ask the same question: is this allowed by the provider? Ours is on one page — /content-policy — with the red lines spelled out (minors in any style, real people, non-consent: banned, screened).
- The same character every time. Users bond with a face. Reference-based generation keeps it: one canonical portrait drives every new image (Qwen-Image edit, Wan 2.7 image edit) and every clip (Wan 2.7 r2v with up to five references + voice, HappyHorse r2v with up to nine images). See character consistency.
- Economics per message. A selfie in chat should cost cents, not dimes.
Model map for a companion app
| Moment in the app | Model | Base price | Notes |
|---|---|---|---|
| Selfie / reaction image in chat | z-image-turbo-uncensored | $0.017 / image | Fastest, cheapest; 1K/2K; prompt_extend off |
| Outfit / pose / scene change on the same character | qwen-image3-edit-uncensored | $0.035 / image (+$0.0035 per input image) | 1–3 references, up to 6 outputs |
| High-quality portraits, character sheet | wan2.7-image-t2i-uncensored / grid-i2i | $0.034 Standard · $0.086 Pro | Up to 4K; 12-panel grids |
| Short "video message" (5 s, portrait) | happyhorse-1.1-i2v-uncensored 480p | ≈$0.24 / clip | From the character's image; 9:16 supported |
| Voice + character reference clip | wan2.7-r2v-multiple-uncensored 720p | $0.113 / s | Reference image + voice sample per subject |
| Longer scene (up to 30 s) | wan3.0-video-reference-uncensored | from $0.058 / s (480p) | Images + video + audio references |
Integration pattern
- Pre-generate the canon. On character creation, generate a portrait and a 12-panel character sheet once; store the URLs — they are the references for everything after.
- Async everywhere.
POST /ent/v2/generatereturns atask_idin milliseconds; pollGET /ent/v2/tasks/{id}(2 s → 5 s back-off) and push the result into the chat whenstatusissuccess. Show a typing indicator, not a spinner. - Reserve, then settle. Each task returns
reserved_costandactual_costin USD — meter per user, per tier, or per credit. Failed tasks are refunded automatically. - Route by content class. Keep SFW-only flows (e.g. a real photo the user uploads for a "make me a hero" feature) away from NSFW generation: real people's likenesses are prohibited and screened.
Your obligations
You and your users must be 18+; if you expose generation, implement age assurance for your jurisdictions and pass the prohibitions through in your own terms. Our screening on inputs and outputs is a backstop, not a substitute for your moderation. Full text: Content Policy.
Related
- HappyHorse video API · Z-Image Turbo · Qwen-Image 3.0 · Wan 2.7 video
- Character consistency without a LoRA
- Migrating from Novita · 18models vs fal.ai
Prices are USD base list prices from /pricing; the effective price for your key is returned by GET /ent/v2/prices. NSFW output is permitted under the Content Policy — fictional adults only, minors and real people prohibited and screened.
FAQ
Which API should an AI girlfriend app use for NSFW images?
One that permits it in writing. 18models allows fictional adult content under a published content policy and serves Z-Image Turbo ($0.017/image) for chat images, Qwen-Image 3.0 for outfit/pose edits, and HappyHorse / Wan 2.7 for video clips — behind one API key.
How do I keep a companion character consistent across images and videos?
Generate a canonical portrait, then use it as the reference: Qwen-Image edit or Wan 2.7 image edit for new images, Wan 2.7 reference-to-video (up to five references with a voice sample) or HappyHorse r2v (up to nine reference images) for video.
What does a companion app pay per interaction?
A chat image on Z-Image Turbo is $0.017; a 5-second HappyHorse 480p clip is about $0.24; a Qwen-Image edit about $0.04. Prepaid USD wallet, failed tasks refunded.
Can users upload a photo of a real person as their companion?
Not for NSFW generation. Real people's likenesses are prohibited by the content policy and screened on input; your app should route real-photo uploads to SFW-only flows or block them.