Illustrate existing character greetings using native prompt presets and image connection profiles.
About
Illustrate existing character greetings in a native Lumiverse drawer. The extension adds or removes image markup; it never writes greeting prose or changes existing chat messages.
Permissions
4 permissions
Read, create, change and delete your characters.
Read, change and delete your chats.
Read, upload and delete your stored images and videos.
What it adds
1 addition
- 1
Drawer tab: Greeting Images
Version and source
2 details · 1 link
Details
1.1.0
1.2.0
Links
Use
Open a character’s chat, then open Greeting Images from the drawer or command palette.
In Settings, choose an existing image connection profile. Its model and provider parameters are inherited unless overridden here.
Configure Lumiverse’s native Chat-aware custom prompt parser beforehand. The extension’s Settings page shows the inherited parser and lets you select a native prompt preset and add image instructions.
Click a greeting’s +, or enable Multiselect, select greetings, and choose Generate selected. One image is generated for each selected greeting, sequentially. A batch accepts up to 50 greetings.
Images are stored locally and appended to greetings by default. Settings can put them first, require image review, or require prompt review. View/edit image prompt prepares a prompt without generating an image; saving it lets the next generation reuse the edited text without another parser call.
Search explicitly by Text or Title, and filter by image presence. Select all selects the filtered greetings; previously selected hidden greetings remain selected and are counted. Image previews, confirmations, prompt editing, and recovery actions stay within the drawer.
Attach image uploads an existing file locally or embeds a supplied HTTP(S) URL as-is. It does not publish an existing file to Catbox. Uploaded/reference files are limited to 20 MB, using PNG, JPEG, WebP, or GIF.
Configuring Chat-Aware Custom Prompt image gen
In case you are not using 'Chat-aware custom prompt mode' inside of the native image generation engine, attached is the prompt ive been using, refined and folded the steel a thousand times. I use it with comfyui (very very basic minimal preset), anima image gen model (specifically miaomiaoHarem_anima15) and GLM 5.3 flash with low thinking. takes about 3 seconds to generate a flawless prompt every time.
Youll need to make a bound character preset with the following content for it to work right
<character_description>
{{description}}
</character_description>Negative Prompt:worst quality, low quality, score_1, score_2, score_3, artist name
Make a LoRA preset and add this to the Base Tags:best quality, score_7, score_9, sensitive, very aesthetic, ultra detailed, fair skin, explicit, high contrast, 1girl
Youll also need to select the 'Include Characters' checkbox at the bottom.
Parser Instructions
# Anima Roleplay Scene to Prompt Workflow
You are an Anima image generation prompt-conversion assistant.
Your task is to convert a roleplay narrative scene and character description into a prompt for generating an erotic image of one woman.
## Anima
Anima is a 2 billion parameter text-to-image model created via a collaboration between CircleStone Labs and Comfy Org. It is focused mainly on anime concepts, characters, and styles, but is also capable of generating a wide variety of other non-photorealistic content. The model is designed for making illustrations and artistic images, and will not work well at realism.
It is trained on several million anime images and about 800k non-anime artistic images. No synthetic data was used for training. The knowledge cut-off date for the anime training data is September 2025.
## Anima Prompting
{{bullets}}
The model is trained on Danbooru-style tags, natural language captions, and combinations of tags and captions.
Use lowercase for tags, and spaces instead of underscores.
When using a tag that is different between Danbooru and Gelbooru, prefer the Gelbooru version.
Prompt weighting works, but needs a weight higher than typically used for SDXL. Example: "(chibi:2)"
{{/bullets}}
## Natural language prompting tips
{{bullets}}
Follow standard English capitalization rules for character and series names.
If using pure natural langauge, more descriptive is better. Aim for at least 2 sentences. Extremely short prompts can give unexpected results.
You can mix tags and natural language in arbitrary order.
"Digital artwork of Fern from Sousou no Frieren, with long purple hair and purple eyes, wearing a black coat over a white dress with puffy sleeves..."
{{/bullets}}
## Task
Always select **ONE SPECIFIC** female character from the scene and make her the only visual subject. Never include more than one character.
NEVER INCLUDE OR MENTION {{USER}} EVEN IF THEIR DESCRIPTION IS SUPPLIED ALONG WITH THE CHARACTER.
The output must be a combination of Danbooru-style tags, natural language captions, and combinations of tags and captions only.
## Core Output Rules
* Output only tags separated by commas.
* Do not write prose, explanations, sentences, or commentary.
* Do not include dialogue, speech, quoted text, written words, signs, labels, or any text visible in the scene.
* Do not include negative prompt tags.
* Do not include generic quality tags such as masterpiece, best quality, highres, 8k, very aesthetic, amazing quality, absurdres, detailed, ultra detailed, or score tags.
* Do not include generic subject-count tags such as 1girl, solo, 1boy, multiple girls, etc.
* Do not include exact age, height, or weight values. Convert them into visual descriptors instead.
* “42 years old” → MILF
* “5ft 1in” → short
* “200 pounds” → voluptuous, curvy
* Keep the final prompt between 20 and 40 tags.
## Subject Priority
The selected character must remain the visual anchor of the prompt.
## Prioritize tags in this order:
{{numbered}}
Character appearance
Body type and physical traits
Hair, eyes, skin, facial features
Distinctive marks, scars, piercings, accessories, uniforms, armor, or weapons
Clothing, lingerie, outfit state, or nudity level
Erotic or sensual visual presentation
Pose and body language
Facial expression
Visible emotion
Character action
Framing and composition around the character
Lighting affecting the character
Minimal setting only if visually necessary
Props only if worn, held, touched, or directly interacting with the character
{{/numbered}}
## Rules
{{numbered}}
NEVER TAG BLOOD
Preserve the character’s core visual identity from the character description.
Use the narrative only to determine pose, expression, outfit state, body language, visible emotion, action, framing, lighting, and minimal setting.
If multiple characters are present, choose the most visually important woman and omit all others.
If the narrative contains multiple moments, choose the most visually striking single moment focused on the selected character.
If clothing, pose, or setting is ambiguous, infer a reasonable visual choice from the scene while staying character-focused.
Never describe blushing or flushed with embarassment as 'red face' or other similar color based deconstructions - simply say 'embarassed' or 'blushing'.
Convert abstract traits into visible equivalents. arrogant → smug expression, confident pose. nervous → anxious expression, tense posture. heartbroken → teary eyes, downcast eyes, trembling lips
Avoid non-visual information, including names, relationships, backstory, thoughts, motives, personality labels, and lore.
Avoid actions requiring another visible person unless the image is explicitly focused on a sexual act.
For sexual acts, 1-2 tags describing the part of their partner they are interacting with is allowed. Ensuring the person attached to it is minimalistic, vague and treated as a prop.
Favor concise booru-style phrasing where appropriate.
Use only a few broad setting tags, and only when the setting directly supports the character’s pose, lighting, or erotic presentation.
Include props only if they are worn, held, touched, or directly interacting with the character.
Do not list decorative scenery, room contents, furniture, architecture, weather, or ambient objects unless visually essential.
Do not list liquids or wet substances such as oil, blood, lube, paint, lotion, sweat, or similar.
Do not mention injuries or wounds.
{{/numbered}}
## Failure Conditions
Revise internally before output if the tag list contains:
{{bullets}}
More than one character
Non-sexual actions that require a second character, like hugging or shaking hands
Negative prompt tags
Generic quality tags
Generic subject-count tags
Dialogue, quoted text, written words, or visible text
Prose or explanation
Non-visual information
Exact age, height, or weight values
Abstract personality traits without visible equivalents
Excessive background, setting, furniture, scenery, or prop details
Camera/quality filler that does not directly support the character’s pose, body, expression, or framing
Liquids, wet substances, or blood
{{/bullets}}
## Output Format
a combination of Danbooru-style tags, natural language captions, and combinations of tags and captions ONLY
{{character_prompt}}Install
Install from repo
Install through Lumiverse’s Extensions panel:
https://github.com/ajrc0re/Lumiverse-GreetingImageGenerator
Install from source
The repository includes ready-to-load dist/frontend.js and dist/backend.js bundles and a spindle.json manifest. Install the published repository through Lumiverse’s Extensions panel, then grant Characters, Chats, Images, and Image generation permissions. Requires Lumiverse 1.2.0 with the public active-character selector and native image prompt-preview endpoint (the API surface used by lumiverse-spindle-types 0.6.31).
For local development:
bun install bun run typecheck bun test tests bun run build
The isolated UI preview runs with bun run preview at http://127.0.0.1:4318. It uses in-memory sample characters, simulated generations, and lightweight stand-ins for Lumiverse’s mounted form components. It does not contact image providers or Catbox. Real host components are used in the installed extension.
Local-network HTTP access is supported. Frontend request IDs use crypto.getRandomValues(), which works without HTTPS. Copy image link falls back to the browser's legacy copy action or a selectable link when the Clipboard API is unavailable. Server-side image job IDs and Catbox credential hashing remain in the Bun backend.
How it works
The browser calls Lumiverse’s authenticated /api/v1/image-gen/preview-prompt with promptMode: "parsed_custom", the native preset instructions, the existing greeting, and optional style guidance. The backend then calls spindle.imageGen.generate() with the independently selected image connection. SwarmUI/ComfyUI profiles advertising preview streaming use generateStream().
Native parser limitations: the existing endpoint requires a real chat and inherits native text-parser settings and live chat context. Greeting-focused instructions cannot completely prevent influence from later chat events. The extension does not create temporary chats, swap global settings, or implement another text-generation pipeline. Image generation uses the selected image profile’s defaults and overrides; it does not reproduce the full native pipeline’s separate global LoRA assembly. Configure the needed workflow/parameters in that connection.
Consistent sets
Save shared appearance/style instructions per character. Choose the avatar, an existing greeting image, or an uploaded file as a reference. Remote greeting images are copied locally when the host allows browser downloads; if blocked by CORS, download the file and use Upload reference. A saved generated result can also become the set reference. OpenAI, Google Gemini, and OpenRouter receive references as { data, mimeType } objects through their existing adapters. Individual models may not support image inputs. Other providers use the shared text instructions only. This is guidance, not a guarantee of identical appearance, and introduces no extra AI planning call.
Storage and sharing
Local: uses the existing Lumiverse image store. Relative image links work when the recipient can access that server; they are not embedded portable card assets. Server access/authentication configuration still controls accessibility.
Catbox anonymous: publishes the image and keeps the local original. Catbox currently removes anonymous files after two years without access. Anonymous uploads cannot be deleted by this extension.
Catbox authenticated: uses your account’s userhash, stored in Lumiverse’s encrypted enclave. The frontend only receives a “saved” indicator. Upload records retain an account fingerprint, never the credential. Catbox describes account uploads as permanent, subject to its policies and service availability.
Catbox links are public. Some networks block Catbox; it is not an availability guarantee or a backup service. Its commercial hotlinking restrictions also apply. See Catbox’s API and FAQ.
An upload failure keeps the local image. Retry upload resumes uploading; Use local inserts the saved local result without generating again. Recent history stores metadata only, retaining 50 finished records per character plus pending jobs. Pruning records does not delete images.
Removal and undo
The image’s × removes exactly that occurrence after confirmation. Undo last image edit restores the previous image edit for that character only if the greeting has not subsequently changed.
Permanent deletion is a separate opt-in for recorded extension-owned assets. Local deletion uses Lumiverse’s unused=true guard and retains files still referenced elsewhere. A currently selected set reference is not eligible. Catbox deletion requires the matching authenticated account and breaks all shared links to that file. Existing unowned links are never deleted. Removing a Catbox link or its public file does not delete the local backup. Deleting a local file does not delete its Catbox copy. Successful permanent deletion clears undo.
Reliability and boundaries
Each job captures its original character, greeting text/index, image settings, prompt, and style/reference. Before writing, the extension re-fetches the character and checks the greeting. Edits or reordering cause a retained result with an Apply to greeting… action. Writes affect only the main greeting or a freshly read alternate-greeting array; the host API does not offer an atomic compare-and-swap, so simultaneous external saves cannot be made fully transactional by an extension.
Closing the drawer leaves the queue running. Stop prevents new jobs and further insertion; supported streams are aborted. A provider that cannot be cancelled may finish and charge for its request; the returned image is retained locally. A save already accepted by the host cannot be recalled. Browser reload or extension restart never automatically resubmits pending paid requests. Review retained results and explicitly retry uncertain generations; repeating them can incur another charge.
Recognized image markup includes inline/reference Markdown images, HTML ``, Risu <img="…">, gallery:// and embeded:// references resolved through the card’s asset map. Fenced/inline/indented code is ignored. Unresolved references show placeholders. CSS background images, images generated by executable scripts, and arbitrary custom message widgets are outside this parser. Greeting HTML is never executed in the drawer.
Validation
Active-character tracking uses the public state selector when available, with a public getActiveChat() fallback for older builds and builds reporting spindle_authority_map_unwired. The fallback checks for selection changes every 750 ms, refreshes on chat changes, and stops on extension unload. This prevents an unavailable selector from aborting drawer registration; it does not change permission grants.
Tests cover source-preserving parsing and edits, prompt reuse, references, ownership checks, local persistence, mocked Catbox requests, queue interruption/recovery, and drawer interactions. Browser QA uses the isolated preview in light/dark themes and narrow/wide layouts. Automated checks do not perform paid generations or real Catbox uploads; those require an explicit live smoke test with a configured account.