15 Commits

Author SHA1 Message Date
Aodhan Collins
9b143e65b1 Redesign gallery grid layout and update CSS across all index pages
Increase card density with more columns per breakpoint (2→6 across sm/xl).
Refactor style.css for consistent card sizing, spacing, and responsive layout.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 21:43:40 +00:00
Aodhan Collins
27d2a70867 Merge branch 'job-queue'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 02:33:04 +00:00
Aodhan Collins
3c828a170f Add background job queue system for generation
- Implements sequential job queue with background worker thread (_enqueue_job, _queue_worker)
- All generate routes now return job_id instead of prompt_id; frontend polls /api/queue/<id>/status
- Queue management UI in navbar with live badge, job list, pause/resume/remove controls
- Fix: replaced url_for() calls inside finalize callbacks with direct string paths (url_for raises RuntimeError without request context in background threads)
- Batch cover generation now uses two-phase pattern: queue all jobs upfront, then poll concurrently via Promise.all so page navigation doesn't interrupt the process
- Strengths gallery sweep migrated to same two-phase pattern; sgStop() cancels queued jobs server-side
- LoRA weight randomisation via lora_weight_min/lora_weight_max already present in _resolve_lora_weight

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 02:32:50 +00:00
Aodhan Collins
ae7ba961c1 Add danbooru-mcp auto-start, git sync, status API endpoints, navbar status indicators, and LLM format retry
- app.py: add subprocess import; add _ensure_mcp_repo() to clone/pull
  danbooru-mcp from https://git.liveaodh.com/aodhan/danbooru-mcp into
  tools/danbooru-mcp/ at startup; add ensure_mcp_server_running() which
  calls _ensure_mcp_repo() then starts the Docker container if not running;
  add GET /api/status/comfyui and GET /api/status/mcp health endpoints;
  fix call_llm() to retry up to 3 times on unexpected response format
  (KeyError/IndexError), logging the raw response and prompting the LLM
  to respond with valid JSON before each retry
- templates/layout.html: add ComfyUI and MCP status dot indicators to
  navbar; add polling JS that checks both endpoints on load and every 30s
- static/style.css: add .service-status, .status-dot, .status-ok,
  .status-error, .status-checking styles and status-pulse keyframe animation
