Verboa Prompt Writer
Content warning. This model writes explicit adult prompts on request, and the examples on this page are explicit. It writes for Verboa Image 1.0, an image model for adults, under the same license and use restrictions (see License). Please do not use it if you are under 18 or where adult content is illegal.
Verboa Prompt Writer is a small language model that writes prompts for Verboa Image 1.0. Tell it as much or as little as you like: who is in the picture, how old, where, how explicit, in what voice and at what length. It writes the rest the way a person would type it. It is a full fine-tune of Qwen3.5-2B-Base on 35,206 of the captions Verboa Image 1.0 was trained on, the most varied and specific ones we could select, and it runs in ComfyUI right in front of the image model.
Highlights
- Three ways to prompt, one node. Let Me Choose gives you nine fields to set, Surprise Me spins them for you, and Write My Own sends your own prompt through the same workflow, so you can compare.
- A new prompt every run. Each Run writes a fresh prompt and renders it.
- Written the way people prompt. It learned from Verboa Image 1.0's own training captions, which were written as user prompts: slang to clinical, a few words to a long paragraph.
- Varied, not copied. Across 1,000 held-out field sets its prompts were 94% as varied as the real captions, and none copied half of a training caption.
- Small. 3.06 GB in fp8 for NVIDIA, 4.43 GB in bf16 for Macs.
Examples
The first prompt the bf16 file wrote for each of these, in ComfyUI on a Mac, seed 1, unedited. Fields not listed were any.
Let Me Choose: a woman · 25-34 · kitchen · lingerie · casual voice · short length
a blonde twenty-something in pink lingerie with a tattoo on her ass, posing in a kitchen with her back to the camera
Let Me Choose: a woman and a man · 35-44 · cabin · sex · neutral voice · medium length
a bald man in his forties with a mustache and hairy body is fucking a woman from behind. she has long reddish-brown hair, big tits and a curvy body. they are lying on a blue sofa. the scene is set indoors, likely in a cabin or studio room with warm lighting. her head rests on the armrest, looking back at him.
Let Me Choose: two men · beach · nude · athletic · slang voice · medium length
two guys standing side by side on a sandy beach, both completely naked. the guy on the left has short blonde hair and a muscular build, while the guy on the right is slightly taller with dark hair and a slim physique. they’re looking at each other, hands touching, in a candid pose. sunlight hits their bodies, highlighting their muscles. the ocean is in the background with waves crashing. it looks like an amateur photo, taken on film with natural colors and grain.
Surprise Me, which spun: a man · 55+ · pool · partly dressed · slang voice · very long length
a bald guy in his forties with a thick beard and sunglasses, standing shirtless next to a swimming pool. he's got a muscular build, big tits and abs, with tattoos on his chest and arms. he's wearing tight pink swim briefs, low-rise and revealing his dick and nuts. he's holding the sides of his underwear, pulling them slightly apart to show off his pubic hair. he has a serious look on his face, looking directly at the camera. the background is bright and sunny, with greenery and a clear blue sky. the lighting is natural and harsh, casting strong shadows on his body. the style is realistic, with a focus on detail and texture. the camera angle is eye-level, capturing his full body from head to knees. the mood is casual and confident, with a hint of sexiness. he looks like he's enjoying the sun and showing off his physique. the overall composition is balanced, with the man centered in the frame and the pool providing a cool backdrop. the colors are vibrant, with the pink of his swimwear standing out against his skin tone and the green of the foliage. the image feels like a snapshot from a summer day, capturing a moment of relaxation and confidence.
Use it in ComfyUI
You need ComfyUI 0.19.0 or newer (the first release that runs Qwen 3.5 text generation) and Verboa Image 1.0 set up as on its card.
-
The node. Download ComfyUI-Verboa.zip, unzip it into
ComfyUI/custom_nodes/(so you getcustom_nodes/ComfyUI-Verboa/__init__.py) and restart ComfyUI. Or putComfyUI-Verboa/__init__.pyin that folder yourself; the same file is on GitHub:mkdir -p ComfyUI/custom_nodes/ComfyUI-Verboa curl -L -o ComfyUI/custom_nodes/ComfyUI-Verboa/__init__.py \ https://raw.githubusercontent.com/verboa/Verboa-Image/main/ComfyUI-Verboa/__init__.py -
The writer.
verboa-prompt-writer-fp8.safetensors(NVIDIA) orverboa-prompt-writer-bf16.safetensors(Mac) goes inComfyUI/models/text_encoders/. -
The workflow. Load
workflows/verboa-image-1.0-writer.json(NVIDIA) orworkflows/verboa-image-1.0-mac-writer.json(Mac): Verboa Image 1.0's own workflows with the writer in front of the prompt.
Then pick a mode on the Verboa Prompt Writer node and press Run:
| mode | you set | what happens |
|---|---|---|
| Let Me Choose | any of the nine fields; leave the rest on any | the writer follows what you set and invents the rest |
| Surprise Me | nothing | people, age, place, level, voice and length are spun at random, and the writer invents the rest |
| Write My Own | your own prompt | your prompt goes to the image model as typed; the writer isn't even loaded |
The prompt that was written shows in the preview node, and the node's fields output says what the writer was given.
Surprise Me spins the six fields the writer follows most reliably (see Evaluation). The node's seed
changes after every run; set it to fixed to keep a prompt.
The node samples at temperature 1.0 with min_p 0.05 and repetition penalty 1.05 (top_k and top_p off), up to 768 new tokens: the settings the evaluation below was run at.
ComfyUI's built-in Generate Text node runs the writer too, for Let Me Choose. Load the file with a Load CLIP
node (type stable_diffusion), connect it to Generate Text, and type the fields into its prompt, one per line, in
this order:
people: a woman
age: 25-34
place: kitchen
level: any
ethnicity: any
body: any
camera: any
voice: casual
length: medium
Use the settings above with thinking off. Generate Text's seed does not change by itself, so ComfyUI would serve the
same prompt on every run: link an Int node set to randomize into its seed.
Fields
| field | values |
|---|---|
| people | a woman, a man, two women, two men, a woman and a man, a group |
| age | 18-24, 25-34, 35-44, 45-54, 55+ |
| place | hot tub, shower, bathtub, sauna, pool, bathroom, garden, bedroom, kitchen, living room, hotel room, office, gym, beach, forest, balcony, rooftop, car, boat, cabin, barn, library, studio, stairs, field, lake, desert, mountains, city street, club, dorm room, laundry room, garage, dressing room, massage room, outdoors |
| level | clothed, lingerie, partly dressed, nude, explicit, sex |
| ethnicity | East Asian, South Asian, Black, Latina, Middle Eastern, white, mixed |
| body | slim, average, athletic, curvy, plus-size |
| camera | pro photo, art photo, phone photo, mirror selfie, webcam |
| voice | slang, casual, neutral, formal, clinical |
| length | short, medium, long, very long |
any leaves a field to the writer. Ethnicity follows people the way the captions wrote it: the node sends Latina for
women, Latino for men and Latin for mixed groups.
Speed
| setup | file | measured in ComfyUI |
|---|---|---|
| NVIDIA, laptop RTX 5090 | fp8 | about 18 tokens a second, so 1.5 to 16 s per prompt (ComfyUI 0.35) |
| Apple M5, 32 GB | bf16 | 3.5 to 4 tokens a second: 7 s for a short prompt, about 20 s for a medium one, 68 s for a very long one (ComfyUI 0.36) |
The first run also loads the file. In Write My Own the writer isn't loaded at all.
Verboa Video (ComfyUI, MiniMax H3)
The video stage of our own pipeline is in this repo too, in Verboa-H3-Video/: two ComfyUI workflows that animate a
still into a clip with sound using MiniMax H3. verboa-h3-from-text.json draws the first
frame with Verboa Image 1.0 and animates it; verboa-h3-i2v.json animates any picture. Core ComfyUI nodes, 4 steps with the turbo LoRA:
about 110 s for an 8 s clip at 512x896 on a 24 GB card.
- Put the five MiniMax H3 files from Comfy-Org/MiniMax-H3 in their
models/folders (list, sizes and links in the folder's README). - Load
Verboa-H3-Video/workflows/verboa-h3-from-text.json(a Verboa still, then the clip) orverboa-h3-i2v.json(any first frame). - Write the H3 prompt in H3's own format (shots, time-coded beats, a soundscape line); the note in the workflow explains it with an example. Motion and NSFW LoRAs made for H3 chain after the turbo LoRA.
The workflows need the MiniMax H3 weights, which are not in this repo and come under the MiniMax H3 Community License Agreement. Among other terms it excludes use in the US, the EU, the UK and South Korea. Read it before you download them.
Model details
| Built from | Qwen/Qwen3.5-2B-Base (Apache 2.0) |
| How | full fine-tune of the language model: all 24 layers and the embedding, 340 updates |
| Architecture | Qwen 3.5 2B: 24 layers (18 Gated DeltaNet, 6 full attention), hidden size 2048, vocabulary 248,320, embedding tied to the output; 1.88B parameters |
| Vision tower | the base model's, unchanged (0.33B parameters). ComfyUI builds it for every Qwen 3.5 file and logs about 300 missing weights without it; the writer never uses it |
| Input | the nine fields, one field: value line each, in Qwen 3.5's chat template with thinking off (ComfyUI applies both) |
| Output | one prompt, from a few words to a few hundred (at most 434 tokens in the evaluation) |
| Files | fp8: the 150 linear layers inside the blocks in float8 (e4m3) with a per-tensor scale, everything else bf16, 3.06 GB. bf16: every weight in bf16, 4.43 GB |
| fp8 against bf16 | held-out loss 1.1358 against 1.1341 (+0.15%) |
| Language | English |
Training
Data
Every training example is a caption from Verboa Image 1.0's adult set, 249,996 captions of age-screened studio photographs (how the images were collected and screened is in its card and safety report). From those:
| step | captions |
|---|---|
| Verboa Image 1.0's adult set | 249,996 |
| drop captions with a word that can mean under 18 (doesn't mean it is under 18) | −372 |
| drop near-duplicates (the same text, or the same first 12 words) | −62,804 |
| drop one-word and one-phrase captions | −10,843 |
| drop images rated below good | −9,982 |
| drop anything that isn't a single photograph | −2,086 |
| pool | 163,909 |
| keep the most creative 30% of each people × level cell, spread over 4,000 clusters (at most 12 per cluster), and drop 1,510 captions whose text contradicts their people tag | |
| trained on | 35,206 + 1,000 held out |
Creativity, the selection's score, is four signals, each ranked within the caption's length so long captions don't win by being long: rare but real details (words used by 5 to 500 captions of the pool), unusual phrasing (surprisal under a word-pair model of the pool), crowding (similarity to its 20 nearest neighbors, embedded with Qwen3-Embedding-0.6B), and a penalty for the pool's stock openings ("a woman in her" starts 15.7% of captions). The 1% with the most unusual phrasing, and captions with many words found nowhere else in the pool, were dropped, since garbled text also looks unusual.
Fields come from each image's tags and are set only where the caption itself says so. In training, each set field
was hidden as any 40% of the time, so the writer learned to invent what it isn't given.
Recipe
| Updates | 340 (2 passes over 6.35M tokens) |
| Optimizer | AdamW 8-bit, peak learning rate 2e-5, 50 warmup steps, cosine to 10%, weight decay 0.01, gradient clip 1.0 |
| Loss | on the written prompt and its end token only, not on the fields |
| Numerics | fp32 layer weights under bf16 autocast; the tied embedding in bf16 |
| Compute | one laptop RTX 5090, 68 minutes, about 2,600 tokens a second |
| Held-out loss | 1.2485 at update 100, 1.1912 at 200, 1.1462 at 300, 1.1341 at 340 |
Evaluation
The writer wrote prompts for the 1,000 held-out field sets with the node's settings (chosen from four sampling settings by the same test). A keyword check decides whether a prompt honors a set field. It is noisy (a prompt can be about two women without the word "two"), so the real held-out captions were scored the same way against their own fields where that is possible:
| check | writer | real captions |
|---|---|---|
| ends cleanly, with no field lines or special tokens | 100% | |
| people | 95.8% | 95.6% |
| level | 84.3% | 82.7% |
| age | 83.1% | 83.3% |
| place | 88.0% | |
| length | 99.7% | |
| body (190 sets) | 83.2% | |
| camera (35 sets) | 45.7% | |
| ethnicity (28 sets) | 28.6% | |
| variety: distinct three-word runs, as a share of the real captions' | 94.3% | |
| near-copies: half or more of a prompt's 8-word runs from one training caption | 0 | |
| words for someone under 18 | 0 |
Ethnicity and camera are named in few training captions (3% and 5% of the pool), so the writer follows them weakly;
that is why Surprise Me doesn't spin them, nor body. In all, the evaluation wrote 5,200 prompts: 2,200 at the first
settings (held-out and training field sets, random combinations, and every field any) and 1,000 at each of the other
three. None had a word for someone under 18.
Safety
- Data. The writer learned only from Verboa Image 1.0's adult captions, whose images were screened for age, and 372 captions with a word that could mean under 18 as text (images were 18+) were removed before training. Some coded adult age words the captions use, such as "barely legal" or "college girl", were kept. The age field starts at 18-24.
- Measured. None of the 5,200 prompts written in evaluation had a word that puts someone under 18: words for children and adolescents, ages under 18, school levels below college.
- Downstream. Verboa Image 1.0's own safety edit applies to whatever prompt it is given, written or typed; see its safety report.
To report misuse or a safety problem, please email abuse@verboa.io.
Limitations
- Level leans explicit. About 84% of prompts match the level asked for (the real captions score 83% against their own tags), and the misses lean more explicit: "lingerie" can come out nude, "nude" with sexual detail, "clothed" shirtless.
- Ethnicity, camera and body are followed less reliably than the other fields (see Evaluation).
- Written and tuned for Verboa Image 1.0. Other image models may read its prompts differently.
- Memory on a Mac. The bf16 writer adds 4.4 GB to the image model's memory, which is tight on a 32 GB Mac with the bf16 image file: in our run the Mac swapped and sampling slowed. Verboa Image 1.0's int8 file needs half the memory of its bf16 file.
- English only, but that doesn't matter since you're not reading the prompts, Verboa is.
Files
| file | size | SHA-256 |
|---|---|---|
verboa-prompt-writer-fp8.safetensors | 3.06 GB | d93a51bc855f9d99b0a8edd1c4c48b632dc6883906699bfb461691aa393f2b75 |
verboa-prompt-writer-bf16.safetensors | 4.43 GB | ff9c75fdec1e1c817182a4d08785bb0fa31ba5ebbc60fbdcdd2864d6ebc5f63a |
ComfyUI-Verboa/__init__.py | the ComfyUI node | |
workflows/verboa-image-1.0-writer.json, workflows/verboa-image-1.0-mac-writer.json | the workflows | |
Verboa-H3-Video/ | the MiniMax H3 video workflows: README, NOTICE, LICENSE | |
Verboa-H3-Video/workflows/ | verboa-h3-i2v.json, verboa-h3-from-text.json |
SHA256SUMS lists every file.
License
The writer is released under the same license as Verboa Image 1.0: the CreativeML Open RAIL++-M License with one
additional use restriction (LICENSE.md): no sexually explicit, nude or intimate imagery of a real,
identifiable person without that person's explicit prior consent. The use restrictions travel with every copy and
derivative, and cover what you make with the prompts it writes. The node and the workflows are released under the same
license. Qwen3.5-2B-Base, the base model, is Apache 2.0 (Qwen Team); see NOTICE.md for what was
modified. The license does not grant trademark rights.
Acknowledgments
The Qwen Team for an Apache-licensed base model small enough to run next to an image model, and the ComfyUI maintainers for native Qwen 3.5 text generation.
Citation
@misc{verboa-prompt-writer,
title = {Verboa Prompt Writer: a prompt writer for Verboa Image, fine-tuned from Qwen3.5-2B-Base},
author = {{Verboa AI}},
year = {2026},
url = {https://huggingface.co/verboa/Verboa-Prompt-Writer}
}
Support
There is currently no API or subscription behind this model. verboa.io has the official links and a Bitcoin donation address. Issues and questions: GitHub issues, or contact@verboa.io. Misuse or safety problems: abuse@verboa.io.
Changelog
- 1.0: first release. Qwen3.5-2B-Base fine-tuned for 340 updates; fp8 and bf16 files; the ComfyUI node with Let Us Choose, Surprise Me and Write My Own.
- Verboa Video (October 2026): two MiniMax H3 image-to-video workflows with sound, in Verboa-H3-Video (they replace the earlier video node).