- .gitignore: add tools/ to exclude the cloned danbooru-mcp repo
2026-03-03 00:57:27 +00:00
Aodhan Collins
0b8802deb5 Add Checkpoints Gallery with per-checkpoint generation settings
- New Checkpoint model (slug, name, checkpoint_path, data JSON, image_path)
- sync_checkpoints() loads metadata from data/checkpoints/*.json and falls
  back to template defaults for models without a JSON file
- _apply_checkpoint_settings() applies per-checkpoint steps, CFG, sampler,
  base positive/negative prompts, and VAE (with dynamic VAELoader node
  injection for non-integrated VAEs) to the ComfyUI workflow
- Bulk Create from Checkpoints: scans Illustrious/Noob model directories,
  reads matching HTML files, uses LLM to populate metadata, falls back to
  template defaults when no HTML is present
- Gallery index with batch cover generation and WebSocket progress bar
- Detail page showing Generation Settings and Base Prompts cards
- Checkpoints nav link added to layout
- New data/prompts/checkpoint_system.txt LLM system prompt
- Updated README with all current galleries and file structure
- Also includes accumulated action/scene JSON updates, new actions, and
  other template/generator improvements from prior sessions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 21:25:23 +00:00
0d7d4d404f Merge pull request 'Added scene and actions browser.' (#5) from scenes-browser into master
Reviewed-on: #5
2026-02-22 23:45:22 +00:00
Aodhan Collins
615c400024 Added scene and actions browser. 2026-02-22 23:44:28 +00:00
bb65486995 Merge pull request 'Added style browser.' (#4) from style-browser into master
Reviewed-on: #4
2026-02-20 21:23:38 +00:00
Aodhan Collins
8487b177b4 Added style browser. 2026-02-20 21:22:53 +00:00
116941673e Merge pull request 'feat: implement Actions Gallery with character integration and triple LoRA chaining' (#3) from action-browser into master
Reviewed-on: #3
2026-02-19 20:07:17 +00:00
Aodhan Collins
467c90594c feat: implement Actions Gallery with character integration and triple LoRA chaining
- Added Actions gallery with CRUD and JSON sync
- Implemented Triple LoRA workflow (Character -> Outfit -> Action)
- Added character-integrated previews for Actions with style matching
- Implemented granular prompt selection and default persistence for Actions
- Added detailed development guide for extending gallery features
2026-02-19 20:06:57 +00:00
a4a21051a5 Merge pull request 'Add outfit gallery and AI-powered creation for characters and outfits' (#2) from clothing-gallery into master
Reviewed-on: #2
2026-02-19 18:36:02 +00:00
Aodhan Collins
c0e6cff7b7 Add outfit gallery and AI-powered creation for characters and outfits
- Add outfit gallery with CRUD operations (create, read, update, delete)
- Add AI-powered profile generation for both characters and outfits
- Add toggle to switch between AI generation and manual creation
- Auto-generate filenames from names with incrementing for duplicates
- Add 'full_body' and 'bottom' fields to wardrobe structure
- Update all character and outfit JSON files with new wardrobe fields
- Reorganize data into data/characters and data/clothing directories
- Update README with new features and JSON structure documentation
2026-02-19 18:34:46 +00:00
369c92e3ea Merge pull request 'Expanded generation options. Multiple outfits support.' (#1) from expanded-generation into master
Reviewed-on: #1
2026-02-19 00:41:30 +00:00
Aodhan Collins
5aede18ad5 Expanded generation options. Multiple outfits support. 2026-02-19 00:40:29 +00:00
1231 changed files with 44191 additions and 1450 deletions

3
.gitignore vendored
View File

@@ -31,3 +31,6 @@ Thumbs.db
# Logs
*.log
# Tools (cloned at runtime — not tracked in this repo)
tools/

398
CLAUDE.md Normal file
View File

@@ -0,0 +1,398 @@
# GAZE — Character Browser: LLM Development Guide
## What This Project Is
GAZE is a Flask web app for managing AI image generation assets and generating images via ComfyUI. It is a **personal creative tool** for organizing characters, outfits, actions, styles, scenes, and detailers — all of which map to Stable Diffusion LoRAs and prompt fragments — and generating images by wiring those assets into a ComfyUI workflow at runtime.
The app is deployed locally, connects to a local ComfyUI instance at `http://127.0.0.1:8188`, and uses SQLite for persistence. LoRA and model files live on `/mnt/alexander/AITools/Image Models/`.
---
## Architecture
### Entry Point
- `app.py` — Single-file Flask app (~4500+ lines). All routes, helpers, ComfyUI integration, LLM calls, and sync functions live here.
- `models.py` — SQLAlchemy models only.
- `comfy_workflow.json` — ComfyUI workflow template with placeholder strings.
### Database
SQLite at `instance/database.db`, managed by Flask-SQLAlchemy. The DB is a cache of the JSON files on disk — the JSON files are the source of truth.
**Models**: `Character`, `Look`, `Outfit`, `Action`, `Style`, `Scene`, `Detailer`, `Checkpoint`, `Settings`
All category models (except Settings and Checkpoint) share this pattern:
- `{entity}_id` — canonical ID (from JSON, often matches filename without extension)
- `slug` — URL-safe version of the ID (alphanumeric + underscores only, via `re.sub(r'[^a-zA-Z0-9_]', '', id)`)
- `name` — display name
- `filename` — original JSON filename
- `data` — full JSON blob (SQLAlchemy JSON column)
- `default_fields` — list of `section::key` strings saved as the user's preferred prompt fields
- `image_path` — relative path under `static/uploads/`
### Data Flow: JSON → DB → Prompt → ComfyUI
1. **JSON files** in `data/{characters,clothing,actions,styles,scenes,detailers,looks}/` are loaded by `sync_*()` functions into SQLite.
2. At generation time, `build_prompt(data, selected_fields, default_fields, active_outfit)` converts the character JSON blob into `{"main": ..., "face": ..., "hand": ...}` prompt strings.
3. `_prepare_workflow(workflow, character, prompts, ...)` wires prompts and LoRAs into the loaded `comfy_workflow.json`.
4. `queue_prompt(workflow, client_id)` POSTs the workflow to ComfyUI's `/prompt` endpoint.
5. The app polls `get_history(prompt_id)` and retrieves the image via `get_image(filename, subfolder, type)`.
---
## ComfyUI Workflow Node Map
The workflow (`comfy_workflow.json`) uses string node IDs. These are the critical nodes:
| Node | Role |
|------|------|
| `3` | Main KSampler |
| `4` | Checkpoint loader |
| `5` | Empty latent (width/height) |
| `6` | Positive prompt — contains `{{POSITIVE_PROMPT}}` placeholder |
| `7` | Negative prompt |
| `8` | VAE decode |
| `9` | Save image |
| `11` | Face ADetailer |
| `13` | Hand ADetailer |
| `14` | Face detailer prompt — contains `{{FACE_PROMPT}}` placeholder |
| `15` | Hand detailer prompt — contains `{{HAND_PROMPT}}` placeholder |
| `16` | Character LoRA (or Look LoRA when a Look is active) |
| `17` | Outfit LoRA |
| `18` | Action LoRA |
| `19` | Style / Detailer / Scene LoRA (priority: style > detailer > scene) |
LoRA nodes chain: `4 → 16 → 17 → 18 → 19`. Unused LoRA nodes are bypassed by pointing `model_source`/`clip_source` directly to the prior node. All model/clip consumers (nodes 3, 6, 7, 11, 13, 14, 15) are wired to the final `model_source`/`clip_source` at the end of `_prepare_workflow`.
---
## Key Helpers
### `build_prompt(data, selected_fields, default_fields, active_outfit)`
Converts a character (or combined) data dict into `{"main", "face", "hand"}` prompt strings.
Field selection priority:
1. `selected_fields` (from form submission) — if non-empty, use it exclusively
2. `default_fields` (saved in DB per character) — used if no form selection
3. Select all (fallback)
Fields are addressed as `"section::key"` strings (e.g. `"identity::hair"`, `"wardrobe::top"`, `"special::name"`, `"lora::lora_triggers"`).
Wardrobe format: Characters support a **nested** format where `wardrobe` is a dict of outfit names → outfit dicts (e.g. `{"default": {...}, "swimsuit": {...}}`). Legacy characters have a flat `wardrobe` dict. `Character.get_active_wardrobe()` handles both.
### `build_extras_prompt(actions, outfits, scenes, styles, detailers)`
Used by the Generator page. Combines prompt text from all checked items across categories into a single string. LoRA triggers, wardrobe fields, scene fields, style fields, detailer prompts — all concatenated.
### `_prepare_workflow(workflow, character, prompts, checkpoint, custom_negative, outfit, action, style, detailer, scene, width, height, checkpoint_data, look)`
The core workflow wiring function. Mutates the loaded workflow dict in place and returns it. Key behaviours:
- Replaces `{{POSITIVE_PROMPT}}`, `{{FACE_PROMPT}}`, `{{HAND_PROMPT}}` in node inputs.
- If `look` is provided, uses the Look's LoRA in node 16 instead of the character's LoRA, and prepends the Look's negative to node 7.
- Chains LoRA nodes dynamically — only active LoRAs participate in the chain.
- Randomises seeds for nodes 3, 11, 13.
- Applies checkpoint-specific settings (steps, cfg, sampler, VAE, base prompts) via `_apply_checkpoint_settings`.
- Runs `_cross_dedup_prompts` on nodes 6 and 7 as the final step before returning.
### `_cross_dedup_prompts(positive, negative)`
Cross-deduplicates tags between the positive and negative prompt strings. For each tag present in both, repeatedly removes the first occurrence from each side until the tag exists on only one side (or neither). Equal counts cancel completely; any excess on one side is retained. This allows deliberate overrides: adding a tag twice in positive while it appears once in negative leaves one copy in positive.
Called as the last step of `_prepare_workflow`, after `_apply_checkpoint_settings` has added `base_positive`/`base_negative`, so it operates on fully-assembled prompts.
### `_queue_generation(character, action, selected_fields, client_id)`
Convenience wrapper for character detail page generation. Loads workflow, calls `build_prompt`, calls `_prepare_workflow`, calls `queue_prompt`.
### `_queue_detailer_generation(detailer_obj, character, selected_fields, client_id, action, extra_positive, extra_negative)`
Generation helper for the detailer detail page. Merges the detailer's `prompt` list (flattened — `prompt` may be a list or string) and LoRA triggers into the character data before calling `build_prompt`. Appends `extra_positive` to `prompts["main"]` and passes `extra_negative` as `custom_negative` to `_prepare_workflow`. Accepts an optional `action` (Action model object) passed through to `_prepare_workflow` for node 18 LoRA wiring.
### `_get_default_checkpoint()`
Returns `(checkpoint_path, checkpoint_data)` from the Flask session's `default_checkpoint` key. The global default checkpoint is set via the navbar dropdown and stored server-side in the filesystem session.
### `call_llm(prompt, system_prompt)`
OpenAI-compatible chat completion call supporting:
- **OpenRouter** (cloud, configured API key + model)
- **Ollama** / **LMStudio** (local, configured base URL + model)
Implements a tool-calling loop (up to 10 turns) using `DANBOORU_TOOLS` (search_tags, validate_tags, suggest_tags) via an MCP Docker container (`danbooru-mcp:latest`). If the provider rejects tools (HTTP 400), retries without tools.
---
## JSON Data Schemas
### Character (`data/characters/*.json`)
```json
{
"character_id": "tifa_lockhart",
"character_name": "Tifa Lockhart",
"identity": { "base_specs": "", "hair": "", "eyes": "", "hands": "", "arms": "", "torso": "", "pelvis": "", "legs": "", "feet": "", "extra": "" },
"defaults": { "expression": "", "pose": "", "scene": "" },
"wardrobe": {
"default": { "full_body": "", "headwear": "", "top": "", "bottom": "", "legwear": "", "footwear": "", "hands": "", "gloves": "", "accessories": "" }
},
"styles": { "aesthetic": "", "primary_color": "", "secondary_color": "", "tertiary_color": "" },
"lora": { "lora_name": "Illustrious/Looks/tifa.safetensors", "lora_weight": 0.8, "lora_triggers": "" },
"tags": [],
"participants": { "orientation": "1F", "solo_focus": "true" }
}
```
`participants` is optional; when absent, `(solo:1.2)` is injected. `orientation` is parsed by `parse_orientation()` into Danbooru tags (`1girl`, `hetero`, etc.).
### Outfit (`data/clothing/*.json`)
```json
{
"outfit_id": "french_maid_01",
"outfit_name": "French Maid",
"wardrobe": { "full_body": "", "headwear": "", "top": "", "bottom": "", "legwear": "", "footwear": "", "hands": "", "accessories": "" },
"lora": { "lora_name": "Illustrious/Clothing/maid.safetensors", "lora_weight": 0.8, "lora_triggers": "" },
"tags": []
}
```
### Action (`data/actions/*.json`)
```json
{
"action_id": "sitting",
"action_name": "Sitting",
"action": { "full_body": "", "additional": "", "head": "", "eyes": "", "arms": "", "hands": "" },
"lora": { "lora_name": "", "lora_weight": 1.0, "lora_triggers": "" },
"tags": []
}
```
### Scene (`data/scenes/*.json`)
```json
{
"scene_id": "beach",
"scene_name": "Beach",
"scene": { "background": "", "foreground": "", "furniture": "", "colors": "", "lighting": "", "theme": "" },
"lora": { "lora_name": "", "lora_weight": 1.0, "lora_triggers": "" },
"tags": []
}
```
### Style (`data/styles/*.json`)
```json
{
"style_id": "watercolor",
"style_name": "Watercolor",
"style": { "artist_name": "", "artistic_style": "" },
"lora": { "lora_name": "", "lora_weight": 1.0, "lora_triggers": "" }
}
```
### Detailer (`data/detailers/*.json`)
```json
{
"detailer_id": "detailed_skin",
"detailer_name": "Detailed Skin",
"prompt": ["detailed skin", "pores"],
"focus": { "face": true, "hands": true },
"lora": { "lora_name": "", "lora_weight": 1.0, "lora_triggers": "" }
}
```
### Look (`data/looks/*.json`)
```json
{
"look_id": "tifa_casual",
"look_name": "Tifa Casual",
"character_id": "tifa_lockhart",
"positive": "casual clothes, jeans",
"negative": "revealing",
"lora": { "lora_name": "Illustrious/Looks/tifa_casual.safetensors", "lora_weight": 0.85, "lora_triggers": "" },
"tags": []
}
```
Looks occupy LoRA node 16, overriding the character's own LoRA. The Look's `negative` is prepended to the workflow's negative prompt.
### Checkpoint (`data/checkpoints/*.json`)
```json
{
"checkpoint_path": "Illustrious/model.safetensors",
"checkpoint_name": "Model Display Name",
"base_positive": "anime",
"base_negative": "text, logo",
"steps": 25,
"cfg": 5,
"sampler_name": "euler_ancestral",
"scheduler": "normal",
"vae": "integrated"
}
```
Checkpoint JSONs are keyed by `checkpoint_path`. If no JSON exists for a discovered model file, `_default_checkpoint_data()` provides defaults.
---
## URL Routes
### Characters
- `GET /` — character gallery (index)
- `GET /character/<slug>` — character detail with generation UI
- `POST /character/<slug>/generate` — queue generation (AJAX or form)
- `POST /character/<slug>/finalize_generation/<prompt_id>` — retrieve image from ComfyUI
- `POST /character/<slug>/replace_cover_from_preview` — promote preview to cover
- `GET/POST /character/<slug>/edit` — edit character data
- `POST /character/<slug>/upload` — upload cover image
- `POST /character/<slug>/save_defaults` — save default field selection
- `POST /character/<slug>/outfit/switch|add|delete|rename` — manage per-character wardrobe outfits
- `GET/POST /create` — create new character (blank or LLM-generated)
- `POST /rescan` — sync DB from JSON files
### Category Pattern (Outfits, Actions, Styles, Scenes, Detailers)
Each category follows the same URL pattern:
- `GET /<category>/` — gallery
- `GET /<category>/<slug>` — detail + generation UI
- `POST /<category>/<slug>/generate` — queue generation
- `POST /<category>/<slug>/finalize_generation/<prompt_id>` — retrieve image
- `POST /<category>/<slug>/replace_cover_from_preview`
- `GET/POST /<category>/<slug>/edit`
- `POST /<category>/<slug>/upload`
- `POST /<category>/<slug>/save_defaults`
- `POST /<category>/<slug>/clone` — duplicate entry
- `POST /<category>/<slug>/save_json` — save raw JSON (from modal editor)
- `POST /<category>/rescan`
- `POST /<category>/bulk_create` — LLM-generate entries from LoRA files on disk
### Looks
- `GET /looks` — gallery
- `GET /look/<slug>` — detail
- `GET/POST /look/<slug>/edit`
- `POST /look/<slug>/generate`
- `POST /look/<slug>/finalize_generation/<prompt_id>`
- `POST /look/<slug>/replace_cover_from_preview`
- `GET/POST /look/create`
- `POST /looks/rescan`
### Generator (Mix & Match)
- `GET/POST /generator` — freeform generator with multi-select accordion UI
- `POST /generator/finalize/<slug>/<prompt_id>` — retrieve image
- `POST /generator/preview_prompt` — AJAX: preview composed prompt without generating
### Checkpoints
- `GET /checkpoints` — gallery
- `GET /checkpoint/<slug>` — detail + generation settings editor
- `POST /checkpoint/<slug>/save_json`
- `POST /checkpoints/rescan`
### Utilities
- `POST /set_default_checkpoint` — save default checkpoint to session
- `GET /check_status/<prompt_id>` — poll ComfyUI for completion
- `GET /get_missing_{characters,outfits,actions,scenes}` — AJAX: list items without cover images
- `POST /generate_missing` — batch generate covers for characters
- `POST /clear_all_covers` / `clear_all_{outfit,action,scene}_covers`
- `GET /gallery` — global image gallery browsing `static/uploads/`
- `GET/POST /settings` — LLM provider configuration
- `POST /resource/<category>/<slug>/delete` — soft (JSON only) or hard (JSON + safetensors) delete
---
## Frontend
- Bootstrap 5.3 (CDN). Custom styles in `static/style.css`.
- All templates extend `templates/layout.html`. The base layout provides:
- `{% block content %}` — main page content
- `{% block scripts %}` — additional JS at end of body
- Navbar with links to all sections
- Global default checkpoint selector (saves to session via AJAX)
- Resource delete modal (soft/hard) shared across gallery pages
- `initJsonEditor(saveUrl)` — shared JSON editor modal (simple form + raw textarea tabs)
- Context processors inject `all_checkpoints`, `default_checkpoint_path`, and `COMFYUI_WS_URL` into every template.
- **No `{% block head %}` exists** in layout.html — do not try to use it.
- Generation is async: JS submits the form via AJAX (`X-Requested-With: XMLHttpRequest`), receives a `prompt_id`, opens a WebSocket to ComfyUI to show progress, then calls the finalize endpoint to save the image.
---
## LLM Integration
### System Prompts
Text files in `data/prompts/` define JSON output schemas for LLM-generated entries:
- `character_system.txt` — character JSON schema
- `outfit_system.txt` — outfit JSON schema
- `action_system.txt`, `scene_system.txt`, `style_system.txt`, `detailer_system.txt`, `look_system.txt`, `checkpoint_system.txt`
Used by: character/outfit/action/scene/style create forms, and bulk_create routes.
### Danbooru MCP Tools
The LLM loop in `call_llm()` provides three tools via a Docker-based MCP server (`danbooru-mcp:latest`):
- `search_tags(query, limit, category)` — prefix search
- `validate_tags(tags)` — exact-match validation
- `suggest_tags(partial, limit, category)` — autocomplete
The LLM uses these to verify and discover correct Danbooru-compatible tags for prompts.
All system prompts (`character_system.txt`, `outfit_system.txt`, `action_system.txt`, `scene_system.txt`, `style_system.txt`, `detailer_system.txt`, `look_system.txt`, `checkpoint_system.txt`) instruct the LLM to use these tools before finalising any tag values. `checkpoint_system.txt` applies them specifically to the `base_positive` and `base_negative` fields.
---
## LoRA File Paths
LoRA filenames in JSON are stored as paths relative to ComfyUI's `models/lora/` root:
| Category | Path prefix | Example |
|----------|-------------|---------|
| Character / Look | `Illustrious/Looks/` | `Illustrious/Looks/tifa_v2.safetensors` |
| Outfit | `Illustrious/Clothing/` | `Illustrious/Clothing/maid.safetensors` |
| Action | `Illustrious/Poses/` | `Illustrious/Poses/sitting.safetensors` |
| Style | `Illustrious/Styles/` | `Illustrious/Styles/watercolor.safetensors` |
| Detailer | `Illustrious/Detailers/` | `Illustrious/Detailers/skin.safetensors` |
| Scene | `Illustrious/Backgrounds/` | `Illustrious/Backgrounds/beach.safetensors` |
Checkpoint paths: `Illustrious/<filename>.safetensors` or `Noob/<filename>.safetensors`.
Absolute paths on disk:
- Checkpoints: `/mnt/alexander/AITools/Image Models/Stable-diffusion/{Illustrious,Noob}/`
- LoRAs: `/mnt/alexander/AITools/Image Models/lora/Illustrious/{Looks,Clothing,Poses,Styles,Detailers,Backgrounds}/`
---
## Adding a New Category
To add a new content category (e.g. "Poses" as a separate concept from Actions), the pattern is:
1. **Model** (`models.py`): Add a new SQLAlchemy model with the standard fields.
2. **Sync function** (`app.py`): Add `sync_newcategory()` following the pattern of `sync_outfits()`.
3. **Data directory**: Add `app.config['NEWCATEGORY_DIR'] = 'data/newcategory'`.
4. **Routes**: Implement index, detail, edit, generate, finalize_generation, replace_cover_from_preview, upload, save_defaults, clone, rescan routes. Follow the outfit/scene pattern exactly.
5. **Templates**: Create `templates/newcategory/{index,detail,edit,create}.html` extending `layout.html`.
6. **Nav**: Add link to navbar in `templates/layout.html`.
7. **`with_appcontext`**: Call `sync_newcategory()` in the `with app.app_context()` block at the bottom of `app.py`.
8. **Generator page**: Add to `generator()` route, `build_extras_prompt()`, and `templates/generator.html` accordion.
---
## Session Keys
The Flask filesystem session stores:
- `default_checkpoint` — checkpoint_path string for the global default
- `prefs_{slug}` — selected_fields list for character detail page
- `preview_{slug}` — relative image path of last character preview
- `prefs_outfit_{slug}`, `preview_outfit_{slug}`, `char_outfit_{slug}` — outfit detail state
- `prefs_action_{slug}`, `preview_action_{slug}`, `char_action_{slug}` — action detail state
- `prefs_scene_{slug}`, `preview_scene_{slug}`, `char_scene_{slug}` — scene detail state
- `prefs_detailer_{slug}`, `preview_detailer_{slug}`, `char_detailer_{slug}`, `action_detailer_{slug}`, `extra_pos_detailer_{slug}`, `extra_neg_detailer_{slug}` — detailer detail state (selected fields, preview image, character, action LoRA, extra positive prompt, extra negative prompt)
- `prefs_style_{slug}`, `preview_style_{slug}`, `char_style_{slug}` — style detail state
- `prefs_look_{slug}`, `preview_look_{slug}` — look detail state
---
## Running the App
```bash
cd /mnt/alexander/Projects/character-browser
source venv/bin/activate
python app.py
```
The app runs in debug mode on port 5000 by default. ComfyUI must be running at `http://127.0.0.1:8188`.
The DB is initialised and all sync functions are called inside `with app.app_context():` at the bottom of `app.py` before `app.run()`.
---
## Common Pitfalls
- **SQLAlchemy JSON mutation**: After modifying a JSON column dict in place, always call `flag_modified(obj, "data")` or the change won't be detected.
- **Dual write**: Every edit route writes back to both the DB (`db.session.commit()`) and the JSON file on disk. Both must be kept in sync.
- **Slug generation**: `re.sub(r'[^a-zA-Z0-9_]', '', id)` — note this removes hyphens and dots, not just replaces them. Character IDs like `yuna_(ff10)` become slug `yunaffx10`. This is intentional.
- **Checkpoint slugs use underscore replacement**: `re.sub(r'[^a-zA-Z0-9_]', '_', ...)` (replaces with `_`, not removes) to preserve readability in paths.
- **LoRA chaining**: If a LoRA node has no LoRA (name is empty/None), the node is skipped and `model_source`/`clip_source` pass through unchanged. Do not set the node inputs for skipped nodes.
- **AJAX detection**: `request.headers.get('X-Requested-With') == 'XMLHttpRequest'` determines whether to return JSON or redirect.
- **Session must be marked modified for JSON responses**: After setting session values in AJAX-responding routes, set `session.modified = True`.
- **Detailer `prompt` is a list**: The `prompt` field in detailer JSON is stored as a list of strings (e.g. `["detailed skin", "pores"]`), not a plain string. When merging into `tags` for `build_prompt`, use `extend` for lists and `append` for strings — never append the list object itself or `", ".join()` will fail on the nested list item.

51
DEVELOPMENT_GUIDE.md Normal file
View File

@@ -0,0 +1,51 @@
# Feature Development Guide: Gallery Pages & Character Integration
This guide outlines the architectural patterns and best practices developed during the implementation of the **Actions**, **Outfits**, and **Styles** galleries. Use this as a blueprint for adding similar features (e.g., "Scenes", "Props", "Effects").
## 1. Data Model & Persistence
- **Database Model:** Add a new class in `models.py`. Include `default_fields` (JSON) to support persistent prompt selections.
- **JSON Sync:** Implement a `sync_[feature]()` function in `app.py` to keep the SQLite database in sync with the `data/[feature]/*.json` files.
- **Slugs:** Use URL-safe slugs generated from the ID for clean routing.
## 2. Quadruple LoRA Chaining
Our workflow supports chaining up to four distinct LoRAs from specific directories:
1. **Character:** `Illustrious/Looks/` (Node 16)
2. **Outfit:** `Illustrious/Clothing/` (Node 17)
3. **Action:** `Illustrious/Poses/` (Node 18)
4. **Style:** `Illustrious/Styles/` (Node 19)
**Implementation Detail:**
In `_prepare_workflow`, LoRAs must be chained sequentially. If a previous LoRA is missing, the next one must "reach back" to the Checkpoint (Node 4) or the last valid node in the chain to maintain the model/CLIP connection. Node 19 is the terminal LoRA loader before terminal consumers (KSampler, Detailers).
## 3. Style Prompt Construction
Artistic styles follow specific formatting rules in the `build_prompt` engine:
- **Artist Attribution:** Artist names are prefixed with "by " (e.g., "by Sabu").
- **Artistic Styles:** Raw descriptive style tags (e.g., "watercolor painting") are appended to the prompt.
- **Priority:** Style tags are applied after identity and wardrobe tags but before trigger words.
## 4. Adetailer Routing
To improve generation quality, route specific JSON sub-fields to targeted Adetailers:
- **Face Detailer (Node 14):** Receives `character_name`, `expression`, and action-specific `head`/`eyes` tags.
- **Hand Detailer (Node 15):** Receives priority hand tags (Wardrobe Gloves > Wardrobe Hands > Identity Hands) and action-specific `arms`/`hands` tags.
## 5. Character-Integrated Previews
The "Killer Feature" is previewing a standalone item (like an Action, Outfit, or Style) on a specific character.
**Logic Flow:**
1. **Merge Data:** Copy `character.data`.
2. **Override/Merge:** Replace character `defaults` with feature-specific tags (e.g., Action pose overrides Character pose).
3. **Context Injection:** Append character-specific styles (e.g., `[primary_color] simple background`) to the main prompt.
4. **Auto-Selection:** When a character is selected, ensure their essential identity and active wardrobe fields are automatically included in the prompt.
## 6. UI/UX Patterns
- **Selection Boxes:** Use checkboxes next to field labels to allow users to toggle specific tags.
- **Default Selection:** Implement a "Save as Default Selection" button that persists the current checkbox state to the database.
- **Session State:** Store the last selected character and field preferences in the Flask `session` to provide a seamless experience.
- **AJAX Generation:** Use the WebSocket + Polling hybrid pattern in the frontend to show real-time progress bars without page reloads.
## 7. Directory Isolation
Always isolate LoRAs by purpose to prevent dropdown clutter:
- `get_available_loras()` -> Characters
- `get_available_clothing_loras()` -> Outfits
- `get_available_action_loras()` -> Actions/Poses
- `get_available_style_loras()` -> Styles

View File

@@ -5,16 +5,25 @@ A local web-based GUI for managing character profiles (JSON) and generating cons
## Features
- **Character Gallery**: Automatically scans your `characters/` folder and builds a searchable, sortable database.
- **Granular Prompt Control**: Every field in your character JSON (Identity, Wardrobe, Styles) has a checkbox. You decide exactly what is sent to the AI.
- **Outfit Gallery**: Manage reusable outfit presets that can be applied to any character.
- **Actions Gallery**: A library of reusable poses and actions (e.g., "Belly Dancing", "Sword Fighting") that can be previewed on any character model.
- **Styles Gallery**: Manage art style / artist LoRA presets with AI-assisted bulk creation from your styles LoRA folder.
- **Scenes Gallery**: Background and environment LoRA presets, previewable with any character.
- **Detailers Gallery**: Detail enhancement LoRA presets for fine-tuning face, hands, and other features.
- **Checkpoints Gallery**: Browse all your installed SDXL checkpoints (Illustrious & Noob families). Stores per-checkpoint generation settings (steps, CFG, sampler, VAE, base prompts) via JSON files in `data/checkpoints/`. Supports AI-assisted metadata generation from accompanying HTML files.
- **AI-Powered Creation**: Create and populate gallery entries using AI to generate profiles from descriptions or LoRA HTML files, or manually create blank templates.
- **Character-Integrated Previews**: Standalone items (Outfits/Actions/Styles/Scenes/Detailers/Checkpoints) can be previewed directly on a specific character's model.
- **Granular Prompt Control**: Every field in your JSON models (Identity, Wardrobe, Styles, Action details) has a checkbox. You decide exactly what is sent to the AI.
- **ComfyUI Integration**:
- **SDXL Optimized**: Designed for high-quality SDXL workflows.
- **SDXL Optimized**: Designed for high-quality SDXL/Illustrious workflows.
- **Localized ADetailer**: Automated Face and Hand detailing with focused prompts (e.g., only eye color and expression are sent to the face detailer).
- **LoRA Support**: Automatically detects and applies LoRAs specified in your character sheets.
- **Quad LoRA Chaining**: Chains up to four distinct LoRAs (Character + Outfit + Action + Style/Detailer/Scene) sequentially in the generation workflow.
- **Per-Checkpoint Settings**: Steps, CFG, sampler name, VAE, and base prompts are applied automatically from each checkpoint's JSON profile.
- **Real-time Progress**: Live progress bars and queue status via WebSockets (with a reliable polling fallback).
- **Batch Processing**:
- **Fill Missing**: Generate covers for every character missing one with a single click.
- **Refresh All**: Unassign all current covers and generate a fresh set for the whole collection.
- **Advanced Generator**: A dedicated page to mix-and-match characters with different checkpoints (Illustrious/Noob support) and custom prompt additions.
- **Fill Missing**: Generate covers for every item missing one with a single click, across all galleries.
- **Bulk Create from LoRAs/Checkpoints**: Auto-generate JSON metadata for entire directories using an LLM.
- **Advanced Generator**: A dedicated mix-and-match page combining any character, outfit, action, style, scene, and detailer in a single generation.
- **Smart URLs**: Sanitized, human-readable URLs (slugs) that handle special characters and slashes gracefully.
## Prerequisites
@@ -45,13 +54,18 @@ A local web-based GUI for managing character profiles (JSON) and generating cons
## Usage
### Creating Content
- **AI Generation**: Toggle "Use AI to generate profile from description" on, then describe your character, outfit, or action. The AI will generate a complete profile with appropriate tags.
- **Manual Creation**: Toggle AI generation off to create a blank template you can edit yourself.
- **Auto-naming**: Leave the filename field empty to auto-generate one from the name. If a file already exists, a number will be appended automatically.
### Gallery Management
- **Rescan**: Use the "Rescan Character Files" button if you've added new JSON files or manually edited them.
- **Save Defaults**: On a character page, select your favorite prompt combination and click "Save as Default Selection" to remember it for future quick generations.
- **Rescan**: Use the "Rescan" buttons if you've added new JSON files or manually edited them.
- **Save Defaults**: On any detail page, select your favorite prompt combination and click "Save as Default Selection" to remember it for future generations.
### Generation
- **Preview**: Generates an image and shows it to you without replacing your current cover.
- **Replace**: Generates an image and sets it as the character's official gallery cover.
- **Replace**: Generates an image and sets it as the item's official gallery cover.
- **Clean Start**: If you want to wipe the database and all generated images to start fresh:
```bash
./launch.sh --clean
@@ -59,9 +73,16 @@ A local web-based GUI for managing character profiles (JSON) and generating cons
## File Structure
- `/characters`: Your character JSON files.
- `/static/uploads`: Generated images (organized by character subfolders).
- `/templates`: HTML UI using Bootstrap 5.
- `/data/characters`: Character JSON files.
- `/data/clothing`: Outfit preset JSON files.
- `/data/actions`: Action/Pose preset JSON files.
- `/data/styles`: Art style / artist LoRA JSON files.
- `/data/scenes`: Scene/background LoRA JSON files.
- `/data/detailers`: Detailer LoRA JSON files.
- `/data/checkpoints`: Per-checkpoint metadata JSON files (steps, CFG, sampler, VAE, base prompts).
- `/data/prompts`: LLM system prompts used by the AI-assisted bulk creation features.
- `/static/uploads`: Generated images (organized by subfolders).
- `app.py`: Flask backend and prompt-building logic.
- `comfy_workflow.json`: The API-format workflow used for generations.
- `models.py`: SQLite database schema.
- `models.py`: SQLAlchemy database models.
- `DEVELOPMENT_GUIDE.md`: Architectural patterns for extending the browser.

208
TAG_MCP_README.md Normal file
View File

@@ -0,0 +1,208 @@
# danbooru-mcp
An MCP (Model Context Protocol) server that lets an LLM search, validate, and get suggestions for valid **Danbooru tags** — the prompt vocabulary used by Illustrious and other Danbooru-trained Stable Diffusion models.
Tags are scraped directly from the **Danbooru public API** and stored in a local SQLite database with an **FTS5 full-text search index** for fast prefix/substring queries. Each tag includes its post count, category, and deprecation status so the LLM can prioritise well-used, canonical tags.
---
## Tools
| Tool | Description |
|------|-------------|
| `search_tags(query, limit=20, category=None)` | Prefix/full-text search — returns rich tag objects ordered by relevance |
| `validate_tags(tags)` | Exact-match validation — splits into `valid`, `deprecated`, `invalid` |
| `suggest_tags(partial, limit=10, category=None)` | Autocomplete for partial tag strings, sorted by post count |
### Return object shape
All tools return tag objects with:
```json
{
"name": "blue_hair",
"post_count": 1079908,
"category": "general",
"is_deprecated": false
}
```
### Category filter values
`"general"` · `"artist"` · `"copyright"` · `"character"` · `"meta"`
---
## Setup
### 1. Install dependencies
```bash
pip install -e .
```
### 2. Build the SQLite database (scrapes the Danbooru API)
```bash
python scripts/scrape_tags.py
```
This scrapes ~12 million tags from the Danbooru public API (no account required)
and stores them in `db/tags.db` with a FTS5 index.
Estimated time: **515 minutes** depending on network speed.
```
Options:
--db PATH Output database path (default: db/tags.db)
--workers N Parallel HTTP workers (default: 4)
--max-page N Safety cap on pages (default: 2500)
--no-resume Re-scrape all pages from scratch
--no-fts Skip FTS5 rebuild (for incremental runs)
```
The scraper is **resumable** — if interrupted, re-run it and it will
continue from where it left off.
### 3. (Optional) Test API access first
```bash
python scripts/test_danbooru_api.py
```
### 4. Run the MCP server
```bash
python src/server.py
```
---
## Docker
### Quick start (pre-built DB — recommended)
Use this when you've already run `python scripts/scrape_tags.py` and have `db/tags.db`:
```bash
# Build image with the pre-built DB baked in (~30 seconds)
docker build -f Dockerfile.prebuilt -t danbooru-mcp .
# Verify
docker run --rm --entrypoint python danbooru-mcp \
-c "import sqlite3,sys; c=sqlite3.connect('/app/db/tags.db'); sys.stderr.write(str(c.execute('SELECT COUNT(*) FROM tags').fetchone()[0]) + ' tags\n')"
```
### Build from scratch (runs the scraper during Docker build)
```bash
# Scrapes the Danbooru API during build — takes ~15 minutes
docker build \
--build-arg DANBOORU_USER=your_username \
--build-arg DANBOORU_API_KEY=your_api_key \
-t danbooru-mcp .
```
### MCP client config (Docker)
```json
{
"mcpServers": {
"danbooru-tags": {
"command": "docker",
"args": ["run", "--rm", "-i", "danbooru-mcp:latest"]
}
}
}
```
---
## MCP Client Configuration
### Claude Desktop (`claude_desktop_config.json`)
```json
{
"mcpServers": {
"danbooru-tags": {
"command": "python",
"args": ["/absolute/path/to/danbooru-mcp/src/server.py"]
}
}
}
```
### Custom DB path via environment variable
```json
{
"mcpServers": {
"danbooru-tags": {
"command": "python",
"args": ["/path/to/src/server.py"],
"env": {
"DANBOORU_TAGS_DB": "/custom/path/to/tags.db"
}
}
}
}
```
---
## Example LLM Prompt Workflow
```
User: Generate a prompt for a girl with blue hair and a sword.
LLM calls validate_tags(["1girl", "blue_hairs", "sword", "looking_at_vewer"])
→ {
"valid": ["1girl", "sword"],
"deprecated": [],
"invalid": ["blue_hairs", "looking_at_vewer"]
}
LLM calls suggest_tags("blue_hair", limit=3)
→ [
{"name": "blue_hair", "post_count": 1079908, "category": "general"},
{"name": "blue_hairband", "post_count": 26905, "category": "general"},
...
]
LLM calls suggest_tags("looking_at_viewer", limit=1)
→ [{"name": "looking_at_viewer", "post_count": 4567890, "category": "general"}]
Final validated prompt: 1girl, blue_hair, sword, looking_at_viewer
```
---
## Project Structure
```
danbooru-mcp/
├── data/
│ └── all_tags.csv # original CSV export (legacy, replaced by API scrape)
├── db/
│ └── tags.db # SQLite DB (generated, gitignored)
├── plans/
│ └── danbooru-mcp-plan.md # Architecture plan
├── scripts/
│ ├── scrape_tags.py # API scraper → SQLite (primary)
│ ├── import_tags.py # Legacy CSV importer
│ └── test_danbooru_api.py # API connectivity tests
├── src/
│ └── server.py # MCP server
├── pyproject.toml
├── .gitignore
└── README.md
```
---
## Requirements
- Python 3.10+
- `mcp[cli]` — official Python MCP SDK
- `requests` — HTTP client for API scraping
- `sqlite3` — Python stdlib (no install needed)

6825
app.py

File diff suppressed because it is too large Load Diff

View File

@@ -1,38 +0,0 @@
{
"character_id": "aerith_gainsborough",
"identity": {
"base_specs": "1girl, slender build, fair skin",
"hair": "long brown hair, braided, pink ribbon",
"eyes": "green eyes",
"expression": "cheerful expression",
"hands": "pink nails",
"arms": "",
"torso": "small breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": ""
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "pink dress, red bolero jacket",
"lower_body": "long skirt",
"footwear": "brown boots",
"gloves": "",
"accessories": "gold bracelets, flower basket"
},
"styles": {
"aesthetic": "floral, gentle, final fantasy style",
"primary_color": "pink",
"secondary_color": "red",
"tertiary_color": "brown"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Final Fantasy VII"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "camilla_(fire_emblem)",
"character_name": "Camilla Nohr",
"identity": {
"base_specs": "1girl, curvaceous build, fair skin",
"hair": "long wavy lavender hair, hair covering one eye",
"eyes": "purple eyes",
"expression": "seductive smile",
"hands": "purple nails",
"arms": "",
"torso": "large breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "black headband with horns"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "black armor, cleavage",
"lower_body": "black leggings, armored plates",
"footwear": "black armored boots",
"gloves": "",
"accessories": "purple cape, large axe"
},
"styles": {
"aesthetic": "dark fantasy, gothic, fire emblem style",
"primary_color": "black",
"secondary_color": "gold",
"tertiary_color": "purple"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Fire Emblem"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "cammy",
"character_name": "Cammy White",
"identity": {
"base_specs": "1girl, muscular build, fair skin",
"hair": "long blonde hair, twin braids",
"eyes": "blue eyes",
"expression": "serious look",
"hands": "green nails",
"arms": "",
"torso": "medium breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "scar on left cheek, green camouflage paint on legs"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "green high-leg leotard",
"lower_body": "bare legs",
"footwear": "black combat boots, green socks",
"gloves": "red gauntlets",
"accessories": "red beret"
},
"styles": {
"aesthetic": "military, athletic, street fighter style",
"primary_color": "green",
"secondary_color": "red",
"tertiary_color": "black"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Street Fighter"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "ciri",
"character_name": "Ciri",
"identity": {
"base_specs": "1girl, athletic build",
"hair": "ashen grey hair, messy bun",
"eyes": "emerald green eyes, mascara",
"expression": "determined look",
"hands": "green nails",
"arms": "",
"torso": "medium breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "scar over eye"
},
"wardrobe": {
"inner_layer": "white blouse",
"outer_layer": "",
"lower_body": "brown leather trousers",
"footwear": "brown leather boots",
"gloves": "brown leather gloves",
"accessories": "silver sword on back, witcher medallion"
},
"styles": {
"aesthetic": "gritty, fantasy, witcher style",
"primary_color": "white",
"secondary_color": "brown",
"tertiary_color": "silver"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"The Witcher 3"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "delinquent_mother_flim13",
"character_name": "Delinquent Mother",
"identity": {
"base_specs": "1girl, milf, gyaru, tall",
"hair": "blonde hair, long hair",
"eyes": "sharp eyes",
"expression": "smirk, sharp teeth",
"hands": "painted nails",
"arms": "",
"torso": "very large breasts",
"pelvis": "wide hips",
"legs": "",
"feet": "",
"distinguishing_marks": ""
},
"wardrobe": {
"inner_layer": "biege sweater, cleavage",
"outer_layer": "",
"lower_body": "pencil skirt",
"footwear": "high heels",
"gloves": "",
"accessories": "necklace, rings"
},
"styles": {
"aesthetic": "gyaru, milf, pink leopard print",
"primary_color": "pink",
"secondary_color": "black",
"tertiary_color": "gold"
},
"lora": {
"lora_name": "Illustrious/Looks/Gyaru_mom_Flim13_IL_V1.safetensors",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Original","flim13"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "jessica_rabbit",
"character_name": "Jessica Rabbit",
"identity": {
"base_specs": "1girl, voluptuous build, tall,",
"hair": "long red hair, side part, hair over one eye",
"eyes": "green eyes, heavy makeup, purple eyeshadow",
"expression": "seductive smile",
"hands": "purple elbow gloves",
"arms": "",
"torso": "large breasts",
"pelvis": "narrow waist",
"legs": "",
"feet": "",
"distinguishing_marks": "red lips"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "red sequin dress, strapless, high slit, backless",
"lower_body": "side_slit,",
"footwear": "red high heels",
"gloves": "purple opera gloves",
"accessories": "gold earrings, glitter"
},
"styles": {
"aesthetic": "noir, cartoon, glamorous",
"primary_color": "red",
"secondary_color": "purple",
"tertiary_color": "gold"
},
"lora": {
"lora_name": "",
"lora_weight": 0.8,
"lora_triggers": ""
},
"tags": [
"Who Framed Roger Rabbit"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "majin_android_21",
"character_name": "Majin Android 21",
"identity": {
"base_specs": "1girl, curvaceous build, pink skin",
"hair": "long voluminous white hair",
"eyes": "red eyes, black sclera",
"expression": "evil smile",
"hands": "black claws, pink nails",
"arms": "",
"torso": "large breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "pink skin, long tail, pointy ears"
},
"wardrobe": {
"inner_layer": "black tube top",
"outer_layer": "",
"lower_body": "white harem pants",
"footwear": "black and yellow boots",
"gloves": "black sleeves",
"accessories": "gold bracelets, gold neck ring, hoop earrings"
},
"styles": {
"aesthetic": "supernatural, anime, dragon ball style",
"primary_color": "pink",
"secondary_color": "white",
"tertiary_color": "gold"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Dragon Ball FighterZ"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "marin_kitagawa",
"character_name": "Marin Kitagawa",
"identity": {
"base_specs": "1girl, slender build, fair skin, asian",
"hair": "long blonde hair, pink tips",
"eyes": "pink eyes (contacts)",
"expression": "excited smile",
"hands": "long pink nails",
"arms": "",
"torso": "medium breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "piercings"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "white school shirt, loosely tied blue tie",
"lower_body": "blue plaid miniskirt",
"footwear": "black loafers, black socks",
"gloves": "",
"accessories": "choker, various bracelets"
},
"styles": {
"aesthetic": "gyaru, modern, anime style",
"primary_color": "white",
"secondary_color": "blue",
"tertiary_color": "pink"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"My Dress-Up Darling"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "nessa",
"character_name": "Nessa",
"identity": {
"base_specs": "1girl, athletic build, dark skin",
"hair": "long hair, light blue highlights",
"eyes": "blue eyes",
"expression": "confident smile",
"hands": "blue nails",
"arms": "",
"torso": "small breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "blue earrings"
},
"wardrobe": {
"inner_layer": "white and blue bikini top",
"outer_layer": "gym uniform, number 049",
"lower_body": "white and blue shorts",
"footwear": "blue and white sandals",
"gloves": "",
"accessories": "wristband, life buoy, pokeball"
},
"styles": {
"aesthetic": "sporty, aquatic, pokemon style",
"primary_color": "blue",
"secondary_color": "white",
"tertiary_color": "orange"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Pokemon"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "princess_peach",
"character_name": "Princess Peach",
"identity": {
"base_specs": "1girl, slender build, fair skin",
"hair": "long blonde hair, voluminous, crown",
"eyes": "blue eyes, long eyelashes",
"expression": "gentle smile",
"hands": "",
"arms": "",
"torso": "medium breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "pink lips, blue earrings"
},
"wardrobe": {
"inner_layer": "white petticoat",
"outer_layer": "pink floor-length ball gown, puffy sleeves, dark pink panniers",
"lower_body": "long skirt",
"footwear": "red high heels",
"gloves": "white opera gloves",
"accessories": "gold crown with red and blue jewels, blue brooch"
},
"styles": {
"aesthetic": "royal, whimsical, nintendo style",
"primary_color": "pink",
"secondary_color": "gold",
"tertiary_color": "blue"
},
"lora": {
"lora_name": "Illustrious/Looks/Princess_Peach_Shiny_Style_V4.0_Illustrious_1652958.safetensors",
"lora_weight": 0.8,
"lora_triggers": "princess peach, crown, pink dress, shiny skin, royal elegance"
},
"tags": [
"Super Mario"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "riju",
"character_name": "Riju",
"identity": {
"base_specs": "1girl, young, dark skin, gerudo",
"hair": "short red hair, braided ponytail, gold hair ornament",
"eyes": "green eyes",
"expression": "serious",
"hands": "",
"arms": "",
"torso": "small breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "darkblue lipstick,"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "black top, blue sash",
"lower_body": "black skirt, pelvic curtain,",
"footwear": "gold high heels",
"gloves": "",
"accessories": "gold jewelry, earrings"
},
"styles": {
"aesthetic": "fantasy, desert, gerudo style",
"primary_color": "gold",
"secondary_color": "black",
"tertiary_color": "red"
},
"lora": {
"lora_name": "",
"lora_weight": 0.8,
"lora_triggers": ""
},
"tags": [
"The Legend of Zelda"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "rouge_the_bat",
"character_name": "Rouge the Bat",
"identity": {
"base_specs": "1girl, anthro, bat girl, white fur",
"hair": "short white hair",
"eyes": "teal eyes",
"expression": "sly smirk",
"hands": "white gloves",
"arms": "",
"torso": "large breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "bat wings, eyeshadow"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "black skin-tight jumpsuit, pink heart-shaped chest plate, bare shoulders, cleavage",
"lower_body": "jumpsuit",
"footwear": "white boots, pink heart motifs",
"gloves": "white gloves, pink cuffs",
"accessories": "blue eyeshadow"
},
"styles": {
"aesthetic": "jewels, museum,sleek, spy, sonic style",
"primary_color": "white",
"secondary_color": "pink",
"tertiary_color": "black"
},
"lora": {
"lora_name": "Illustrious/Looks/Rouge_the_bat_v2.safetensors",
"lora_weight": 0.8,
"lora_triggers": ""
},
"tags": [
"Sonic the Hedgehog"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "ryouko_(tenchi_muyou!)",
"character_name": "Ryouko Hakubi",
"identity": {
"base_specs": "1girl, slim build,",
"hair": "long teal hair, spiky, voluminous",
"eyes": "golden eyes, cat-like pupils",
"expression": "confident smirk",
"hands": "",
"arms": "",
"torso": "medium breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "red gem on forehead,"
},
"wardrobe": {
"inner_layer": "long white dress, plunging neckline, black belt",
"outer_layer": "black and orange long sleeve jacket with purple trim,",
"lower_body": "side_slit,, red trousers",
"footwear": "",
"gloves": "red gloves",
"accessories": "red gems, wristbands"
},
"styles": {
"aesthetic": "90s anime, sci-fi",
"primary_color": "teal",
"secondary_color": "white",
"tertiary_color": "red"
},
"lora": {
"lora_name": "",
"lora_weight": 0.8,
"lora_triggers": "ryouko hakubi, space pirate"
},
"tags": [
"Tenchi Muyou!", "Tenchi Muyo!"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "sarah_miller_(the_last_of_us)",
"character_name": "Sarah Miller",
"identity": {
"base_specs": "1girl, loli, small build",
"hair": "blonde hair, short hair",
"eyes": "blue eyes",
"expression": "smile",
"hands": "",
"arms": "",
"torso": "flat chest",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": ""
},
"wardrobe": {
"inner_layer": "grey t-shirt, white shirt",
"outer_layer": "",
"lower_body": "blue jeans",
"footwear": "sneakers",
"gloves": "",
"accessories": "wristwatch"
},
"styles": {
"aesthetic": "casual, 2013 fashion",
"primary_color": "grey",
"secondary_color": "blue",
"tertiary_color": "white"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"The Last of Us"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "sucy_manbavaran",
"character_name": "Sucy Manbavaran",
"identity": {
"base_specs": "1girl, lanky build, pale skin",
"hair": "light purple hair, hair covering one eye",
"eyes": "red eyes",
"expression": "deadpan expression",
"hands": "black nails",
"arms": "",
"torso": "small breasts",
"pelvis": "narrow waist",
"legs": "",
"feet": "",
"distinguishing_marks": "dark circles under eyes"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "dark purple witch robes",
"lower_body": "long skirt with frayed edges",
"footwear": "brown boots",
"gloves": "",
"accessories": "pointed witch hat, potion bottle"
},
"styles": {
"aesthetic": "gothic, whimsical, little witch academia style",
"primary_color": "purple",
"secondary_color": "mauve",
"tertiary_color": "green"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Little Witch Academia"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "tifa_lockhart",
"character_name": "Tifa Lockhart",
"identity": {
"base_specs": "1girl, athletic build, fair skin",
"hair": "long black hair, tied end",
"eyes": "red eyes",
"expression": "kind smile",
"hands": "dark red nails",
"arms": "",
"torso": "large breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": ""
},
"wardrobe": {
"inner_layer": "black sports bra",
"outer_layer": "white tank top, black suspenders",
"lower_body": "black miniskirt",
"footwear": "red boots, black socks",
"gloves": "red fingerless gloves",
"accessories": "silver earrings"
},
"styles": {
"aesthetic": "urban, martial arts, final fantasy style",
"primary_color": "white",
"secondary_color": "black",
"tertiary_color": "red"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Final Fantasy VII"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "urbosa",
"character_name": "Urbosa",
"identity": {
"base_specs": "1girl, tall, muscular, dark skin, gerudo",
"hair": "long red hair, wild hair",
"eyes": "green eyes",
"expression": "confident",
"hands": "gold nails",
"arms": "muscular arms",
"torso": "abs, mediumS breasts",
"pelvis": "wide hips",
"legs": "muscular legs",
"feet": "",
"distinguishing_marks": "dark blue lipstick, gerudo markings"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "blue top, blue champion's skirt, green sash, green shoulder guards,",
"lower_body": "blue skirt",
"footwear": "gold heels",
"gloves": "",
"accessories": "gold jewelry, scimitar"
},
"styles": {
"aesthetic": "fantasy, warrior, gerudo style",
"primary_color": "gold",
"secondary_color": "blue",
"tertiary_color": "red"
},
"lora": {
"lora_name": "",
"lora_weight": 0.8,
"lora_triggers": ""
},
"tags": [
"The Legend of Zelda"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "yor_briar",
"character_name": "Yor Briar",
"identity": {
"base_specs": "1girl, slender build, fair skin",
"hair": "long black hair, styled with gold headband",
"eyes": "red eyes",
"expression": "gentle yet mysterious smile",
"hands": "black nails",
"arms": "",
"torso": "medium breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": ""
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "black backless halter dress, red rose pattern inside",
"lower_body": "black thigh-high boots",
"footwear": "black boots",
"gloves": "black fingerless gloves",
"accessories": "gold rose-themed headband, gold needle weapons"
},
"styles": {
"aesthetic": "elegant, assassin, spy x family style",
"primary_color": "black",
"secondary_color": "red",
"tertiary_color": "gold"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Spy x Family"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "yuffie_kisaragi",
"character_name": "Yuffie Kisaragi",
"identity": {
"base_specs": "1girl, slender build, fair skin",
"hair": "short black hair, bob cut",
"eyes": "brown eyes",
"expression": "playful grin",
"hands": "",
"arms": "black sleeve on one arm",
"torso": "small breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": "headband"
},
"wardrobe": {
"inner_layer": "",
"outer_layer": "green turtleneck sweater vest, midriff",
"lower_body": "beige shorts",
"footwear": "boots, socks",
"gloves": "fingerless glove on one hand, large gauntlet on one arm",
"accessories": "shuriken"
},
"styles": {
"aesthetic": "ninja, adventurer, final fantasy style",
"primary_color": "green",
"secondary_color": "beige",
"tertiary_color": "black"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
},
"tags": [
"Final Fantasy VII"
]
}

View File

@@ -1,39 +0,0 @@
{
"character_id": "yuna_(ff10)",
"character_name": "Yuna",
"identity": {
"base_specs": "1girl, slender, fair skin",
"hair": "short brown hair, bob cut",
"eyes": "heterochromia, blue eye, green eye",
"expression": "gentle",
"hands": "",
"arms": "",
"torso": "small breasts",
"pelvis": "",
"legs": "",
"feet": "",
"distinguishing_marks": ""
},
"wardrobe": {
"inner_layer": "white kimono top, yellow obi",
"outer_layer": "",
"lower_body": "long blue skirt, floral pattern",
"footwear": "boots",
"gloves": "detached sleeves",
"accessories": "summoner staff, necklace"
},
"styles": {
"aesthetic": "fantasy, final fantasy x style",
"primary_color": "white",
"secondary_color": "blue",
"tertiary_color": "yellow"
},
"lora": {
"lora_name": "",
"lora_weight": 0.8,
"lora_triggers": ""
},
"tags": [
"Final Fantasy X"
]
}

View File

@@ -169,5 +169,45 @@
"clip": ["4", 1]
},
"class_type": "LoraLoader"
},
"17": {
"inputs": {
"lora_name": "",
"strength_model": 0.8,
"strength_clip": 0.8,
"model": ["16", 0],
"clip": ["16", 1]
},
"class_type": "LoraLoader"
},
"18": {
"inputs": {
"lora_name": "",
"strength_model": 1.0,
"strength_clip": 1.0,
"model": ["17", 0],
"clip": ["17", 1]
},
"class_type": "LoraLoader"
},
"19": {
"inputs": {
"lora_name": "",
"strength_model": 1.0,
"strength_clip": 1.0,
"model": ["18", 0],
"clip": ["18", 1]
},
"class_type": "LoraLoader"
},
"20": {
"inputs": {
"lora_name": "",
"strength_model": 1.0,
"strength_clip": 1.0,
"model": ["19", 0],
"clip": ["19", 1]
},
"class_type": "LoraLoader"
}
}

View File

@@ -0,0 +1,32 @@
{
"action_id": "3p_sex_000037",
"action_name": "3P Sex 000037",
"action": {
"full_body": "threesome",
"head": "blush",
"eyes": "half-closed_eyes",
"arms": "reaching",
"hands": "groping",
"torso": "nude",
"pelvis": "sex",
"legs": "spread_legs",
"feet": "toes_curled",
"additional": "sweat"
},
"lora": {
"lora_name": "Illustrious/Poses/3P_SEX-000037.safetensors",
"lora_weight": 0.8,
"lora_triggers": "threesome, group_sex",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"threesome",
"group_sex",
"nude",
"sex",
"blush",
"groping",
"sweat"
]
}

35
data/actions/4p_sex.json Normal file
View File

@@ -0,0 +1,35 @@
{
"action_id": "4p_sex",
"action_name": "4P Sex",
"action": {
"full_body": "Choreographed foursome group sex scene involving four participants (e.g., 1 girl and 3 boys or 3 girls and 1 boy) engaged in simultaneous sexual acts like double penetration or cooperative fellatio.",
"head": "Moaning expression, open mouth, potentially heavily breathing or performing fellatio.",
"eyes": "Heart-shaped pupils, ahegao, or rolling back in pleasure.",
"arms": "Bracing on the surface (all fours), holding onto partners, or grabbing sheets.",
"hands": "Grabbing breasts, holding legs, fingering, or resting on knees/shoulders.",
"torso": "Nude, arching back, breasts exposed and pressed or being touched.",
"pelvis": "Engaged in intercourse, involving vaginal or anal penetration, potentially double penetration.",
"legs": "Spread wide, positioned in all fours, missionary, or reverse cowgirl depending on specific interaction.",
"feet": "Toes curled, dynamic positioning based on stance (kneeling or lying).",
"additional": "Sexual fluids, messy after-sex atmosphere, sweat, steaming body."
},
"lora": {
"lora_name": "Illustrious/Poses/4P_sex.safetensors",
"lora_weight": 0.6,
"lora_triggers": "4P_sexV1",
"lora_weight_min": 0.6,
"lora_weight_max": 0.6
},
"tags": [
"4P_sexV1",
"group sex",
"foursome",
"4P",
"double penetration",
"fellatio",
"all fours",
"uncensored",
"hetero",
"sex"
]
}

View File

@@ -0,0 +1,34 @@
{
"action_id": "_malebolgia__oral_sex_tounge_afterimage_concept_2_0_illustrious",
"action_name": " Malebolgia Oral Sex Tounge Afterimage Concept 2 0 Illustrious",
"action": {
"full_body": "kneeling, leaning forward, engaged in oral activity",
"head": "facing target, mouth wide open, intense expression",
"eyes": "looking up, half-closed",
"arms": "reaching forward",
"hands": "grasping partner's thighs or hips",
"torso": "angled towards partner",
"pelvis": "stationary",
"legs": "kneeling on the floor",
"feet": "tucked behind",
"additional": "afterimage, motion blur, multiple tongues, rapid tongue movement, speed lines, saliva trails"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/[Malebolgia] Oral Sex Tounge Afterimage Concept 2.0 Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "[Malebolgia] Oral Sex Tounge Afterimage Concept 2.0 Illustrious",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"oral",
"rapid motion",
"tongue play",
"motion blur",
"surreal"
]
}

View File

@@ -0,0 +1,36 @@
{
"action_id": "actually_reliable_penis_kissing_3_variants_illustrious",
"action_name": "Actually Reliable Penis Kissing 3 Variants Illustrious",
"action": {
"full_body": "kneeling in front of standing or sitting partner, leaning forward towards crotch",
"head": "face aligned with groin, lips pressing against glans or shaft, tongue slightly out, kissing connection",
"eyes": "looking up at partner or closed in enjoyment, half-closed",
"arms": "reaching forward or resting on partner's legs",
"hands": "gently holding the shaft, cupping testicles, or resting on partner's thighs",
"torso": "leaning forward, arched back",
"pelvis": "kneeling pose, hips pushed back",
"legs": "kneeling on the ground",
"feet": "toes curled or flat",
"additional": "saliva connection, affectionate oral interaction, unsucked penis"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Actually_Reliable_Penis_Kissing_3_Variants_Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Actually_Reliable_Penis_Kissing_3_Variants_Illustrious",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"penis kissing",
"fellatio",
"oral sex",
"kneeling",
"saliva",
"tongue",
"close-up"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "after_sex_fellatio_illustriousxl_lora_nochekaiser_r1",
"action_name": "After Sex Fellatio Illustriousxl Lora Nochekaiser R1",
"action": {
"full_body": "completely_nude, lying, on_back, m_legs, spread_legs",
"head": "looking_at_viewer, tongue, open_mouth, blush, messing_hair",
"eyes": "half-closed_eyes, blue_eyes",
"arms": "arms_at_sides, on_bed",
"hands": "on_bed, pressing_bed",
"torso": "large_breasts, nipples, sweat",
"pelvis": "pussy, cum_in_pussy, leaking_cum",
"legs": "m_legs, spread_legs, legs_up",
"feet": "barefoot, toes",
"additional": "after_sex, after_vaginal, fellatio, penis, cum, cumdrip, messy_body, bed_sheet"
},
"lora": {
"lora_name": "Illustrious/Poses/after-sex-fellatio-illustriousxl-lora-nochekaiser_r1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "after sex fellatio",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after_sex",
"after_vaginal",
"fellatio",
"cum_in_pussy",
"m_legs",
"lying",
"on_back",
"on_bed",
"cumdrip",
"completely_nude",
"nipples",
"tongue",
"penis",
"cum"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "afterfellatio_ill",
"action_name": "Afterfellatio Ill",
"action": {
"full_body": "kneeling, leaning_forward, pov",
"head": "looking_at_viewer, blush, tilted_head, cum_on_face",
"eyes": "half-closed_eyes, tears",
"arms": "arms_down, reaching_towards_viewer",
"hands": "handjob, touching_penis",
"torso": "leaning_forward",
"pelvis": "kneeling",
"legs": "kneeling",
"feet": "barefoot",
"additional": "cum_string, cum_in_mouth, closed_mouth"
},
"lora": {
"lora_name": "Illustrious/Poses/afterfellatio_ill.safetensors",
"lora_weight": 0.8,
"lora_triggers": "after fellatio, cum in mouth, closed mouth, cum string",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"after_fellatio",
"cum_in_mouth",
"cum_string",
"closed_mouth",
"blush",
"half-closed_eyes",
"looking_at_viewer",
"kneeling",
"pov",
"handjob"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "afteroral",
"action_name": "Afteroral",
"action": {
"full_body": "Character depicted immediately after performing oral sex, often focusing on the upper body and face.",
"head": "Messy hair, flushed cheeks, mouth slightly open or panting.",
"eyes": "Half-closed or dazed expression, potentially with runny mascara or makeup.",
"arms": "Relaxed or wiping mouth.",
"hands": "Resting or near face.",
"torso": "Heaving chest indicative of heavy breathing.",
"pelvis": "N/A (typically upper body focus)",
"legs": "N/A",
"feet": "N/A",
"additional": "Presence of bodily fluids like saliva trails or excessive cum on face and messy makeup."
},
"lora": {
"lora_name": "Illustrious/Poses/afteroral.safetensors",
"lora_weight": 1.0,
"lora_triggers": "after oral, after deepthroat",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after_fellatio",
"runny_makeup",
"smeared_lipstick",
"saliva_trail",
"excessive_cum",
"messy_hair",
"heavy_breathing",
"cum_bubble",
"penis_on_face",
"sweat"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "afterpaizuri",
"action_name": "Afterpaizuri",
"action": {
"full_body": "kneeling or sitting, displaying upper body aftermath, exhausted posture",
"head": "flushed face, messy hair, panting, mouth slightly open, tongue out",
"eyes": "half-closed eyes, dazed expression, looking at viewer",
"arms": "resting on thighs or gesturing towards chest",
"hands": "presenting breasts or cleaning face",
"torso": "exposed cleavage, chest covered in white liquid, disheveled clothes",
"pelvis": "hips settling back, kneeling posture",
"legs": "kneeling, thighs together or slightly spread",
"feet": "tucked under buttocks or relaxed",
"additional": "semen on breasts, semen on face, heavy breathing, sweat, sticky fluids"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/afterpaizuri.safetensors",
"lora_weight": 1.0,
"lora_triggers": "afterpaizuri",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after paizuri",
"semen on breasts",
"semen on face",
"messy",
"blush",
"dazed",
"sweat",
"disheveled"
]
}

View File

@@ -0,0 +1,43 @@
{
"action_id": "aftersexbreakv2",
"action_name": "Aftersexbreakv2",
"action": {
"full_body": "lying, on_back, on_bed, bowlegged_pose, spread_legs, twisted_torso",
"head": "messy_hair, head_back, sweaty_face",
"eyes": "rolling_eyes, half-closed_eyes, ahegao",
"arms": "arms_spread, arms_above_head",
"hands": "relaxed_hands",
"torso": "sweat, nipples, collarbone, heavy_breathing",
"pelvis": "hips, navel, female_pubic_hair",
"legs": "spread_legs, legs_up, bent_legs",
"feet": "barefoot",
"additional": "condom_wrapper, used_tissue, stained_sheets, cum_pool, bead_of_sweat"
},
"lora": {
"lora_name": "Illustrious/Poses/AfterSexBreakV2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "aftersexbreak, after sex, male sitting",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after_sex",
"lying",
"on_back",
"on_bed",
"fucked_silly",
"spread_legs",
"bowlegged_pose",
"sweat",
"blush",
"messy_hair",
"heavy_breathing",
"rolling_eyes",
"ahegao",
"cum_pool",
"condom_wrapper",
"used_tissue",
"bed_sheet",
"stained_sheets"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "against_glass_bs",
"action_name": "Against Glass Bs",
"action": {
"full_body": "leaning forward, body pressed directly against the viewing plane/glass surface",
"head": "face close to camera, breath fog on glass, cheek slightly pressed",
"eyes": "looking directly at viewer, intimate gaze",
"arms": "reaching forward towards the viewer",
"hands": "palms pressed flat against glass, fingers spread, palm prints",
"torso": "chest squished against glass, leaning into the surface",
"pelvis": "hips pushed forward or slightly angled back depending on angle",
"legs": "standing straight or knees slightly bent for leverage",
"feet": "planted firmly on the ground",
"additional": "transparent surface, condensation, distortion from glass, surface interaction"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Against_glass_bs.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Against_glass_bs",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"against glass",
"pressed against glass",
"palms on glass",
"view through glass",
"cheek press",
"distorted view"
]
}

View File

@@ -0,0 +1,34 @@
{
"action_id": "agressivechoking_000010",
"action_name": "Agressivechoking 000010",
"action": {
"full_body": "dynamic perspective, leaning forward, dominant violent stance, POV",
"head": "face close to camera, angry expression, gritting teeth or shouting, heavy breathing",
"eyes": "intense stare, dilated pupils, furious gaze, sanpaku",
"arms": "extended towards viewer or subject, muscles tensed, shoulders shrugged forward",
"hands": "fingers curled tightly, hand around neck, strangling motion, squeezing",
"torso": "hunched forward, tense upper body",
"pelvis": "weight shifted forward",
"legs": "wide stance for leverage, braced",
"feet": "planted firmly",
"additional": "sweat, speed lines, depth of field, high contrast lighting, shadow over eyes"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/AgressiveChoking-000010.safetensors",
"lora_weight": 1.0,
"lora_triggers": "AgressiveChoking-000010",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"violence",
"dominance",
"pov",
"combat",
"anger"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "ahegao_xl_v3_1278075",
"action_name": "Ahegao Xl V3 1278075",
"action": {
"full_body": "portrait or upper body focus, emphasizing facial distortion",
"head": "tilted back slightly, mouth wide open, tongue hanging out, face heavily flushed",
"eyes": "rolled back upwards, cross-eyed, look of exhaustion or ecstasy",
"arms": "raised up near the head",
"hands": "making double peace signs (v-sign) framing the face",
"torso": "facing forward",
"pelvis": "neutral",
"legs": "neutral",
"feet": "not visible",
"additional": "saliva trail, drooling, sweat, heavy blush stickers, heart-shaped pupils"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/Ahegao_XL_v3_1278075.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Ahegao_XL_v3_1278075",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"ahegao",
"rolling eyes",
"tongue out",
"open mouth",
"blush",
"drooling",
"saliva",
"cross-eyed",
"double peace sign",
"v-sign"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "amateur_pov_filming",
"action_name": "Amateur Pov Filming",
"action": {
"full_body": "selfie pose, standing or sitting, facing viewer or mirror",
"head": "looking_at_viewer, blush, maybe open mouth or shy expression",
"eyes": "looking_at_viewer, contact with camera",
"arms": "raised to hold phone or camera",
"hands": "holding_phone, holding_id_card, or adjusting clothes",
"torso": "upper body in frame, breasts, nipples",
"pelvis": "hips visible if full body mirror selfie",
"legs": "standing or sitting",
"feet": "barefoot if visible",
"additional": "phone recording interface, smartphone, mirror, amateur aesthetic"
},
"lora": {
"lora_name": "Illustrious/Poses/Amateur_POV_Filming.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Homemade_PornV1, recording, pov, prostitution",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"recording",
"pov",
"selfie",
"holding_phone",
"smartphone",
"mirror_selfie",
"holding_id_card",
"looking_at_viewer",
"prostitution",
"indoors"
]
}

View File

@@ -0,0 +1,31 @@
{
"action_id": "arch_back_sex_v1_1_illustriousxl",
"action_name": "Arch Back Sex V1 1 Illustriousxl",
"action": {
"full_body": "doggystyle, sex_from_behind, all_fours",
"head": "head_back, looking_back",
"eyes": "closed_eyes, blush",
"arms": "arms_support",
"hands": "grabbing_another's_ass",
"torso": "arched_back",
"pelvis": "lifted_hip",
"legs": "kneeling, spread_legs",
"feet": "toes",
"additional": "kiss, sweat, saliva, intense_pleasure"
},
"lora": {
"lora_name": "Illustrious/Poses/arch-back-sex-v1.1-illustriousxl.safetensors",
"lora_weight": 1.0,
"lora_triggers": "kiss, arched_back, sex_from_behind",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"hetero",
"sex",
"vaginal",
"penis",
"nude",
"indoors"
]
}

View File

@@ -0,0 +1,40 @@
{
"action_id": "arm_grab_missionary_ill_10",
"action_name": "Arm Grab Missionary Ill 10",
"action": {
"full_body": "missionary, lying, on_back, sex, vaginal",
"head": "expressive face, open mouth, one_eye_closed, blushing",
"eyes": "looking_at_viewer (optional), dilated_pupils",
"arms": "arms_up, pinned, restrained, grabbed_wrists",
"hands": "interlocked_fingers, holding_hands",
"torso": "breasts, nipples, medium_breasts",
"pelvis": "legs_spread, lifted_pelvis",
"legs": "spread_legs, legs_up, knees_up, straddling (if applicable)",
"feet": "barefoot (implied)",
"additional": "faceless_male, male_focus, motion_lines, sweat"
},
"lora": {
"lora_name": "Illustrious/Poses/arm_grab_missionary_ill-10.safetensors",
"lora_weight": 1.0,
"lora_triggers": "arm_grab_missionary",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"missionary",
"spread_legs",
"interlocked_fingers",
"holding_hands",
"arms_up",
"pinned",
"lying",
"on_back",
"sex",
"vaginal",
"faceless_male",
"one_eye_closed",
"open_mouth",
"breasts",
"nipples"
]
}

View File

@@ -0,0 +1,32 @@
{
"action_id": "ballsdeep_il_v2_2_s",
"action_name": "Ballsdeep Il V2 2 S",
"action": {
"full_body": "sexual intercourse, variable position (prone, girl on top, or from behind)",
"head": "expression of intensity or pleasure, often looking back or face down",
"eyes": "rolled back or squeezed shut",
"arms": "grasping sheets or holding partner",
"hands": "clenched or grabbing",
"torso": "arched or pressed against contrasting surface",
"pelvis": "hips pushed firmly against partner's hips, joined genitals",
"legs": "spread wide or wrapped around partner",
"feet": "toes curled",
"additional": "deep penetration, testicles pressed flat against skin, stomach bulge visible"
},
"lora": {
"lora_name": "Illustrious/Poses/BallsDeep-IL-V2.2-S.safetensors",
"lora_weight": 1.0,
"lora_triggers": "deep penetration",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"deep_penetration",
"testicles",
"stomach_bulge",
"sex",
"anal",
"vaginal",
"gaping"
]
}

View File

@@ -0,0 +1,33 @@
{
"action_id": "bathingtogether",
"action_name": "Bathingtogether",
"action": {
"full_body": "bathing, sitting, partially_submerged",
"head": "looking_at_viewer, facing_viewer",
"eyes": "eye_contact",
"arms": "arms_resting",
"hands": "resting",
"torso": "bare_shoulders",
"pelvis": "submerged",
"legs": "knees_up, submerged",
"feet": "no_shoes",
"additional": "bathtub, steam, water, bubbles, wet"
},
"lora": {
"lora_name": "Illustrious/Poses/bathingtogether.safetensors",
"lora_weight": 1.0,
"lora_triggers": "bathing together",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bathing",
"bathtub",
"partially_submerged",
"pov",
"looking_at_viewer",
"wet",
"steam",
"bare_shoulders"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "before_after_1230829",
"action_name": "Before After 1230829",
"action": {
"full_body": "2koma, before_and_after",
"head": "heavy_breathing, orgasm, sticky_face",
"eyes": "eyes_closed",
"arms": "variation",
"hands": "variation",
"torso": "upper_body",
"pelvis": "variation",
"legs": "variation",
"feet": "variation",
"additional": "facial, bukkake, cum, cum_on_face"
},
"lora": {
"lora_name": "Illustrious/Poses/before_after_1230829.safetensors",
"lora_weight": 0.9,
"lora_triggers": "before_after",
"lora_weight_min": 0.9,
"lora_weight_max": 0.9
},
"tags": [
"before_and_after",
"2koma",
"facial",
"bukkake",
"cum",
"cum_on_face",
"orgasm",
"heavy_breathing",
"upper_body",
"split_theme"
]
}

View File

@@ -0,0 +1,31 @@
{
"action_id": "belly_dancing",
"action_name": "Belly Dancing",
"action": {
"full_body": "belly dancing, standing",
"head": "",
"eyes": "",
"arms": "hands above head",
"hands": "palms together",
"torso": "",
"pelvis": "swaying hips",
"legs": "",
"feet": "",
"additional": ""
},
"participants": {
"solo_focus": "false",
"orientation": "F"
},
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": "",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"belly dancing",
"dance"
]
}

View File

@@ -0,0 +1,31 @@
{
"action_id": "bentback",
"action_name": "Bentback",
"action": {
"full_body": "bent_over, leaning_forward, from_behind",
"head": "looking_at_viewer, looking_back",
"eyes": "open_eyes",
"arms": "arms_at_sides",
"hands": "hands_on_legs",
"torso": "twisted_torso, arched_back",
"pelvis": "ass_focus",
"legs": "kneepits",
"feet": "barefoot",
"additional": "unnatural_body"
},
"lora": {
"lora_name": "Illustrious/Poses/BentBack.safetensors",
"lora_weight": 1.0,
"lora_triggers": "bentback, kneepits",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bent_over",
"from_behind",
"looking_back",
"kneepits",
"twisted_torso",
"ass_focus"
]
}

View File

@@ -0,0 +1,34 @@
{
"action_id": "blowjobcomicpart2",
"action_name": "Blowjobcomicpart2",
"action": {
"full_body": "3koma, comic layout, vertical panel sequence",
"head": "tongue_out, open mouth, saliva",
"eyes": "empty_eyes, rolled eyes",
"arms": "arms_down or holding_head",
"hands": "fingers_on_penis",
"torso": "visible torso",
"pelvis": "sexual_activity",
"legs": "kneeling or sitting",
"feet": "out_of_frame",
"additional": "fellatio, irrumatio, licking_penis, ejaculation, excessive_cum"
},
"lora": {
"lora_name": "Illustrious/Poses/BlowjobComicPart2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "bjmcut",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"3koma",
"comic",
"fellatio",
"irrumatio",
"licking_penis",
"ejaculation",
"excessive_cum",
"empty_eyes",
"tongue_out"
]
}

View File

@@ -0,0 +1,32 @@
{
"action_id": "bodybengirl",
"action_name": "Bodybengirl",
"action": {
"full_body": "suspended_congress, lifting_person, standing",
"head": "",
"eyes": "",
"arms": "reaching",
"hands": "",
"torso": "torso_grab, bent_over",
"pelvis": "",
"legs": "legs_hanging",
"feet": "",
"additional": "1boy, 1girl, suspended"
},
"lora": {
"lora_name": "Illustrious/Poses/BodyBenGirl.safetensors",
"lora_weight": 1.0,
"lora_triggers": "bentstand-front, bentstand-behind",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"suspended_congress",
"torso_grab",
"bent_over",
"reaching",
"standing",
"1boy",
"1girl"
]
}

View File

@@ -0,0 +1,33 @@
{
"action_id": "bodybengirlpart2",
"action_name": "Bodybengirlpart2",
"action": {
"full_body": "body suspended in mid-air, held by torso, bent over forward",
"head": "embarrassed, sweating, scared",
"eyes": "open, looking away or down",
"arms": "arms hanging down, limp arms, arms at sides",
"hands": "hands open, limp",
"torso": "torso grab, bent forward",
"pelvis": "hips raised if bent over",
"legs": "legs dangling, knees together, feet apart",
"feet": "feet off ground, dangling",
"additional": "motion lines, sweat drops"
},
"lora": {
"lora_name": "Illustrious/Poses/BodyBenGirlPart2.safetensors",
"lora_weight": 0.9,
"lora_triggers": "bentstand-behind, dangling legs, dangling arms, from_side, arms hanging down, torso_grab, suspended",
"lora_weight_min": 0.9,
"lora_weight_max": 0.9
},
"tags": [
"torso_grab",
"suspension",
"bent_over",
"knees_together_feet_apart",
"arms_at_sides",
"motion_lines",
"embarrassed",
"sweat"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "bored_retrain_000115_1336316",
"action_name": "Bored Retrain 000115 1336316",
"action": {
"full_body": "slouching sitting posture, low energy, visually disinterested, exhibiting ennui",
"head": "tilted to the side, resting heavily on hand, cheek squished against palm, blank or annoyed expression",
"eyes": "half-lidded, dull gaze, looking away or staring into space, heavy eyelids",
"arms": "elbow proped on surface, arm supporting the head, other arm dangling loosely or lying flat",
"hands": "palm supporting chin or cheek, fingers lazily curled",
"torso": "slumped shoulders, curved spine, leaning forward",
"pelvis": "sitting back, relaxed weight",
"legs": "stretched out under a table or loosely crossed",
"feet": "resting idly",
"additional": "sighing context, waiting, lethargic atmosphere"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Bored_Retrain-000115_1336316.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Bored_Retrain-000115_1336316",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"boredom",
"uninterested",
"slouching",
"ennui",
"tired",
"cheek resting on hand"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "breast_pressh",
"action_name": "Breast Pressh",
"action": {
"full_body": "sandwiched, girl_sandwich, standing, height_difference, size_difference",
"head": "head_between_breasts, face_between_breasts, cheek_squash",
"eyes": "eyes_closed, squints",
"arms": "hugging, arms_around_waist",
"hands": "hands_on_back",
"torso": "breast_press, chest_to_chest",
"pelvis": "hips_touching",
"legs": "standing, legs_apart",
"feet": "barefoot",
"additional": "1boy, 2girls, multiple_girls, hetero"
},
"lora": {
"lora_name": "Illustrious/Poses/breast_pressH.safetensors",
"lora_weight": 0.6,
"lora_triggers": "breast_pressH",
"lora_weight_min": 0.6,
"lora_weight_max": 0.6
},
"tags": [
"height_difference",
"girl_sandwich",
"breast_press",
"sandwiched",
"size_difference",
"head_between_breasts",
"cheek_squash",
"face_between_breasts",
"1boy",
"2girls"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "breast_smother_illustriousxl_lora_nochekaiser",
"action_name": "Breast Smother Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "intimate upper body POV or side view, character pressing another's face into their chest",
"head": "tilted downwards, chin tucked, affectionate or dominant expression",
"eyes": "looking down, half-closed, affectionate gaze",
"arms": "wrapping around the partner's head or neck",
"hands": "cradling the back of the head, fingers interlocked in hair, pressing face deeper",
"torso": "leaning slightly backward, chest prominent, squished breasts, cleavage",
"pelvis": "close contact",
"legs": "standing or sitting, posture relaxed",
"feet": "planted on ground",
"additional": "face buried in breasts, chest covering face, soft lighting, skin compression"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/breast-smother-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "breast-smother-illustriousxl-lora-nochekaiser",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"breast smother",
"buried in breasts",
"face in cleavage",
"motorboating",
"breast press",
"hugging",
"embrace",
"pov",
"large breasts"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "breast_sucking_fingering_illustriousxl_lora_nochekaiser",
"action_name": "Breast Sucking Fingering Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "duo, sexual interaction, close-up, breast sucking, fingering, intimate embrace",
"head": "face buried in breasts, sucking nipple, kissing breast, saliva",
"eyes": "eyes closed, heavy breathing, blush, expression of bliss",
"arms": "reaching down, holding partner close, arm around waist",
"hands": "fingering, fingers inside, rubbing clitoris, squeezing breast, groping",
"torso": "large breasts, exposed nipples, nude torso, pressing bodies",
"pelvis": "legs spread, pussy exposed, vaginal manipulation",
"legs": "open legs, m-legs, intertwined legs",
"feet": "toes curled, relaxed feet",
"additional": "saliva trail, sweat, motion lines, uncensored"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/breast-sucking-fingering-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "breast-sucking-fingering-illustriousxl-lora-nochekaiser",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"breast sucking",
"fingering",
"nipple suck",
"fingers in pussy",
"duo",
"sexual act",
"exposed breasts",
"pussy juice",
"saliva",
"stimulation"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "brokenglass_illusxl_incrs_v1",
"action_name": "Brokenglass Illusxl Incrs V1",
"action": {
"full_body": "dynamic shot of character seemingly breaking through a barrier",
"head": "intense expression, face visible through cracks",
"eyes": "sharp focus, wide open",
"arms": "outstretched towards the viewer or shielding face",
"hands": "touching the surface of the invisible wall, interacting with fragments",
"torso": "twisted slightly to suggest impact force",
"pelvis": "anchored or mid-air depending on angle",
"legs": "posed dynamically to support the movement",
"feet": "grounded or trailing",
"additional": "foreground filled with sharp broken glass shards, spiderweb cracks glowing with light, refractive surfaces, cinematic debris"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/BrokenGlass_illusXL_Incrs_v1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BrokenGlass_illusXL_Incrs_v1",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"broken glass",
"shattered",
"cracked screen",
"fragmentation",
"glass shards",
"impact",
"cinematic",
"destruction"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "butt_smother_ag_000043",
"action_name": "Butt Smother Ag 000043",
"action": {
"full_body": "facesitting, character sitting on face, pov from below, dominant pose",
"head": "looking down at viewer, looking back over shoulder",
"eyes": "looking at viewer, half-closed eyes, seductive gaze",
"arms": "arms reaching back, supporting weight",
"hands": "hands spreading buttocks, hands on thighs, hands grasping victim's head",
"torso": "back arched, leaning forward",
"pelvis": "buttocks pressing down slightly, buttocks covering screen, heavy weight",
"legs": "thighs straddling viewer, knees bent, spread legs",
"feet": "feet planted on ground, toes curled",
"additional": "extreme close-up, squished face, muffling, soft lighting on skin"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Butt_smother_ag-000043.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Butt_smother_ag-000043",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"facesitting",
"butt smother",
"femdom",
"pov",
"big ass",
"ass focus",
"suffocation",
"submissive view"
]
}

37
data/actions/buttjob.json Normal file
View File

@@ -0,0 +1,37 @@
{
"action_id": "buttjob",
"action_name": "Buttjob",
"action": {
"full_body": "bent over, back turned to viewer, kneeling or standing",
"head": "looking back over shoulder",
"eyes": "looking at viewer, half-closed",
"arms": "supporting upper body weight on cool surface or knees",
"hands": "resting on bed, knees or holding buttocks apart",
"torso": "arched back, leaning forward",
"pelvis": "pushed backward, hips elevated high",
"legs": "kneeling with thighs spread or standing bent",
"feet": "arched or plantar flexion",
"additional": "glutes pressed together, friction focus, skin indentation"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/buttjob.safetensors",
"lora_weight": 1.0,
"lora_triggers": "buttjob",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"buttjob",
"back to viewer",
"bent over",
"arched back",
"kneeling",
"ass focus",
"glutes",
"between buttocks"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "carwashv2",
"action_name": "Carwashv2",
"action": {
"full_body": "washing_vehicle, standing, bending_over",
"head": "wet_hair",
"eyes": "looking_at_viewer",
"arms": "reaching, arms_up",
"hands": "holding_sponge, holding_hose",
"torso": "wet_clothes, breast_press, breasts_on_glass",
"pelvis": "shorts, denim_shorts",
"legs": "standing, legs_apart",
"feet": "barefoot",
"additional": "car, motor_vehicle, soap_bubbles, outdoors, car_interior"
},
"lora": {
"lora_name": "Illustrious/Poses/CarWashV2.safetensors",
"lora_weight": 0.8,
"lora_triggers": "w4sh1n, w4sh0ut",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"car",
"motor_vehicle",
"washing_vehicle",
"soap_bubbles",
"wet",
"wet_hair",
"wet_clothes",
"holding_sponge",
"holding_hose",
"breasts_on_glass",
"breast_press",
"outdoors",
"car_interior"
]
}

View File

@@ -0,0 +1,36 @@
{
"action_id": "cat_stretchill",
"action_name": "Cat Stretchill",
"action": {
"full_body": "kneeling, all_fours, cat_stretch, pose",
"head": "looking_ahead, head_down",
"eyes": "closed_eyes, trembling",
"arms": "outstretched_arms, reaching_forward, hands_on_ground",
"hands": "palms_down",
"torso": "arched_back, chest_down",
"pelvis": "hips_up, buttocks_up",
"legs": "kneeling, knees_on_ground",
"feet": "feet_up",
"additional": "cat_ears, cat_tail, trembling"
},
"lora": {
"lora_name": "Illustrious/Poses/cat_stretchILL.safetensors",
"lora_weight": 0.7,
"lora_triggers": "stretching, cat stretch, downward dog, trembling",
"lora_weight_min": 0.7,
"lora_weight_max": 0.7
},
"tags": [
"cat_stretch",
"kneeling",
"all_fours",
"stretching",
"arched_back",
"outstretched_arms",
"hands_on_ground",
"downward_dog",
"trembling",
"cat_ears",
"cat_tail"
]
}

View File

@@ -0,0 +1,40 @@
{
"action_id": "caught_masturbating_illustrious",
"action_name": "Caught Masturbating Illustrious",
"action": {
"full_body": "standing in doorway, confronting viewer",
"head": "looking down or at viewer, surprised expression, blushing",
"eyes": "wide open, looking away or at penis",
"arms": "arms at sides or covering mouth",
"hands": "relaxed or raised in shock",
"torso": "facing viewer",
"pelvis": "standing straight",
"legs": "standing, legs together",
"feet": "standing on floor",
"additional": "male pov, male masturbation in foreground, open door background"
},
"lora": {
"lora_name": "Illustrious/Poses/Caught_Masturbating_ILLUSTRIOUS.safetensors",
"lora_weight": 0.75,
"lora_triggers": "caught, male pov, male masturbation, girl walking in door, standing in doorway",
"lora_weight_min": 0.75,
"lora_weight_max": 0.75
},
"tags": [
"pov",
"male_masturbation",
"penis",
"erection",
"walk-in",
"caught",
"doorway",
"open_door",
"standing",
"surprised",
"blush",
"looking_at_penis",
"looking_at_viewer",
"wide_shot",
"indoors"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "charm_person_magic",
"action_name": "Charm Person Magic",
"action": {
"full_body": "casting_spell, standing, magical_presence",
"head": "smile, confident_expression, glowing_eyes",
"eyes": "looking_at_viewer, glowing_eyes",
"arms": "outstretched_hand, reaching_towards_viewer, arms_up",
"hands": "open_hand, hand_gesture",
"torso": "upper_body, facing_viewer",
"pelvis": "n/a",
"legs": "n/a",
"feet": "n/a",
"additional": "aura, soft_light, magic_effects, sparkling"
},
"lora": {
"lora_name": "Illustrious/Poses/charm_person_magic.safetensors",
"lora_weight": 0.7,
"lora_triggers": "charm_person_(magic), cham_aura",
"lora_weight_min": 0.7,
"lora_weight_max": 0.7
},
"tags": [
"casting_spell",
"magic",
"aura",
"outstretched_hand",
"reaching_towards_viewer",
"glowing_eyes",
"looking_at_viewer",
"smile",
"cowboy_shot",
"solo"
]
}

View File

@@ -0,0 +1,32 @@
{
"action_id": "cheekbulge",
"action_name": "Cheekbulge",
"action": {
"full_body": "fellatio",
"head": "cheek_bulge, head_tilt, saliva",
"eyes": "looking_up",
"arms": "arms_behind_back",
"hands": "hands_on_head",
"torso": "upper_body",
"pelvis": "kneeling",
"legs": "kneeling",
"feet": "plantar_flexion",
"additional": "deepthroat, pov, penis"
},
"lora": {
"lora_name": "Illustrious/Poses/cheekbulge.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cheek bulge",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cheek_bulge",
"deepthroat",
"fellatio",
"saliva",
"head_tilt",
"penis",
"pov"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "chokehold",
"action_name": "Chokehold",
"action": {
"full_body": "rear_naked_choke, from_behind, struggling, kneeling",
"head": "head_back, expressionless, open_mouth",
"eyes": "rolling_eyes, tearing_up, empty_eyes",
"arms": "arm_around_neck, struggling, grabbing_arm",
"hands": "clenched_hands, struggling",
"torso": "leaning_forward, arched_back",
"pelvis": "kneeling, bent_over",
"legs": "kneeling, spread_legs",
"feet": "barefoot, toes_curled",
"additional": "distress, blushing, saliva, veins"
},
"lora": {
"lora_name": "Illustrious/Poses/chokehold.safetensors",
"lora_weight": 1.0,
"lora_triggers": "choke hold",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"choke_hold",
"rear_naked_choke",
"strangling",
"arm_around_neck",
"from_behind",
"struggling",
"head_back",
"clenched_teeth",
"rolling_eyes",
"drooling",
"saliva",
"ohogao"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "cleavageteasedwnsty_000008",
"action_name": "Cleavageteasedwnsty 000008",
"action": {
"full_body": "leaning_forward, sexually_suggestive",
"head": "looking_at_viewer, smile, blush, one_eye_closed",
"eyes": "blue_eyes, looking_at_viewer",
"arms": "arms_bent_at_elbows",
"hands": "hands_on_own_chest, clothes_pull, adjusting_clothes",
"torso": "cleavage, breasts_squeezed_together, areola_slip, bare_shoulders, collarbone",
"pelvis": "n/a",
"legs": "n/a",
"feet": "n/a",
"additional": "teasing, undressing"
},
"lora": {
"lora_name": "Illustrious/Poses/CleavageTeaseDwnsty-000008.safetensors",
"lora_weight": 1.0,
"lora_triggers": "pulling down own clothes, teasing",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"clothes_pull",
"shirt_pull",
"teasing",
"breasts_squeezed_together",
"areola_slip",
"undressing",
"leaning_forward",
"cleavage",
"hands_on_own_chest",
"collarbone",
"bare_shoulders",
"sexually_suggestive",
"blush",
"one_eye_closed"
]
}

View File

@@ -0,0 +1,33 @@
{
"action": {
"additional": "nsfw, semen, cum",
"arms": "",
"eyes": "looking_at_viewer, eyes_open",
"feet": "",
"full_body": "close-up, portrait",
"hands": "",
"head": "facial, open_mouth, tongue, saliva, blush",
"legs": "",
"pelvis": "",
"torso": ""
},
"action_id": "closeup_facial_illus",
"action_name": "Closeup Facial Illus",
"lora": {
"lora_name": "Illustrious/Poses/Closeup_Facial_iLLus.safetensors",
"lora_triggers": "Closeup Facial",
"lora_weight": 1,
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"facial",
"close-up",
"portrait",
"open_mouth",
"tongue",
"looking_at_viewer",
"saliva",
"blush"
]
}

35
data/actions/cof.json Normal file
View File

@@ -0,0 +1,35 @@
{
"action_id": "cof",
"action_name": "Cum on Figure",
"action": {
"full_body": "figurine, mini-girl",
"head": "",
"eyes": "",
"arms": "",
"hands": "",
"torso": "",
"pelvis": "",
"legs": "",
"feet": "",
"additional": "cum, cum on body, excessive cum, cum on face, cum on breasts, cum on chest"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/cof.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cof",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"standing force",
"carry on front",
"carry",
"lifting",
"legs wrapped",
"straddling"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "cooperative_grinding",
"action_name": "Cooperative Grinding",
"action": {
"full_body": "duo, standing, carrying, straddling, lift and carry, legs wrapped around waist, body to body",
"head": "head thrown back, blushing, heavy breathing, intense pleasure",
"eyes": "eyes closed, half-closed eyes, rolled back eyes",
"arms": "arms around neck, holding buttocks, supporting thighs, strong grip",
"hands": "grabbing, squeezing, gripping back",
"torso": "chest to chest, pressed together, close physical contact",
"pelvis": "hips touching, grinding, mating press, pelvic curtain",
"legs": "legs wrapped around, thighs spread, lifted legs",
"feet": "dangling feet, arched toes",
"additional": "sweat, motion lines, intimate, erotic atmosphere"
},
"participants": {
"solo_focus": "false",
"orientation": "MFF"
},
"lora": {
"lora_name": "Illustrious/Poses/cooperative_grinding.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cooperative_grinding",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"standing sex",
"carry",
"legs wrapped around",
"straddle",
"grinding",
"lift and carry"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "cooperativepaizuri",
"action_name": "Cooperativepaizuri",
"action": {
"full_body": "cooperative_paizuri, 2girls, 1boy, sexual_activity",
"head": "smile, open_mouth, facial",
"eyes": "looking_at_partner, half_closed_eyes",
"arms": "arms_around_neck, grabbing_penis",
"hands": "on_penis, guiding_penis",
"torso": "large_breasts, breasts_touching, nipples",
"pelvis": "penis, glans, erection",
"legs": "kneeling, straddling",
"feet": "barefoot",
"additional": "pov, cum_on_body, fluids"
},
"lora": {
"lora_name": "Illustrious/Poses/cooperativepaizuri.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cooperative paizuri",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cooperative_paizuri",
"2girls",
"1boy",
"paizuri",
"breasts",
"penis",
"facial",
"pov",
"from_side",
"large_breasts"
]
}

View File

@@ -0,0 +1,32 @@
{
"action_id": "covering_privates_illustrious_v1_0",
"action_name": "Covering Privates Illustrious V1 0",
"action": {
"full_body": "covering_privates",
"head": "embarrassed, blush",
"eyes": "looking_at_viewer",
"arms": "arm_across_chest",
"hands": "covering_breasts, covering_crotch",
"torso": "upper_body",
"pelvis": "hips",
"legs": "legs_together",
"feet": "standing",
"additional": "modesty"
},
"lora": {
"lora_name": "Illustrious/Poses/covering privates_illustrious_V1.0.safetensors",
"lora_weight": 1.0,
"lora_triggers": "covering privates, covering crotch, covering breasts",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"covering_privates",
"covering_breasts",
"covering_crotch",
"embarrassed",
"blush",
"arm_across_chest",
"legs_together"
]
}

View File

@@ -0,0 +1,26 @@
{
"action_id": "coveringownmouth_ill_v1",
"action_name": "Coveringownmouth Ill V1",
"action": {
"full_body": "character covering their mouth with their hand",
"head": "lower face obscured by hand",
"eyes": "neutral or expressive (depending on context)",
"arms": "arm raised towards face",
"hands": "hand placed over mouth, palm inward",
"torso": "upper body visible",
"pelvis": "variable",
"legs": "variable",
"feet": "variable",
"additional": "often indicates surprise, embarrassment, or silence"
},
"lora": {
"lora_name": "Illustrious/Poses/CoveringOwnMouth_Ill_V1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "covering_own_mouth",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"covering_own_mouth"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "cowgirl_position_breast_press_illustriousxl_lora_nochekaiser",
"action_name": "Cowgirl Position Breast Press Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "straddling pose, body leaning forward directly into the camera view",
"head": "face close to the viewer, looking down or directly ahead",
"eyes": "looking at viewer, intense or half-closed gaze",
"arms": "arms extending forward or bent to support weight",
"hands": "placed on an invisible surface or partner's chest",
"torso": "upper body leaning forward, breasts heavily pressed and flattened against the screen/viewer",
"pelvis": "hips wide, seated in a straddling motion",
"legs": "knees bent, thighs spread wide apart",
"feet": "tucked behind or out of frame",
"additional": "pov, squish, breast deformation, intimate distance"
},
"participants": {
"solo_focus": "false",
"orientation": "MFF"
},
"lora": {
"lora_name": "Illustrious/Poses/cowgirl-position-breast-press-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cowgirl-position-breast-press-illustriousxl-lora-nochekaiser",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cowgirl position",
"breast press",
"straddling",
"pov",
"leaning forward",
"close-up",
"breast deformation",
"squish"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "cuckold_ntr_il_nai_py",
"action_name": "Cuckold Ntr Il Nai Py",
"action": {
"full_body": "from behind, bent over, doggy style, looking back, pov",
"head": "turned to look back over shoulder, face flushed, heavy breathing, expression of pleasure or distress",
"eyes": "looking at viewer, tears, heart-shaped pupils or rolled back",
"arms": "supporting body weight on surface",
"hands": "gripping sheets or surface tightly",
"torso": "arched back, leaning forward",
"pelvis": "hips raised high, exposed",
"legs": "kneeling, spread wide",
"feet": "toes curled",
"additional": "sweat, rude, messy hair, partner silhouette implied behind"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Cuckold NTR-IL_NAI_PY.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Cuckold NTR-IL_NAI_PY",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"ntr",
"cuckold",
"pov",
"from behind",
"doggy style",
"looking back"
]
}

View File

@@ -0,0 +1,36 @@
{
"action_id": "cum_bathillustrious",
"action_name": "Cum Bathillustrious",
"action": {
"full_body": "reclining or sitting inside a bathtub filled with viscous white liquid, cum pool, partially submerged",
"head": "wet hair sticking to face, flushed cheeks, steam rising",
"eyes": "half-closed, glossy, looking at viewer",
"arms": "resting on the rim of the bathtub or submerged",
"hands": "coated in white fluid, dripping",
"torso": "naked, wet skin, heavy coverage of white liquid on chest and stomach",
"pelvis": "submerged in pool of white liquid",
"legs": "knees bent and poking out of the liquid or spread slighty",
"feet": "submerged",
"additional": "tiled bathroom background, steam, excessive cum, sticky texture, overflowing tub"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/cum_bathIllustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cum_bathIllustrious",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cum_bath",
"covered_in_cum",
"bathtub",
"wet",
"naked",
"bukkake",
"messy"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "cum_in_cleavage_illustrious",
"action_name": "Cum In Cleavage Illustrious",
"action": {
"full_body": "passionate upper body focus, intimacy",
"head": "blush, mouth slightly open, expression of pleasure or service",
"eyes": "looking at viewer, potentially heavy lidded or heart-shaped pupils",
"arms": "arms bent, hands bringing breasts together",
"hands": "holding own breasts, squeezing or pressing breasts together",
"torso": "bare chest, medium to large breasts, pronounced cleavage, cum pooling in cleavage",
"pelvis": "not visible or seated",
"legs": "not visible",
"feet": "not visible",
"additional": "pool of liquid in cleavage, messy, erotic context"
},
"lora": {
"lora_name": "Illustrious/Poses/cum_in_cleavage_illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cum_in_cleavage, holding own breasts",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cum_on_breasts",
"paizuri",
"cleavage",
"breasts",
"breast_lift",
"plump",
"mature_female",
"short_hair",
"black_hair",
"indoors"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "cum_inside_slime_v0_2",
"action_name": "Cum Inside Slime V0 2",
"action": {
"full_body": "front view, focus on midsection, semi-transparent body structure",
"head": "flustered expression, open mouth, heavy blush, tongue out",
"eyes": "rolled back, heart-shaped pupils",
"arms": "bent at elbows, hands touching abdomen",
"hands": "cupping lower belly, emphasizing fullness",
"torso": "translucent skin, visible white liquid filling the stomach and womb area, slightly distended belly",
"pelvis": "glowing with internal white fluid, see-through outer layer",
"legs": "thighs touching, slime texture dripping",
"feet": "standing firmly or slightly melting into floor",
"additional": "internal cum, x-ray, cross-section, viscous liquid, glowing interior"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Cum_inside_slime_v0.2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Cum_inside_slime_v0.2",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"slime girl",
"monster girl",
"transparent skin",
"internal cum",
"cum filled",
"x-ray",
"stomach fill",
"viscous"
]
}

View File

@@ -0,0 +1,45 @@
{
"action_id": "cum_shot",
"action_name": "Cum Shot",
"action": {
"full_body": "portrait or upper body focus, capturing the moment of ejaculation or aftermath",
"head": "tilted back or facing forward, expression of pleasure or shock",
"eyes": "closed or rolling back, eyelashes detailed",
"arms": "out of frame or hands touching face",
"hands": "optional, touching face or wiping",
"torso": "chest visible, potentially with cum_on_body",
"pelvis": "usually out of frame in this context",
"legs": "out of frame",
"feet": "out of frame",
"additional": "white fluids, messy, dripping, shiny skin"
},
"lora": {
"lora_name": "Illustrious/Poses/cum_shot.safetensors",
"lora_weight": 0.8,
"lora_triggers": "cum, facial, ejaculation",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"cum",
"facial",
"ejaculation",
"cum_on_body",
"cum_on_breasts",
"cum_in_eye",
"cum_in_mouth",
"bukkake",
"after_sex",
"messy_body",
"sticky",
"white_fluid",
"open_mouth",
"tongue",
"bukkake",
"tongue_out",
"saliva",
"sweat",
"blush",
"ahegao"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "cum_swap",
"action_name": "Cum Swap",
"action": {
"full_body": "two characters in close intimate proximity, upper bodies pressed together",
"head": "faces close, mouths open and connected, engaging in a deep kiss",
"eyes": "half-closed, heavy lidded, blushing cheeks",
"arms": "embracing partner, wrapped around neck or waist",
"hands": "cupping partner's face, holding back of head, fingers entagled in hair",
"torso": "chests touching, leaning inward",
"pelvis": "aligned with torso",
"legs": "standing or sitting positions",
"feet": "grounded or out of frame",
"additional": "visible liquid bridge between mouths, thick white fluid transfer, saliva trail, messy chin"
},
"participants": {
"solo_focus": "false",
"orientation": "FF"
},
"lora": {
"lora_name": "Illustrious/Poses/Cum_Swap.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Cum_Swap",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cum swap",
"mouth to mouth",
"kissing",
"open mouth",
"liquid bridge",
"saliva",
"semen",
"duo",
"sharing fluids",
"intimacy"
]
}

View File

@@ -0,0 +1,34 @@
{
"action_id": "cumblastfacial",
"action_name": "Cumblastfacial",
"action": {
"full_body": "solo, bukkake",
"head": "facial, head_tilt, looking_up",
"eyes": "cum_in_eye",
"arms": "arms_down",
"hands": "hands_down",
"torso": "cum_on_upper_body",
"pelvis": "standing",
"legs": "standing",
"feet": "standing",
"additional": "projectile_cum, excessive_cum, ejaculation"
},
"lora": {
"lora_name": "Illustrious/Poses/cumblastfacial.safetensors",
"lora_weight": 1.0,
"lora_triggers": "xcbfacialx",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"facial",
"projectile_cum",
"bukkake",
"excessive_cum",
"ejaculation",
"head_tilt",
"looking_up",
"cum_in_eye",
"cum_on_hair"
]
}

View File

@@ -0,0 +1,33 @@
{
"action_id": "cuminhands",
"action_name": "Cuminhands",
"action": {
"full_body": "after_fellatio",
"head": "facial, cum_string, cum_in_mouth",
"eyes": "looking_at_hands",
"arms": "arms_bent",
"hands": "cupping_hands, cum_on_hands",
"torso": "upper_body",
"pelvis": "n/a",
"legs": "n/a",
"feet": "n/a",
"additional": "excessive_cum"
},
"lora": {
"lora_name": "Illustrious/Poses/cuminhands.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cum on hands, cupping hands, excessive cum, cum on face, cum in mouth, cum string",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cum_on_hands",
"cupping_hands",
"excessive_cum",
"facial",
"cum_in_mouth",
"cum_string",
"after_fellatio",
"looking_at_hands"
]
}

36
data/actions/cumshot.json Normal file
View File

@@ -0,0 +1,36 @@
{
"action_id": "cumshot",
"action_name": "Cumshot",
"action": {
"full_body": "close-up portrait shot, high angle view",
"head": "head tilted back, mouth slightly open, tongue out, face covered in white fluid",
"eyes": "eyes closed or rolling back, expression of pleasure, wet eyelashes",
"arms": "out of frame",
"hands": "out of frame",
"torso": "upper chest and collarbone visible",
"pelvis": "kout of frame",
"legs": "out of frame",
"feet": "out of frame",
"additional": "seminal fluid dripping from face, splashing liquid, thick texture, messy"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/cumshot.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cumshot",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cum",
"cum on face",
"facial",
"messy",
"tongue out",
"seminal fluid",
"detailed liquid"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "cumtube_000035",
"action_name": "Cumtube 000035",
"action": {
"full_body": "kneeling or sitting, leaning back slightly to receive contents of tube",
"head": "force feeeding, feeding tube,tilted back, face directed upwards, mouth wide open, tongue extended, chaotic facial mess",
"eyes": "looking up, anticipating expression, half-closed or rolled back",
"arms": "raised, holding a large clear cylinder",
"hands": "firmly grasping the sides of the tube",
"torso": "chest pushed forward, liquid dripping down neck and chest",
"pelvis": "kneeling, hips resting on heels",
"legs": "legs folded underneath, knees apart",
"feet": "toes pointed backward",
"additional": "clear tube filled with white viscous liquid, heavy splatter, overflowing liquid, messy environment, bubbles inside tube"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/cumtube-000035.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cumtube-000035",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cumtube",
"viscous liquid",
"excessive liquid",
"facial mess",
"pouring",
"drinking",
"holding object",
"open mouth",
"wet skin"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "cunnilingus_on_back_illustriousxl_lora_nochekaiser",
"action_name": "Cunnilingus On Back Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "lying, on_back, spread_legs, nude",
"head": "torogao, blush, sweat",
"eyes": "half-closed_eyes",
"arms": "bent_arms",
"hands": "hands_on_own_chest",
"torso": "navel, nipples, sweat",
"pelvis": "cunnilingus, pussy",
"legs": "spread_legs, thighs",
"feet": "",
"additional": "on_bed, pillow, from_side"
},
"lora": {
"lora_name": "Illustrious/Poses/cunnilingus-on-back-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cunnilingus on back",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cunnilingus",
"lying",
"on_back",
"spread_legs",
"hands_on_own_chest",
"torogao",
"half-closed_eyes",
"sweat",
"blush",
"navel",
"nipples",
"hetero",
"on_bed",
"from_side"
]
}

View File

@@ -0,0 +1,33 @@
{
"action_id": "danglinglegs",
"action_name": "Danglinglegs",
"action": {
"full_body": "suspended_congress, lifting_person, standing_sex",
"head": "clenched_teeth, head_back",
"eyes": "eyes_closed",
"arms": "arms_around_neck",
"hands": "hands_on_shoulders",
"torso": "body_lifted",
"pelvis": "hips_held",
"legs": "legs_apart, feet_off_ground",
"feet": "toes_up, barefoot",
"additional": "size_difference, larger_male, sex_from_behind"
},
"lora": {
"lora_name": "Illustrious/Poses/danglinglegs.safetensors",
"lora_weight": 1.0,
"lora_triggers": "dangling legs, lifted by penis, suspended on penis",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"suspended_congress",
"lifting_person",
"standing_sex",
"sex_from_behind",
"size_difference",
"toes_up",
"barefoot",
"clenched_teeth"
]
}

View File

@@ -0,0 +1,43 @@
{
"action_id": "deep_kiss_000007",
"action_name": "Deep Kiss 000007",
"action": {
"full_body": "intimate couple pose, two characters kissing passionately, bodies pressed tightly together in an embrace",
"head": "heads tilted, lips locked, mouths open, french kiss, tongue touching, cheeks flushed",
"eyes": "eyes tightly closed, passionate expression",
"arms": "arms wrapped around neck, arms holding waist, engulfing embrace",
"hands": "cupping face, fingers running through hair, gripping shoulders or back",
"torso": "chest to chest contact, breasts pressed against chest",
"pelvis": "hips pressed together, zero distance",
"legs": "standing close, interlocked or one leg lifted behind",
"feet": "standing, on tiptoes",
"additional": "saliva trail, saliva string, connecting tongue, romantic atmosphere"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Deep_Kiss-000007.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Deep_Kiss-000007",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"deep kiss",
"french kiss",
"kissing",
"tongue",
"saliva",
"saliva trail",
"open mouth",
"couple",
"intimate",
"romance",
"love",
"passionate",
"eyes closed",
"duo"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "deepthroat_ponytailhandle_anime_il_v1",
"action_name": "Deepthroat Ponytailhandle Anime Il V1",
"action": {
"full_body": "irrumatio, fellatio, 1boy, 1girl, duo",
"head": "forced_oral, head_back, mouth_open, saliva, drooling",
"eyes": "crying, tears, glare, wide_eyes",
"arms": "arms_at_sides",
"hands": "hands_down",
"torso": "upper_body",
"pelvis": "n/a",
"legs": "n/a",
"feet": "n/a",
"additional": "grabbing_another's_hair, penis, deepthroat, ponytail"
},
"lora": {
"lora_name": "Illustrious/Poses/Deepthroat_PonytailHandle_Anime_IL_V1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "deepthroat_ponytailhandle, grabbing another's hair, ponytail",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"irrumatio",
"deepthroat",
"fellatio",
"grabbing_another's_hair",
"ponytail",
"drooling",
"tears",
"crying",
"penis",
"forced"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "defeat_ntr_il_nai_py",
"action_name": "Defeat Ntr Il Nai Py",
"action": {
"full_body": "kneeling on the ground, slumped forward in defeat, on hands and knees, orz pose, sex from behind",
"head": "bowed head, looking down, face shadowed or hiding face",
"eyes": "crying, tears, empty eyes, or eyes squeezed shut in anguish",
"arms": "arms straight down supporting weight against the floor",
"hands": "hands flat on the ground, palms down, or clenched fists on ground",
"torso": "hunched back, crushed posture, leaning forward",
"pelvis": "hips raised slightly or sitting back on heels in submission",
"legs": "knees on ground, kneeling",
"feet": "tops of feet flat on floor",
"additional": "gloom, depression, dramatic shadows, humiliation, emotional devastation"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Defeat NTR-IL_NAI_PY.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Defeat NTR-IL_NAI_PY",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"defeat",
"on hands and knees",
"all fours",
"despair",
"crying",
"orz",
"humiliation",
"kneeling",
"looking down",
"tears"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "defeat_suspension_il_nai_py",
"action_name": "Defeat Suspension Il Nai Py",
"action": {
"full_body": "suspended sex, holding waist, dangling legs, full body suspended in air, hanging limp, defeated posture, complete lack of resistance",
"head": "head hanging low, chin resting on chest, looking down, neck relaxed",
"eyes": "eyes closed, unconscious, pained expression, or empty gaze",
"arms": "arms stretched vertically upwards, arms above head, shoulders pulled up by weight",
"hands": "wrists bound together, hands tied overhead, handcuffs, shackles",
"torso": "torso elongated by gravity, ribcage visible, stomach stretched",
"pelvis": "hips sagging downwards, dead weight",
"legs": "legs dangling freely, limp legs, knees slightly bent or hanging straight",
"feet": "feet pointing downwards, hovering off the ground, toes dragging",
"additional": "ropes, chains, metal hooks, dungeon background, exhaustion"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Defeat suspension-IL_NAI_PY.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Defeat suspension-IL_NAI_PY",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"suspension",
"hanging",
"bound",
"arms_up",
"limp",
"unconscious",
"dangling",
"bdsm",
"bondage"
]
}

View File

@@ -0,0 +1,41 @@
{
"action_id": "defeatspitroast_illustrious",
"action_name": "Defeatspitroast Illustrious",
"action": {
"full_body": "oral sex, vaginal, threesome, double penetration, suspended sex, dangling legs",
"head": "tilted back or looking aside, mouth wide open, tongue sticking out, exhausted expression",
"eyes": "rolled back, half-closed, ahegao",
"arms": "bent at elbows, supporting upper body weight",
"hands": "gripping the ground or sheets, clenching",
"torso": "sweaty, deeply arched spine",
"pelvis": "ass up, presenting rear",
"legs": "kneeling, thighs spread wide",
"feet": "toes curled",
"additional": "messy hair, trembling, heavy breathing, defeated posture"
},
"participants": {
"solo_focus": "true",
"orientation": "MMF"
},
"lora": {
"lora_name": "Illustrious/Poses/Defeatspitroast_Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Defeatspitroast_Illustrious",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"doggystyle",
"spitroast",
"double_penetration",
"all_fours",
"ass_up",
"open_mouth",
"tongue_out",
"ahegao",
"sweat",
"looking_back",
"",
"1girl"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "disinterested_sex___bored_female",
"action_name": "Disinterested Sex Bored Female",
"action": {
"full_body": "female lying on back, legs spread, passive body language, completely disengaged from implicit activity",
"head": "turned slightly or facing forward but focused on phone, resting on pillow",
"eyes": "looking at smartphone, dull gaze, half-closed, unenthusiastic",
"arms": "holding smartphone above face with one or both hands, elbows resting on surface",
"hands": "holding phone, scrolling on screen",
"torso": "lying flat, relaxed, exposed",
"pelvis": "hips passive, legs open",
"legs": "spread wide, knees bent, relaxed",
"feet": "loose, resting on bed",
"additional": "holding smartphone, checking phone, indifference, ignoring, nonchalant attitude"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Disinterested_Sex___Bored_Female.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Disinterested_Sex___Bored_Female",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bored",
"disinterested",
"looking at phone",
"smartphone",
"lying",
"spread legs",
"passive",
"indifferent",
"expressionless"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "display_case_bdsm_illus",
"action_name": "Display Case Bdsm Illus",
"action": {
"full_body": "trapped inside a rectangular glass display case, standing or kneeling limitation, whole body confined",
"head": "looking out through the glass, potentially gagged or expressionless",
"eyes": "open, staring at the viewer through reflections",
"arms": "restricted movement, potentially bound behind back or pressed against glass",
"hands": "palms pressed against the transparent wall or tied",
"torso": "upright relative to the container, visible behind glass",
"pelvis": "hips aligned with the standing or kneeling posture",
"legs": "straight or folded to fit inside the box",
"feet": "resting on the bottom platform of the case",
"additional": "glass reflections, airtight container aesthetic, museum or auction setting, objectification"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/display_case_bdsm_illus.safetensors",
"lora_weight": 1.0,
"lora_triggers": "display_case_bdsm_illus",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"glass box",
"confinement",
"exhibitionism",
"trapped",
"through glass",
"human exhibit"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "display_case_illustr",
"action_name": "Display Case Illustr",
"action": {
"full_body": "standing stiffly like an action figure, encased inside a rectangular transparent box",
"head": "neutral expression, facing forward, slightly doll-like",
"eyes": "fixed gaze, looking at viewer",
"arms": "resting at sides or slightly bent in a static pose",
"hands": "open palms or loosely curled, possibly pressing against the front glass",
"torso": "facing front, rigid posture",
"pelvis": "aligned with torso",
"legs": "standing straight, feet positioned securely on the box base",
"feet": "flat on the floor of the case",
"additional": "transparent plastic packaging, cardboard backing with product design, barcode, reflections on glass, sealed box"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/display_case_illustr.safetensors",
"lora_weight": 1.0,
"lora_triggers": "display_case_illustr",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"display case",
"action figure",
"packaging",
"in box",
"plastic box",
"collectible",
"sealed",
"toy",
"transparent"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "doggydoublefingering",
"action_name": "Doggydoublefingering",
"action": {
"full_body": "Three females arranged side-by-side in a row, all facing away from viewer or towards viewer depending on angle, engaged in group sexual activity",
"head": "various expressions, blushing, sweating, looking back or down",
"eyes": "open or closed in pleasure",
"arms": "varied, gripping sheets or supporting body",
"hands": "resting on surface or gripping",
"torso": "leaning forward, breasts visible if from front",
"pelvis": "hips raised, bent over",
"legs": "kneeling on all fours",
"feet": "resting on bed or ground",
"additional": "center female receiving vaginal penetration from behind (doggystyle), two distinct side females being fingered simultaneously, male figure or disembodied hands performing the fingering"
},
"lora": {
"lora_name": "Illustrious/Poses/DoggyDoubleFingering.safetensors",
"lora_weight": 1.0,
"lora_triggers": "doggydoublefingerfront, from front, 3girls, multiple girls, fingering, sex from behind, doggystyle",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"3girls",
"group_sex",
"doggystyle",
"fingering",
"all_fours",
"sex_from_behind",
"vaginal",
"hetero",
"harem",
"male_fingering"
]
}

View File

@@ -0,0 +1,38 @@
{
"action_id": "dunking_face_in_a_bowl_of_cum_r1",
"action_name": "Dunking Face In A Bowl Of Cum R1",
"action": {
"full_body": "leaning_forward, head_down, drowning",
"head": "face_down, air_bubble, crying, tears, embarrassed, disgust",
"eyes": "closed_eyes, tears",
"arms": "clutching_head, arms_up",
"hands": "clutching_head",
"torso": "leaning_forward",
"pelvis": "leaning_forward",
"legs": "standing",
"feet": "standing",
"additional": "bowl, cum"
},
"lora": {
"lora_name": "Illustrious/Poses/Dunking_face_in_a_bowl_of_cum_r1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "face in cum bowl, cum in bowl, cum bubble, excessive cum",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"1girl",
"solo",
"leaning_forward",
"head_down",
"clutching_head",
"drowning",
"air_bubble",
"crying",
"tears",
"embarrassed",
"disgust",
"bowl",
"cum"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "ekiben_ill_10",
"action_name": "Ekiben Ill 10",
"action": {
"full_body": "duo, 1boy, 1girl, standing, male lifting female, carrying, sexual position",
"head": "looking at another, head back or looking down",
"eyes": "eye contact or eyes closed",
"arms": "arms supporting legs, arms around neck",
"hands": "holding legs, grabbing thighs, gripping",
"torso": "chest to chest, upright",
"pelvis": "connected, groins touching",
"legs": "spread legs, legs up, legs around waist, m-legs, bent knees",
"feet": "dangling feet, plantar flexion",
"additional": "strength, suspension, height difference"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/ekiben_ill-10.safetensors",
"lora_weight": 1.0,
"lora_triggers": "ekiben_ill-10",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"ekiben",
"lifting",
"carrying",
"standing",
"spread legs",
"holding legs",
"duo",
"sex"
]
}

View File

@@ -0,0 +1,34 @@
{
"action_id": "elbow_squeeze__concept_lora_000008",
"action_name": "Elbow Squeeze Concept Lora 000008",
"action": {
"full_body": "Character standing with upper arms pressed tightly against the torso, emphasizing the chest area through the pressure of the elbows.",
"head": "Facing forward, slightly tucked chin or tilted, expression often shy or teasing.",
"eyes": "Looking directly at viewer.",
"arms": "Upper arms squeezing inward against the sides of the ribs/chest, elbows tucked tight to the body.",
"hands": "Forearms angled out or hands clasped near the navel/chest area.",
"torso": "Chest pushed upward or compressed slightly by the lateral pressure of the arms.",
"pelvis": "Neutral stance.",
"legs": "Standing straight or slightly knock-kneed for a shy effect.",
"feet": "Planted firmly.",
"additional": "Clothing often pulled tight across the chest due to the arm position."
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Elbow_Squeeze__Concept_Lora-000008.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Elbow_Squeeze__Concept_Lora-000008",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"elbow squeeze",
"arms at sides",
"upper body",
"squeezing",
"tight clothes"
]
}

View File

@@ -0,0 +1,36 @@
{
"action_id": "extreme_sex_v1_0_illustriousxl",
"action_name": "Extreme Sex V1 0 Illustriousxl",
"action": {
"full_body": "sitting, engaging in sexual activity, intense body language",
"head": "tilted back, expression of ecstasy",
"eyes": "rolling_eyes, loss of focus, cross-eyed (ahegao)",
"arms": "clinging or holding partner",
"hands": "grasping details",
"torso": "heaving, covered in sweat",
"pelvis": "engaged in action",
"legs": "wrapped around or spread",
"feet": "toes curled",
"additional": "drooling, saliva_trail, flushing, messy_hair"
},
"lora": {
"lora_name": "Illustrious/Poses/extreme-sex-v1.0-illustriousxl.safetensors",
"lora_weight": 1.0,
"lora_triggers": "extreme sex",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"rolling_eyes",
"ahegao",
"drooling",
"sweat",
"open_mouth",
"tongue_out",
"messy_hair",
"heavy_breathing",
"blush",
"mind_break",
"sex"
]
}

View File

@@ -0,0 +1,35 @@
{
"action_id": "face_grab_illustrious",
"action_name": "Face Grab Illustrious",
"action": {
"full_body": "POV close-up of a character having their face grabbed by the viewer",
"head": "forced expression, open mouth, tongue out, pout, grabbing cheeks or chin",
"eyes": "looking at viewer, crying, streaming tears",
"arms": "often not visible or passive",
"hands": "pov hands, hand grabbing face",
"torso": "upper body, often nude or partially visible",
"pelvis": "usually out of frame",
"legs": "out of frame",
"feet": "out of frame",
"additional": "context often after fellatio with fluids on face or tongue"
},
"lora": {
"lora_name": "Illustrious/Poses/face_grab_illustrious.safetensors",
"lora_weight": 0.5,
"lora_triggers": "fcgrb, face grab, grabbing another's face, pov, pov hand, open mouth, tongue out",
"lora_weight_min": 0.5,
"lora_weight_max": 0.5
},
"tags": [
"grabbing_another's_face",
"pov",
"pov_hands",
"after_fellatio",
"cum_on_tongue",
"open_mouth",
"tongue_out",
"pout",
"streaming_tears",
"cheek_pinching"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "facesit_08",
"action_name": "Facesit 08",
"action": {
"full_body": "sitting_on_face, cunnilingus, oral",
"head": "looking_at_viewer, looking_down",
"eyes": "looking_at_viewer",
"arms": "head_grab",
"hands": "on_head",
"torso": "nude, close-up",
"pelvis": "panties_aside, clitoris, pussy_juice",
"legs": "spread_legs",
"feet": "out_of_frame",
"additional": "yuri, female_pov, 2girls"
},
"lora": {
"lora_name": "Illustrious/Poses/facesit-08.safetensors",
"lora_weight": 0.8,
"lora_triggers": "2girls, female pov, close-up, looking at viewer, sitting on face, oral, cunnilingus, spread legs, pussy juice, clitoris",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"2girls",
"female_pov",
"close-up",
"looking_at_viewer",
"sitting_on_face",
"oral",
"cunnilingus",
"spread_legs",
"pussy_juice",
"clitoris",
"yuri",
"panties_aside",
"head_grab",
"looking_down"
]
}

View File

@@ -0,0 +1,39 @@
{
"action_id": "facial_bukkake",
"action_name": "Facial Bukkake",
"action": {
"full_body": "close-up portrait shot, focus primarily on the face and neck area",
"head": "tilted slightly backward, mouth open or tongue out, face heavily covered in white liquid",
"eyes": "closed or looking upward, eyelashes wet/clumped",
"arms": "out of frame or hands interacting with face/hair",
"hands": "holding hair back or wiping cheek",
"torso": "upper chest or shoulders visible, possibly stained",
"pelvis": "not visible",
"legs": "not visible",
"feet": "not visible",
"additional": "streaming white liquid, dripping, messy, wet skin texture, high viscosity"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/facial_bukkake.safetensors",
"lora_weight": 1.0,
"lora_triggers": "facial_bukkake",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bukkake",
"facial",
"cum on face",
"semen",
"messy",
"white liquid",
"cum in eyes",
"cum in mouth",
"splatter",
"after sex"
]
}

View File

@@ -0,0 +1,37 @@
{
"action_id": "fellatio_from_below_illustriousxl_lora_nochekaiser",
"action_name": "Fellatio From Below Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "squatting, fellatio, from_below",
"head": "facing_viewer, open_mouth",
"eyes": "looking_down",
"arms": "arms_visible",
"hands": "hands_visible",
"torso": "nude, navel, nipples",
"pelvis": "nude, pussy, spread_legs",
"legs": "squatting, bent_legs",
"feet": "feet_visible",
"additional": "penis, testicles, oral, sweat, cum"
},
"lora": {
"lora_name": "Illustrious/Poses/fellatio-from-below-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "fellatio from below, fellatio, from below, squatting, hetero, penis, testicles, completely nude, oral",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"fellatio",
"from_below",
"squatting",
"penis",
"testicles",
"completely_nude",
"hetero",
"oral",
"navel",
"nipples",
"sweat",
"pussy"
]
}

Some files were not shown because too many files have changed in this diff Show More