22 Commits

Author SHA1 Message Date
Aodhan Collins
29a6723b25 Code review fixes: wardrobe migration, response validation, path traversal guard, deduplication
- Migrate 11 character JSONs from old wardrobe keys to _BODY_GROUP_KEYS format
- Add is_favourite/is_nsfw columns to Preset model
- Add HTTP response validation and timeouts to ComfyUI client
- Add path traversal protection on replace cover route
- Deduplicate services/mcp.py (4 functions → 2 generic + 2 wrappers)
- Extract apply_library_filters() and clean_html_text() shared helpers
- Add named constants for 17 ComfyUI workflow node IDs
- Fix bare except clauses in services/llm.py
- Fix tags schema in ensure_default_outfit() (list → dict)
- Convert f-string logging to lazy % formatting
- Add 5-minute polling timeout to frontend waitForJob()
- Improve migration error handling (non-duplicate errors log at WARNING)
- Update CLAUDE.md to reflect all changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 00:31:27 +00:00
Aodhan Collins
55ff58aba6 Major refactor: deduplicate routes, sync, JS, and fix bugs
- Extract 8 common route patterns into factory functions in routes/shared.py
  (favourite, upload, replace cover, save defaults, clone, save JSON,
  get missing, clear covers) — removes ~1,100 lines across 9 route files
- Extract generic _sync_category() in sync.py — 7 sync functions become
  one-liner wrappers, removing ~350 lines
- Extract shared detail page JS into static/js/detail-common.js — all 9
  detail templates now call initDetailPage() with minimal config
- Extract layout inline JS into static/js/layout-utils.js (~185 lines)
- Extract library toolbar JS into static/js/library-toolbar.js
- Fix finalize missing-image bug: raise RuntimeError instead of logging
  warning so job is marked failed
- Fix missing scheduler default in _default_checkpoint_data()
- Fix N+1 query in Character.get_available_outfits() with batch IN query
- Convert all print() to logger across services and routes
- Add missing tags display to styles, scenes, detailers, checkpoints detail
- Update delete buttons to use trash.png icon with solid red background
- Update CLAUDE.md to reflect new architecture

Net reduction: ~1,600 lines

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 23:06:58 +00:00
Aodhan Collins
ed9a7b4b11 Updated JSON fields. 2026-03-21 18:21:00 +00:00
Aodhan Collins
32a73b02f5 Add semantic tagging, search, favourite/NSFW filtering, and LLM job queue
Replaces old list-format tags (which duplicated prompt content) with structured
dict tags per category (origin_series, outfit_type, participants, style_type,
scene_type, etc.). Tags are now purely organizational metadata — removed from
the prompt pipeline entirely.

Adds is_favourite and is_nsfw columns to all 8 resource models. Favourite is
DB-only (user preference); NSFW is mirrored in JSON tags for rescan persistence.
All library pages get filter controls and favourites-first sorting.

Introduces a parallel LLM job queue (_enqueue_task + _llm_queue_worker) for
background tag regeneration, with the same status polling UI as ComfyUI jobs.
Fixes call_llm() to use has_request_context() fallback for background threads.

Adds global search (/search) across resources and gallery images, with navbar
search bar. Adds gallery image sidecar JSON for per-image favourite/NSFW metadata.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 03:22:09 +00:00
Aodhan Collins
7d79e626a5 Add REST API for preset-based generation and fallback cover images
REST API (routes/api.py): Three endpoints behind API key auth for
programmatic image generation via presets — list presets, queue
generation with optional overrides, and poll job status.

Shared generation logic extracted from routes/presets.py into
services/generation.py so both web UI and API use the same code path.

Fallback covers: library index pages now show a random generated image
at reduced opacity when no cover is assigned, instead of "No Image".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:19:12 +00:00
Aodhan Collins
d756ea1d0e Updated generation pages. 2026-03-15 17:45:17 +00:00
Aodhan Collins
79bbf669e2 Updated json schema 2026-03-15 17:44:43 +00:00
Aodhan Collins
5e4348ebc1 Add extra prompts, endless generation, random character default, and small fixes
- Add extra positive/negative prompt textareas to all 9 detail pages with session persistence
- Add Endless generation button to all detail pages (continuous preview generation until stopped)
- Default character selector to "Random Character" on all secondary detail pages
- Fix queue clear endpoint (remove spurious auth check)
- Refactor app.py into routes/ and services/ modules
- Update CLAUDE.md with new architecture documentation
- Various data file updates and cleanup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 02:07:16 +00:00
Aodhan Collins
1b8a798c31 Add graceful fallback for MCP import in test script
- Add try/except block for MCP package import
- Provide helpful error message when MCP is not installed
- Exit gracefully with status code 1 on import failure

Addresses code review feedback.
2026-03-07 21:13:32 +00:00
Aodhan Collins
d95b81dde5 Multiple bug fixes. 2026-03-06 19:28:50 +00:00
Aodhan Collins
ec08eb5d31 Add Preset Library feature
Presets are saved generation recipes that combine all resource types
(character, outfit, action, style, scene, detailer, look, checkpoint)
with per-field on/off/random toggles. At generation time, entities
marked "random" are picked from the DB and fields marked "random" are
randomly included or excluded.

- Preset model + sync_presets() following existing category pattern
- _resolve_preset_entity() / _resolve_preset_fields() helpers
- Full route set: index, detail, generate, edit, upload, clone, save_json, create (LLM), rescan
- 4 templates: index (gallery), detail (summary + generate), edit (3-way toggle UI), create (LLM form)
- example_01.json reference preset + preset_system.txt LLM prompt
- Presets nav link in layout.html

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 23:49:24 +00:00
Aodhan Collins
2c1c3a7ed7 Merge branch 'presets'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 23:09:00 +00:00
Aodhan Collins
ee36caccd6 Sort all batch generation queues by JSON filename
All get_missing_* routes and generate_missing routes now order results
by filename (alphabetical) instead of display name or undefined order.
Checkpoint uses checkpoint_path as the equivalent sort key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 23:08:37 +00:00
Aodhan Collins
e226548471 Merge branch 'logging'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 23:02:41 +00:00
Aodhan Collins
b9196ef5f5 Add structured logging for job queue and workflow prompts
Replace bare print() calls with Python logging module. Job lifecycle
(enqueue, start, ComfyUI acceptance, completion, failure) now emits
timestamped INFO logs to stdout, captured by Docker. Failures use
logger.exception() for full tracebacks. Workflow prompt block logs as
a single INFO entry; LoRA chain details moved to DEBUG level.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 22:55:53 +00:00
Aodhan Collins
a38915b354 Refactor UI, settings, and code quality across all categories
- Fix Replace Cover: routes now read preview_path from form POST instead of session (session writes from background threads were lost)
- Fix batch generation: submit all jobs immediately, poll all in parallel via Promise.all
- Fix label NameError in character generate route
- Fix style detail missing characters context
- Selected Preview pane: click any image to select it; data-preview-path on all images across all 8 detail templates
- Gallery → Library rename across all index page headings and navbar
- Settings: add configurable LoRA/checkpoint directories; default checkpoint selector moved from navbar to settings page
- Consolidate 6 get_available_*_loras() into single get_available_loras(category) reading from Settings
- ComfyUI tooltip shows currently loaded checkpoint name
- Remove navbar checkpoint bar
- Phase 4 cleanup: remove dead _queue_generation(), add session.modified, standardize log prefixes, rename action_type → action

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 22:48:28 +00:00
Aodhan Collins
da55b0889b Add Docker support and refactor prompt/queue internals
- Add Dockerfile, docker-compose.yml, .dockerignore for containerised deployment
- Extract _resolve_character(), _ensure_character_fields(), _append_background() helpers to eliminate repeated inline character-field injection and background-tag patterns across all secondary-category generate routes
- Add _IDENTITY_KEYS / _WARDROBE_KEYS constants
- Fix build_extras_prompt() bug: detailer prompt (a list) was being appended as a single item instead of extended
- Replace all per-route _finalize closures with _make_finalize() factory, reducing duplication across 10 generate routes
- Add _prune_job_history() called each worker loop iteration to prevent unbounded memory growth
- Remove 10 orphaned legacy finalize_generation HTTP routes and check_status route (superseded by job queue API since job-queue branch)
- Remove one-time migration scripts (migrate_actions, migrate_detailers, migrate_lora_weight_range, migrate_wardrobe)
- Update CLAUDE.md and README.md to document new helpers, queue architecture, and Docker deployment

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 16:46:36 +00:00
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
1292 changed files with 44125 additions and 16620 deletions

8
.dockerignore Normal file
View File

@@ -0,0 +1,8 @@
venv/
__pycache__/
*.pyc
instance/
flask_session/
static/uploads/
tools/
.git/

3
.gitignore vendored
View File

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

219
API_GUIDE.md Normal file
View File

@@ -0,0 +1,219 @@
# GAZE REST API Guide
## Setup
1. Open **Settings** in the GAZE web UI
2. Scroll to **REST API Key** and click **Regenerate**
3. Copy the key — you'll need it for all API requests
## Authentication
Every request must include your API key via one of:
- **Header (recommended):** `X-API-Key: <your-key>`
- **Query parameter:** `?api_key=<your-key>`
Responses for auth failures:
| Status | Meaning |
|--------|---------|
| `401` | Missing API key |
| `403` | Invalid API key |
## Endpoints
### List Presets
```
GET /api/v1/presets
```
Returns all available presets.
**Response:**
```json
{
"presets": [
{
"preset_id": "example_01",
"slug": "example_01",
"name": "Example Preset",
"has_cover": true
}
]
}
```
### Generate Image
```
POST /api/v1/generate/<preset_slug>
```
Queue one or more image generations using a preset's configuration. All body parameters are optional — when omitted, the preset's own settings are used.
**Request body (JSON):**
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `count` | int | `1` | Number of images to generate (120) |
| `checkpoint` | string | — | Override checkpoint path (e.g. `"Illustrious/model.safetensors"`) |
| `extra_positive` | string | `""` | Additional positive prompt tags appended to the generated prompt |
| `extra_negative` | string | `""` | Additional negative prompt tags |
| `seed` | int | random | Fixed seed for reproducible generation |
| `width` | int | — | Output width in pixels (must provide both width and height) |
| `height` | int | — | Output height in pixels (must provide both width and height) |
**Response (202):**
```json
{
"jobs": [
{ "job_id": "783f0268-ba85-4426-8ca2-6393c844c887", "status": "queued" }
]
}
```
**Errors:**
| Status | Cause |
|--------|-------|
| `400` | Invalid parameters (bad count, seed, or mismatched width/height) |
| `404` | Preset slug not found |
| `500` | Internal generation error |
### Check Job Status
```
GET /api/v1/job/<job_id>
```
Poll this endpoint to track generation progress.
**Response:**
```json
{
"id": "783f0268-ba85-4426-8ca2-6393c844c887",
"label": "Preset: Example Preset preview",
"status": "done",
"error": null,
"result": {
"image_url": "/static/uploads/presets/example_01/gen_1773601346.png",
"relative_path": "presets/example_01/gen_1773601346.png",
"seed": 927640517599332
}
}
```
**Job statuses:**
| Status | Meaning |
|--------|---------|
| `pending` | Waiting in queue |
| `processing` | Currently generating |
| `done` | Complete — `result` contains image info |
| `failed` | Error occurred — check `error` field |
The `result` object is only present when status is `done`. Use `seed` from the result to reproduce the exact same image later.
**Retrieving the image:** The `image_url` is a path relative to the server root. Fetch it directly:
```
GET http://<host>:5782/static/uploads/presets/example_01/gen_1773601346.png
```
Image retrieval does not require authentication.
## Examples
### Generate a single image and wait for it
```bash
API_KEY="your-key-here"
HOST="http://localhost:5782"
# Queue generation
JOB_ID=$(curl -s -X POST \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{}' \
"$HOST/api/v1/generate/example_01" | python3 -c "import sys,json; print(json.load(sys.stdin)['jobs'][0]['job_id'])")
echo "Job: $JOB_ID"
# Poll until done
while true; do
RESULT=$(curl -s -H "X-API-Key: $API_KEY" "$HOST/api/v1/job/$JOB_ID")
STATUS=$(echo "$RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])")
echo "Status: $STATUS"
if [ "$STATUS" = "done" ] || [ "$STATUS" = "failed" ]; then
echo "$RESULT" | python3 -m json.tool
break
fi
sleep 5
done
```
### Generate 3 images with extra prompts
```bash
curl -X POST \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"count": 3,
"extra_positive": "smiling, outdoors",
"extra_negative": "blurry"
}' \
"$HOST/api/v1/generate/example_01"
```
### Reproduce a specific image
```bash
curl -X POST \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"seed": 927640517599332}' \
"$HOST/api/v1/generate/example_01"
```
### Python example
```python
import requests
import time
HOST = "http://localhost:5782"
API_KEY = "your-key-here"
HEADERS = {"X-API-Key": API_KEY, "Content-Type": "application/json"}
# List presets
presets = requests.get(f"{HOST}/api/v1/presets", headers=HEADERS).json()
print(f"Available presets: {[p['name'] for p in presets['presets']]}")
# Generate
resp = requests.post(
f"{HOST}/api/v1/generate/{presets['presets'][0]['slug']}",
headers=HEADERS,
json={"count": 1},
).json()
job_id = resp["jobs"][0]["job_id"]
print(f"Queued job: {job_id}")
# Poll
while True:
status = requests.get(f"{HOST}/api/v1/job/{job_id}", headers=HEADERS).json()
print(f"Status: {status['status']}")
if status["status"] in ("done", "failed"):
break
time.sleep(5)
if status["status"] == "done":
image_url = f"{HOST}{status['result']['image_url']}"
print(f"Image: {image_url}")
print(f"Seed: {status['result']['seed']}")
```

620
CLAUDE.md Normal file
View File

@@ -0,0 +1,620 @@
# 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
### File Structure
```
app.py # ~186 lines: Flask init, config, logging, route registration, startup/migrations
models.py # SQLAlchemy models only
comfy_workflow.json # ComfyUI workflow template with placeholder strings
utils.py # Pure constants + helpers (no Flask/DB deps)
services/
__init__.py
comfyui.py # ComfyUI HTTP client (queue_prompt, get_history, get_image)
workflow.py # Workflow building (_prepare_workflow, _apply_checkpoint_settings)
prompts.py # Prompt building + dedup (build_prompt, build_extras_prompt)
llm.py # LLM integration + MCP tool calls (call_llm, load_prompt)
mcp.py # MCP/Docker server lifecycle (ensure_mcp_server_running)
sync.py # Generic _sync_category() + sync_characters/sync_checkpoints + preset resolution helpers
job_queue.py # Background job queue (_enqueue_job, _make_finalize, worker thread)
file_io.py # LoRA/checkpoint scanning, file helpers
generation.py # Shared generation logic (generate_from_preset)
routes/
__init__.py # register_routes(app) — imports and calls all route modules
shared.py # Factory functions for common routes + apply_library_filters() helper
characters.py # Character CRUD + generation + outfit management
outfits.py # Outfit routes
actions.py # Action routes
styles.py # Style routes
scenes.py # Scene routes
detailers.py # Detailer routes
checkpoints.py # Checkpoint routes
looks.py # Look routes
presets.py # Preset routes
generator.py # Generator mix-and-match page
gallery.py # Gallery browsing + image/resource deletion
settings.py # Settings page + status APIs + context processors
strengths.py # Strengths gallery system
transfer.py # Resource transfer system
queue_api.py # /api/queue/* endpoints
api.py # REST API v1 (preset generation, auth)
regenerate.py # Tag regeneration (single + bulk, via LLM queue)
search.py # Global search across resources and gallery images
static/js/
detail-common.js # Shared detail page JS (initDetailPage: preview, generation, batch, endless, JSON editor)
layout-utils.js # Extracted from layout.html (confirmResourceDelete, regenerateTags, initJsonEditor)
library-toolbar.js # Library page toolbar (batch generate, clear covers, missing items)
```
### Dependency Graph
```
app.py
├── models.py (unchanged)
├── utils.py (no deps except stdlib)
├── services/
│ ├── comfyui.py ← utils (for config)
│ ├── prompts.py ← utils, models
│ ├── workflow.py ← prompts, utils, models
│ ├── llm.py ← mcp (for tool calls)
│ ├── mcp.py ← (stdlib only: subprocess, os)
│ ├── sync.py ← models, utils
│ ├── job_queue.py ← comfyui, models
│ ├── file_io.py ← models, utils
│ └── generation.py ← prompts, workflow, job_queue, sync, models
└── routes/
├── shared.py ← models, utils, services (lazy-init to avoid circular imports)
├── All route modules ← services/*, utils, models, shared
└── (routes never import from other routes except shared.py)
```
**No circular imports**: routes → services → utils/models. Services never import routes. Utils never imports services. `routes/shared.py` uses `_init_models()` lazy initialization to avoid circular imports with model classes.
### Route Registration Pattern
Routes use a `register_routes(app)` closure pattern — each route module defines a function that receives the Flask `app` object and registers routes via `@app.route()` closures. This preserves all existing `url_for()` endpoint names without requiring Blueprint prefixes. Helper functions used only by routes in that module are defined inside `register_routes()` before the routes that reference them.
Common routes (favourite, upload, replace cover, save defaults, clone, save JSON, get missing, clear covers) are registered via factory functions in `routes/shared.py`. Each route module calls `register_common_routes(app, 'category_name')` as the first line of its `register_routes()`. The `CATEGORY_CONFIG` dict in `shared.py` maps each category to its model, URL prefix, endpoint names, and directory paths.
### 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`
The `Settings` model stores LLM provider config, LoRA/checkpoint directory paths, default checkpoint, and `api_key` for REST API authentication.
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/`
- `is_favourite` — boolean (DB-only, not in JSON; toggled from detail pages)
- `is_nsfw` — boolean (mirrored in both DB column and JSON `tags.nsfw`; synced on rescan)
### 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. Named constants are defined in `services/workflow.py`:
| Constant | Node | Role |
|----------|------|------|
| `NODE_KSAMPLER` | `3` | Main KSampler |
| `NODE_CHECKPOINT` | `4` | Checkpoint loader |
| `NODE_LATENT` | `5` | Empty latent (width/height) |
| `NODE_POSITIVE` | `6` | Positive prompt — contains `{{POSITIVE_PROMPT}}` placeholder |
| `NODE_NEGATIVE` | `7` | Negative prompt |
| `NODE_VAE_DECODE` | `8` | VAE decode |
| `NODE_SAVE` | `9` | Save image |
| `NODE_FACE_DETAILER` | `11` | Face ADetailer |
| `NODE_HAND_DETAILER` | `13` | Hand ADetailer |
| `NODE_FACE_PROMPT` | `14` | Face detailer prompt — contains `{{FACE_PROMPT}}` placeholder |
| `NODE_HAND_PROMPT` | `15` | Hand detailer prompt — contains `{{HAND_PROMPT}}` placeholder |
| `NODE_LORA_CHAR` | `16` | Character LoRA (or Look LoRA when a Look is active) |
| `NODE_LORA_OUTFIT` | `17` | Outfit LoRA |
| `NODE_LORA_ACTION` | `18` | Action LoRA |
| `NODE_LORA_STYLE` | `19` | Style / Detailer / Scene LoRA (priority: style > detailer > scene) |
| `NODE_LORA_CHAR_B` | `20` | Character LoRA B (second character) |
| `NODE_VAE_LOADER` | `21` | VAE loader |
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`. Always use the named constants instead of string literals when referencing node IDs.
---
## Key Functions by Module
### `utils.py` — Constants and Pure Helpers
- **`_BODY_GROUP_KEYS`** — Canonical list of field names shared by both `identity` and `wardrobe` sections: `['base', 'head', 'upper_body', 'lower_body', 'hands', 'feet', 'additional']`. Used by `build_prompt()`, `_ensure_character_fields()`, and `_resolve_preset_fields()`.
- **`ALLOWED_EXTENSIONS`** — Permitted upload file extensions.
- **`_LORA_DEFAULTS`** — Default LoRA directory paths per category.
- **`parse_orientation(orientation_str)`** — Converts orientation codes (`1F`, `2F`, `1M1F`, etc.) into Danbooru tags.
- **`_resolve_lora_weight(lora_data)`** — Extracts and validates LoRA weight from a lora data dict.
- **`allowed_file(filename)`** — Checks file extension against `ALLOWED_EXTENSIONS`.
- **`clean_html_text(html_raw)`** — Strips HTML tags, scripts, styles, and images from raw HTML, returning plain text. Used by bulk_create routes.
### `services/prompts.py` — Prompt Building
- **`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: `selected_fields``default_fields` → select all (fallback). Fields are addressed as `"section::key"` strings (e.g. `"identity::hair"`, `"wardrobe::top"`). Characters support a **nested** wardrobe format where `wardrobe` is a dict of outfit names → outfit dicts.
- **`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.
- **`_cross_dedup_prompts(positive, negative)`** — Cross-deduplicates tags between positive and negative prompt strings. Equal counts cancel completely; excess on one side is retained.
- **`_resolve_character(character_slug)`** — Returns a `Character` ORM object for a given slug string. Handles `"__random__"` sentinel.
- **`_ensure_character_fields(character, selected_fields, ...)`** — Mutates `selected_fields` in place, appending populated identity/wardrobe keys. Called in every secondary-category generate route after `_resolve_character()`.
- **`_append_background(prompts, character=None)`** — Appends `"<primary_color> simple background"` tag to `prompts['main']`.
### `services/workflow.py` — Workflow Wiring
- **`_prepare_workflow(workflow, character, prompts, ...)`** — Core workflow wiring function. Replaces prompt placeholders, chains LoRA nodes dynamically, randomises seeds, applies checkpoint settings, runs cross-dedup as the final step.
- **`_apply_checkpoint_settings(workflow, ckpt_data)`** — Applies checkpoint-specific sampler/prompt/VAE settings.
- **`_get_default_checkpoint()`** — Returns `(checkpoint_path, checkpoint_data)` from session, database Settings, or workflow file fallback.
- **`_log_workflow_prompts(label, workflow)`** — Logs the fully assembled workflow prompts in a readable block.
### `services/job_queue.py` — Background Job Queue
Two independent queues with separate worker threads:
- **ComfyUI queue** (`_job_queue` + `_queue_worker`): Image generation jobs.
- **`_enqueue_job(label, workflow, finalize_fn)`** — Adds a generation job to the queue.
- **`_make_finalize(category, slug, db_model_class=None, action=None)`** — Factory returning a callback that retrieves the generated image from ComfyUI, saves it, and optionally updates the DB cover image.
- **LLM queue** (`_llm_queue` + `_llm_queue_worker`): LLM task jobs (tag regeneration, bulk create with overwrite).
- **`_enqueue_task(label, task_fn)`** — Adds an LLM task job. `task_fn` receives the job dict and runs inside `app.app_context()`.
- **Shared**: Both queues share `_job_history` (for status lookup by job ID) and `_job_queue_lock`.
- **`_prune_job_history(max_age_seconds=3600)`** — Removes old terminal-state jobs from memory.
- **`init_queue_worker(flask_app)`** — Stores the app reference and starts both worker threads.
### `services/comfyui.py` — ComfyUI HTTP Client
- **`queue_prompt(prompt_workflow, client_id)`** — POSTs workflow to ComfyUI's `/prompt` endpoint. Validates HTTP response status before parsing JSON; raises `RuntimeError` on non-OK responses. Timeout: 30s.
- **`get_history(prompt_id)`** — Polls ComfyUI for job completion. Timeout: 10s.
- **`get_image(filename, subfolder, folder_type)`** — Retrieves generated image bytes. Timeout: 30s.
- **`get_loaded_checkpoint()`** — Returns the checkpoint path currently loaded in ComfyUI by inspecting the most recent job in `/history`.
- **`_ensure_checkpoint_loaded(checkpoint_path)`** — Forces ComfyUI to unload all models if the desired checkpoint doesn't match what's currently loaded.
### `services/llm.py` — LLM Integration
- **`call_llm(prompt, system_prompt)`** — OpenAI-compatible chat completion supporting OpenRouter (cloud) and Ollama/LMStudio (local). Implements a tool-calling loop (up to 10 turns) using `DANBOORU_TOOLS` via MCP Docker container. Safe to call from background threads (uses `has_request_context()` fallback for OpenRouter HTTP-Referer header).
- **`load_prompt(filename)`** — Loads system prompt text from `data/prompts/`.
- **`call_mcp_tool()`** — Synchronous wrapper for MCP tool calls.
### `services/sync.py` — Data Synchronization
- **`_sync_category(config_key, model_class, id_field, name_field, extra_fn=None, sync_nsfw=True)`** — Generic sync function handling 80% shared logic. 7 sync functions are one-liner wrappers.
- **`sync_characters()`** / **`sync_checkpoints()`** — Custom sync functions (special ID handling, filesystem scan).
- **`_sync_nsfw_from_tags(entity, data)`** — Reads `data['tags']['nsfw']` and sets `entity.is_nsfw`. Called by `_sync_category` and custom sync functions.
- **`_resolve_preset_entity(type, id)`** / **`_resolve_preset_fields(preset_data)`** — Preset resolution helpers.
### `services/file_io.py` — File & DB Helpers
- **`get_available_loras(category)`** — Scans filesystem for available LoRA files in a category.
- **`get_available_checkpoints()`** — Scans checkpoint directories.
- **`_count_look_assignments()`** / **`_count_outfit_lora_assignments()`** — DB aggregate queries.
### `services/generation.py` — Shared Generation Logic
- **`generate_from_preset(preset, overrides=None)`** — Core preset generation function used by both the web route and the REST API. Resolves entities, builds prompts, wires the workflow, and enqueues the job. The `overrides` dict accepts: `action`, `checkpoint`, `extra_positive`, `extra_negative`, `seed`, `width`, `height`. Has no `request` or `session` dependencies.
### `services/mcp.py` — MCP/Docker Lifecycle
- **`_ensure_repo(compose_dir, repo_url, name)`** — Generic helper: clones a git repo if the directory doesn't exist.
- **`_ensure_server_running(compose_dir, repo_url, container_name, name)`** — Generic helper: ensures a Docker Compose service is running (clones repo if needed, starts container if not running).
- **`ensure_mcp_server_running()`** — Ensures the danbooru-mcp Docker container is running (thin wrapper around `_ensure_server_running`).
- **`ensure_character_mcp_server_running()`** — Ensures the character-mcp Docker container is running (thin wrapper around `_ensure_server_running`).
### Route-local Helpers
Some helpers are defined inside a route module's `register_routes()` since they're only used by routes in that file:
- `routes/scenes.py`: `_queue_scene_generation()` — scene-specific workflow builder
- `routes/detailers.py`: `_queue_detailer_generation()` — detailer-specific generation helper
- `routes/styles.py`: `_build_style_workflow()` — style-specific workflow builder
- `routes/checkpoints.py`: `_build_checkpoint_workflow()` — checkpoint-specific workflow builder
- `routes/strengths.py`: `_build_strengths_prompts()`, `_prepare_strengths_workflow()` — strengths gallery helpers
- `routes/transfer.py`: `_create_minimal_template()` — transfer template builder
- `routes/gallery.py`: `_scan_gallery_images()`, `_enrich_with_names()`, `_parse_comfy_png_metadata()`, `_write_sidecar()` — gallery image sidecar JSON I/O
- `routes/regenerate.py`: Tag regeneration routes (single + category bulk + all), tag migration
- `routes/search.py`: `_search_resources()`, `_search_images()` — global search across resources and gallery
---
## 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": { "base": "", "head": "", "upper_body": "", "lower_body": "", "hands": "", "feet": "", "additional": "" }
},
"styles": { "aesthetic": "", "primary_color": "", "secondary_color": "", "tertiary_color": "" },
"lora": { "lora_name": "Illustrious/Looks/tifa.safetensors", "lora_weight": 0.8, "lora_triggers": "" },
"tags": { "origin_series": "Final Fantasy VII", "origin_type": "game", "nsfw": false },
"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": { "base": "", "head": "", "upper_body": "", "lower_body": "", "hands": "", "feet": "", "additional": "" },
"lora": { "lora_name": "Illustrious/Clothing/maid.safetensors", "lora_weight": 0.8, "lora_triggers": "" },
"tags": { "outfit_type": "Uniform", "nsfw": false }
}
```
### 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": { "participants": "1girl", "nsfw": false }
}
```
### 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": { "scene_type": "Outdoor", "nsfw": false }
}
```
### 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": "" },
"tags": { "style_type": "Watercolor", "nsfw": false }
}
```
### 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": "" },
"tags": { "associated_resource": "skin", "adetailer_targets": ["face", "hands"], "nsfw": false }
}
```
### 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": { "origin_series": "Final Fantasy VII", "origin_type": "game", "nsfw": false }
}
```
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); returns `{"job_id": ...}`
- `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>/` — library with favourite/NSFW filter controls
- `GET /<category>/<slug>` — detail + generation UI
- `POST /<category>/<slug>/generate` — queue generation; returns `{"job_id": ...}`
- `POST /<category>/<slug>/replace_cover_from_preview`
- `GET/POST /<category>/<slug>/edit`
- `POST /<category>/<slug>/upload`
- `POST /<category>/<slug>/save_defaults`
- `POST /<category>/<slug>/favourite` — toggle `is_favourite` (AJAX)
- `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` — queue generation; returns `{"job_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/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`
### REST API (`/api/v1/`)
Authenticated via `X-API-Key` header (or `api_key` query param). Key is stored in `Settings.api_key` and managed from the Settings page.
- `GET /api/v1/presets` — list all presets (id, slug, name, has_cover)
- `POST /api/v1/generate/<preset_slug>` — queue generation from a preset; accepts JSON body with optional `checkpoint`, `extra_positive`, `extra_negative`, `seed`, `width`, `height`, `count` (120); returns `{"jobs": [{"job_id": ..., "status": "queued"}]}`
- `GET /api/v1/job/<job_id>` — poll job status; returns `{"id", "label", "status", "error", "result"}`
- `POST /api/key/regenerate` — generate a new API key (Settings page)
See `API_GUIDE.md` for full usage examples.
### Job Queue API
All generation routes use the background job queue. Frontend polls:
- `GET /api/queue/<job_id>/status` — returns `{"status": "pending"|"running"|"done"|"failed", "result": {...}}`
Image retrieval is handled server-side by the `_make_finalize()` callback; there are no separate client-facing finalize routes.
### Search
- `GET /search` — global search page; query params: `q` (search term), `category` (all/characters/outfits/etc.), `nsfw` (all/sfw/nsfw), `type` (all/resources/images)
### Tag Regeneration
- `POST /api/<category>/<slug>/regenerate_tags` — single entity tag regeneration via LLM queue
- `POST /admin/bulk_regenerate_tags/<category>` — queue LLM tag regeneration for all entities in a category
- `POST /admin/bulk_regenerate_tags` — queue LLM tag regeneration for all resources across all categories
- `POST /admin/migrate_tags` — convert old list-format tags to new dict format
### Gallery Image Metadata
- `POST /gallery/image/favourite` — toggle favourite on a gallery image (writes sidecar JSON)
- `POST /gallery/image/nsfw` — toggle NSFW on a gallery image (writes sidecar JSON)
### Utilities
- `POST /set_default_checkpoint` — save default checkpoint to session and persist to `comfy_workflow.json`
- `GET /get_missing_{characters,outfits,actions,scenes,styles,detailers,looks,checkpoints}` — AJAX: list items without cover images (sorted by display name)
- `POST /generate_missing` — batch generate covers for all characters missing one (uses job queue)
- `POST /clear_all_covers` / `clear_all_{outfit,action,scene,style,detailer,look,checkpoint}_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
- **Shared JS files** (extracted from inline scripts):
- `static/js/detail-common.js``initDetailPage(options)`: favourite toggle, selectPreview, waitForJob, AJAX form submit + polling, addToPreviewGallery, batch generation, endless mode, JSON editor init. All 9 detail templates call this with minimal config.
- `static/js/layout-utils.js``confirmResourceDelete(mode)`, `regenerateTags(category, slug)`, `initJsonEditor(saveUrl)`
- `static/js/library-toolbar.js` — Library page toolbar (batch generate, clear covers, missing items)
- Context processors inject `all_checkpoints`, `default_checkpoint_path`, and `COMFYUI_WS_URL` into every template. The `random_gen_image(category, slug)` template global returns a random image path from `static/uploads/<category>/<slug>/` for use as a fallback cover when `image_path` is not set.
- **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 `{"job_id": ...}` response, then polls `/api/queue/<job_id>/status` every ~1.5 seconds until `status == "done"` or the 5-minute timeout is reached. The server-side worker handles all ComfyUI polling and image saving via the `_make_finalize()` callback. There are no client-facing finalize HTTP routes.
- **Batch generation** (library pages): Uses a two-phase pattern:
1. **Queue phase**: All jobs are submitted upfront via sequential fetch calls, collecting job IDs
2. **Poll phase**: All jobs are polled concurrently via `Promise.all()`, updating UI as each completes
3. **Progress tracking**: Displays currently processing items in real-time using a `Set` to track active jobs
4. **Sorting**: All batch operations sort items by display `name` (not `filename`) for better UX
- **Fallback covers** (library pages): When a resource has no assigned `image_path` but has generated images in its upload folder, a random image is shown at 50% opacity (CSS class `fallback-cover`). The image changes on each page load. Resources with no generations show "No 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`
- `preset_system.txt` — preset JSON schema
- `regenerate_tags_system.txt` — tag regeneration schema (all per-category tag structures)
Used by: character/outfit/action/scene/style create forms, bulk_create routes, and tag regeneration. All system prompts include NSFW awareness preamble.
### 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.
---
## Tagging System
Tags are **semantic metadata** for organizing and filtering resources. They are **not injected into generation prompts** — tags are purely for the UI (search, filtering, categorization).
### Tag Schema Per Category
| Category | Tag fields | Example |
|----------|-----------|---------|
| Character | `origin_series`, `origin_type`, `nsfw` | `{"origin_series": "Final Fantasy VII", "origin_type": "game", "nsfw": false}` |
| Look | `origin_series`, `origin_type`, `nsfw` | same as Character |
| Outfit | `outfit_type`, `nsfw` | `{"outfit_type": "Uniform", "nsfw": false}` |
| Action | `participants`, `nsfw` | `{"participants": "1girl, 1boy", "nsfw": true}` |
| Style | `style_type`, `nsfw` | `{"style_type": "Anime", "nsfw": false}` |
| Scene | `scene_type`, `nsfw` | `{"scene_type": "Indoor", "nsfw": false}` |
| Detailer | `associated_resource`, `adetailer_targets`, `nsfw` | `{"associated_resource": "skin", "adetailer_targets": ["face", "hands"], "nsfw": false}` |
| Checkpoint | `art_style`, `base_model`, `nsfw` | `{"art_style": "anime", "base_model": "Illustrious", "nsfw": false}` |
### Favourite / NSFW Columns
- `is_favourite` — DB-only boolean. Toggled via `POST /<category>/<slug>/favourite`. Not stored in JSON (user preference, not asset metadata).
- `is_nsfw` — DB column **and** `tags.nsfw` in JSON. Synced from JSON on rescan via `_sync_nsfw_from_tags()`. Editable from edit pages.
### Library Filtering
All library index pages support query params:
- `?favourite=on` — show only favourites
- `?nsfw=sfw|nsfw|all` — filter by NSFW status
- Results are ordered by `is_favourite DESC, name ASC` (favourites sort first).
- Filter logic is shared via `apply_library_filters(query, model_class)` in `routes/shared.py`, which returns `(items, fav, nsfw)`.
### Gallery Image Sidecar Files
Gallery images can have per-image favourite/NSFW metadata stored in sidecar JSON files at `{image_path}.json` (e.g. `static/uploads/characters/tifa/gen_123.png.json`). Sidecar schema: `{"is_favourite": bool, "is_nsfw": bool}`.
---
## 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** (`services/sync.py`): Add `sync_newcategory()` as a one-liner using `_sync_category()` (or custom if needed).
3. **Data directory** (`app.py`): Add `app.config['NEWCATEGORY_DIR'] = 'data/newcategory'`.
4. **Shared routes** (`routes/shared.py`): Add entry to `CATEGORY_CONFIG` dict with model, url_prefix, detail_endpoint, config_dir, category_folder, id_field, name_field, endpoint_prefix.
5. **Routes** (`routes/newcategory.py`): Create a new route module with a `register_routes(app)` function. Call `register_common_routes(app, 'newcategory')` first, then implement category-specific routes (index, detail, edit, generate, rescan). Follow `routes/outfits.py` or `routes/scenes.py` exactly.
6. **Route registration** (`routes/__init__.py`): Import and call `newcategory.register_routes(app)`.
7. **Templates**: Create `templates/newcategory/{index,detail,edit,create}.html` extending `layout.html`. Detail template should call `initDetailPage({...})` from `detail-common.js`.
8. **Nav**: Add link to navbar in `templates/layout.html`.
9. **Startup** (`app.py`): Import and call `sync_newcategory()` in the `with app.app_context()` block.
10. **Generator page**: Add to `routes/generator.py`, `services/prompts.py` `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
### Directly (development)
```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()`.
### Docker
```bash
docker compose up -d
```
The compose file (`docker-compose.yml`) runs two services:
- **`danbooru-mcp`** — built from `https://git.liveaodh.com/aodhan/danbooru-mcp.git`; the MCP tag-search container used by `call_llm()`.
- **`app`** — the Flask app, exposed on host port **5782** → container port 5000.
Key environment variables set by compose:
- `COMFYUI_URL=http://10.0.0.200:8188` — points at ComfyUI on the Docker host network.
- `SKIP_MCP_AUTOSTART=true` — disables the app's built-in danbooru-mcp launch logic (compose manages it).
Volumes mounted into the app container:
- `./data`, `./static/uploads`, `./instance`, `./flask_session` — persistent app data.
- `/Volumes/ImageModels:/ImageModels:ro` — model files for checkpoint/LoRA scanning (**requires Docker Desktop file sharing enabled for `/Volumes/ImageModels`**).
- `/var/run/docker.sock` — Docker socket so the app can exec danbooru-mcp tool containers.
---
## 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. In generate routes, the detailer prompt is injected directly into `prompts['main']` after `build_prompt()` returns (not via tags or `build_prompt` itself).
- **`_make_finalize` action semantics**: Pass `action=None` when the route should always update the DB cover (e.g. batch generate, checkpoint generate). Pass `action=request.form.get('action')` for routes that support both "preview" (no DB update) and "replace" (update DB). The factory skips the DB write when `action` is truthy and not `"replace"`.
- **LLM queue runs without request context**: `_enqueue_task()` callbacks execute in a background thread with only `app.app_context()`. Do not access `flask.request`, `flask.session`, or other request-scoped objects inside `task_fn`. Use `has_request_context()` guard if code is shared between HTTP handlers and background tasks.
- **Tags are metadata only**: Tags (`data['tags']`) are never injected into generation prompts. They are purely for UI filtering and search. The old pattern of `parts.extend(data.get('tags', []))` in prompt building has been removed.
- **Path traversal guard on replace cover**: The replace cover route in `routes/shared.py` validates `preview_path` using `os.path.realpath()` + `startswith()` to prevent path traversal attacks.
- **Logging uses lazy % formatting**: All logger calls use `logger.info("msg %s", var)` style, not f-strings. This avoids formatting the string when the log level is disabled.

View File

@@ -1,51 +0,0 @@
# 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

29
Dockerfile Normal file
View File

@@ -0,0 +1,29 @@
FROM python:3.12-slim
# Install system deps: git (for danbooru-mcp repo clone) + docker CLI
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
curl \
ca-certificates \
&& install -m 0755 -d /etc/apt/keyrings \
&& curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc \
&& chmod a+r /etc/apt/keyrings/docker.asc \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
> /etc/apt/sources.list.d/docker.list \
&& apt-get update && apt-get install -y --no-install-recommends docker-ce-cli docker-compose-plugin \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Writable dirs that will typically be bind-mounted at runtime
RUN mkdir -p static/uploads instance flask_session data/characters data/clothing \
data/actions data/styles data/scenes data/detailers data/checkpoints data/looks
EXPOSE 5000
CMD ["python", "app.py"]

View File

@@ -7,17 +7,23 @@ A local web-based GUI for managing character profiles (JSON) and generating cons
- **Character Gallery**: Automatically scans your `characters/` folder and builds a searchable, sortable database.
- **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.
- **AI-Powered Creation**: Create new characters, outfits, and actions using AI to generate profiles from descriptions, or manually create blank templates.
- **character-Integrated Previews**: Standalone items (Outfits/Actions) can be previewed directly on a specific character's model with automatic style injection (e.g., background color matching).
- **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/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).
- **Triple LoRA Chaining**: Chains up to three distinct LoRAs (Character + Outfit + Action) sequentially in the generation workflow.
- **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.
- **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
@@ -33,6 +39,20 @@ A local web-based GUI for managing character profiles (JSON) and generating cons
## Setup & Installation
### Option A — Docker (recommended)
1. **Clone the repository.**
2. Edit `docker-compose.yml` if needed:
- Set `COMFYUI_URL` to your ComfyUI host/port.
- Adjust the `/Volumes/ImageModels` volume path to your model directory. If you're on Docker Desktop, add the path under **Settings → Resources → File Sharing** first.
3. **Start services:**
```bash
docker compose up -d
```
The app will be available at `http://localhost:5782`.
### Option B — Local (development)
1. **Clone the repository** to your local machine.
2. **Configure Paths**: Open `app.py` and update the following variables to match your system:
```python
@@ -70,8 +90,13 @@ A local web-based GUI for managing character profiles (JSON) and generating cons
- `/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`: SQLAlchemy database models.
- `DEVELOPMENT_GUIDE.md`: Architectual patterns for extending the browser.
- `DEVELOPMENT_GUIDE.md`: Architectural patterns for extending the browser.

4148
app.py

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,7 @@
},
"4": {
"inputs": {
"ckpt_name": "Noob/oneObsession_v19Atypical.safetensors"
"ckpt_name": ""
},
"class_type": "CheckpointLoaderSimple"
},

View File

@@ -2,32 +2,23 @@
"action_id": "3p_sex_000037",
"action_name": "3P Sex 000037",
"action": {
"full_body": "group sex, threesome, 3 subjects, intertwined bodies, on bed",
"head": "pleasured expression, heavy breathing, blush, sweating, tongue out, saliva",
"eyes": "half-closed eyes, rolling back, heart pupils, looking at partner",
"arms": "wrapping around partners, arm locking, grabbing shoulders",
"hands": "groping, fondling, gripping hair, fingers digging into skin",
"torso": "arching back, bare skin, sweat drops, pressing chests together",
"pelvis": "connected, hips grinding, penetration",
"legs": "spread legs, legs in air, wrapped around waist, kneeling",
"feet": "toes curled, arched feet",
"additional": "sex act, bodily fluids, cum, motion blur, intimacy, nsfw"
},
"participants": {
"solo_focus": "false",
"orientation": "MfF"
"base": "threesome, group_sex, 3_people",
"head": "blush, half-closed_eyes, sweat",
"upper_body": "nude, reaching",
"lower_body": "sex, spread_legs, intercourse",
"hands": "groping",
"feet": "toes_curled",
"additional": "panting, orgasm, sweat"
},
"lora": {
"lora_name": "Illustrious/Poses/3P_SEX-000037.safetensors",
"lora_weight": 1.0,
"lora_triggers": "3P_SEX-000037"
"lora_weight": 0.8,
"lora_triggers": "threesome, group_sex",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"group sex",
"threesome",
"3p",
"nsfw",
"sexual intercourse",
"pleasure"
]
"tags": {
"participants": "threesome",
"nsfw": true
}
}

View File

@@ -2,34 +2,23 @@
"action_id": "4p_sex",
"action_name": "4P Sex",
"action": {
"full_body": "complex group composition involving four subjects in close physical contact, bodies intertwined or overlapping in a cluster",
"head": "heads positioned close together, looking at each other or facing different directions, varied expressions",
"eyes": "open or half-closed, gazing at other subjects",
"arms": "arms reaching out, holding, or embracing other subjects in the group, creating a web of limbs",
"hands": "hands placed on others' bodies, grasping or touching",
"torso": "torsos leaning into each other, pressed together or arranged in a pile",
"pelvis": "pelvises positioned in close proximity, aligned with group arrangement",
"legs": "legs entangled, kneeling, lying down, or wrapped around others",
"feet": "feet resting on the ground or tucked in",
"additional": "high density composition, multiple angles of interaction, tangled arrangement of bodies"
},
"participants": {
"solo_focus": "false",
"orientation": "MFFF"
"base": "group_sex, foursome, 4p, multiple_partners, sexual_act",
"head": "moaning, open_mouth, closed_eyes, ahegao, heart_eyes, heavy_breathing, flushed_face, sweat",
"upper_body": "nude, arching_back, standing_on_all_fours, breasts_press, breast_grab, fingers_in_mouth",
"lower_body": "vaginal_intercourse, anal_intercourse, double_penetration, legs_apart, kneeing, missionary_position",
"hands": "breast_fondling, clutching_sheets, on_partner, touching_self",
"feet": "toes_curled, barefoot",
"additional": "bodily_fluids, semen, sweat, messy, erotic, intimate"
},
"lora": {
"lora_name": "Illustrious/Poses/4P_sex.safetensors",
"lora_weight": 1.0,
"lora_triggers": "4P_sex"
"lora_weight": 0.6,
"lora_triggers": "4P_sexV1",
"lora_weight_min": 0.6,
"lora_weight_max": 0.6
},
"tags": [
"4girls",
"group",
"tangled",
"multiple_viewers",
"all_fours",
"entangled_legs",
"close_contact",
"crowded"
]
"tags": {
"participants": "4people",
"nsfw": true
}
}

View File

@@ -1,17 +1,14 @@
{
"action_id": "_malebolgia__oral_sex_tounge_afterimage_concept_2_0_illustrious",
"action_name": " 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"
"base": "kneeling, leaning_forward, oral_sex",
"head": "looking_up, mouth_open, intense_expression, half-closed_eyes",
"upper_body": "forward_bend, reaching_forward",
"lower_body": "kneeling, legs_spread",
"hands": "grabbing_partner, hand_on_thigh",
"feet": "barefoot",
"additional": "afterimage, motion_blur, multiple_tongues, speed_lines, saliva_drool"
},
"participants": {
"solo_focus": "true",
@@ -20,13 +17,12 @@
"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_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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "kneeling, fellatio, oral sex, kissing penis",
"head": "eyes closed, half-closed eyes, looking up, kissing, tongue",
"upper_body": "arched back, leaning forward",
"lower_body": "kneeling",
"hands": "holding penis, hand on thigh",
"feet": "",
"additional": "saliva, slime, connection"
},
"participants": {
"solo_focus": "true",
@@ -20,15 +17,12 @@
"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_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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,36 +2,23 @@
"action_id": "after_sex_fellatio_illustriousxl_lora_nochekaiser_r1",
"action_name": "After Sex Fellatio Illustriousxl Lora Nochekaiser R1",
"action": {
"full_body": "kneeling on the floor in a submissive posture (seiza) or sitting back on heels",
"head": "tilted upwards slightly, heavy blush on cheeks, messy hair, mouth held open",
"eyes": "half-closed, looking up at viewer, glazed expression, maybe heart-shaped pupils",
"arms": "resting slightly limp at sides or hands placed on thighs",
"hands": "resting on thighs or one hand wiping corner of mouth",
"torso": "leaning slightly forward, relaxed posture implying exhaustion",
"pelvis": "hips resting on heels",
"legs": "bent at knees, kneeling",
"feet": "tucked under buttocks",
"additional": "cum on face, cum on mouth, semen, saliva trail, drooling, tongue stuck out, heavy breathing, sweat, after sex atmosphere"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "1girl, 1boy, completely_nude, lying, on_back, spread_legs",
"head": "looking_at_viewer, tongue, open_mouth, blush, disheveled_hair, half-closed_eyes",
"upper_body": "on_bed, large_breasts, nipples, sweat",
"lower_body": "pussy, cum_in_pussy, leaking_cum, knees_up, thighs_apart",
"hands": "on_bed",
"feet": "barefoot",
"additional": "after_sex, fellatio, penis, cum, cum_drip, messy_body, sweat, bed_sheet"
},
"lora": {
"lora_name": "Illustrious/Poses/after-sex-fellatio-illustriousxl-lora-nochekaiser_r1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "after-sex-fellatio-illustriousxl-lora-nochekaiser_r1"
"lora_triggers": "after sex fellatio",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after fellatio",
"cum on face",
"messy face",
"saliva",
"tongue out",
"kneeling",
"looking up",
"blush",
"sweat",
"open mouth"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -0,0 +1,24 @@
{
"action_id": "afterfellatio_ill",
"action_name": "Afterfellatio Ill",
"action": {
"base": "kneeling, leaning_forward, pov",
"head": "looking_at_viewer, blush, tilted_head, cum_on_face, half-closed_eyes, tears, messy_makeup",
"upper_body": "arms_down, reaching_towards_viewer",
"lower_body": "kneeling",
"hands": "hands_on_penis",
"feet": "barefoot",
"additional": "cum, cum_string, cum_in_mouth, closed_mouth, stringy_cum"
},
"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": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "afteroral",
"action_name": "Afteroral",
"action": {
"full_body": "",
"head": "cum in mouth, facial, blush, open mouth, tongue out, messy hair, sweat, panting",
"eyes": "half-closed eyes, glazed eyes, looking up, tears",
"arms": "",
"hands": "",
"torso": "",
"pelvis": "",
"legs": "",
"base": "after_fellatio, post-coital, flushed_face, messy_appearance",
"head": "messy_hair, panting, heavy_breathing, half-closed_eyes, dazed, pupil_dilated, flushed, sweat",
"upper_body": "smeared_lipstick, runny_makeup, saliva, saliva_trail, cum_on_face, cum_on_mouth, excessive_cum",
"lower_body": "",
"hands": "hands_near_face, curled_fingers",
"feet": "",
"additional": "saliva, saliva string, heavy breathing, after fellatio, bodily fluids"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"additional": "after_fellatio, cum_drip, mess"
},
"lora": {
"lora_name": "Illustrious/Poses/afteroral.safetensors",
"lora_weight": 1.0,
"lora_triggers": "afteroral"
"lora_triggers": "after oral, after deepthroat",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after oral",
"wiping mouth",
"saliva",
"kneeling",
"blush",
"messy",
"panting"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "kneeling, sitting, exhausted, post-coital, afterpaizuri",
"head": "flushed, messy_hair, panting, mouth_open, tongue_out, half-closed_eyes, dazed, looking_at_viewer",
"upper_body": "bare_shoulders, cleavage, semen_on_breasts, disheveled_clothes, bra_removed_under_clothes",
"lower_body": "kneeling, thighs_together, buttocks_on_heels",
"hands": "hands_on_lap",
"feet": "barefoot",
"additional": "semen_on_face, heavy_breathing, sweat, moisture, viscous_liquid, creamy_fluid"
},
"participants": {
"solo_focus": "true",
@@ -20,16 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/afterpaizuri.safetensors",
"lora_weight": 1.0,
"lora_triggers": "afterpaizuri"
"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"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,36 +2,23 @@
"action_id": "aftersexbreakv2",
"action_name": "Aftersexbreakv2",
"action": {
"full_body": "lying in bed, exhausted",
"head": "messy hair, flushed face, sweating, panting",
"eyes": "half-closed eyes, ",
"arms": "",
"hands": "",
"torso": "sweaty skin, glistening skin, heavy breathing,",
"pelvis": "cum drip",
"legs": "legs spread",
"feet": "",
"additional": "ripped clothing, panties aside, rumpled bed sheets, messy bed, dim lighting, intimate atmosphere, exhausted"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "lying, on_back, on_bed, bowlegged_pose, spread_legs, twisted_torso",
"head": "messy_hair, head_back, sweaty, rolling_eyes, half-closed_eyes, ahegao",
"upper_body": "arms_spread, arms_above_head, sweat, naked, collarbone, heavy_breathing",
"lower_body": "hips, navel, female_pubic_hair, spread_legs, legs_up, bent_legs",
"hands": "relaxed_hands",
"feet": "barefoot",
"additional": "condom_wrapper, used_tissue, stained_sheets, cum_on_bed, sweat_bead"
},
"lora": {
"lora_name": "Illustrious/Poses/AfterSexBreakV2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "AfterSexBreakV2"
"lora_triggers": "aftersexbreak, after sex, male sitting",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"after sex",
"post-coital",
"lying in bed",
"messy hair",
"sweaty skin",
"covered by sheet",
"bedroom eyes",
"exhausted",
"intimate",
"rumpled sheets"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "against_glass, leaning_forward, pressed_against_surface, glass_surface",
"head": "face_pressed, cheek_press, breath_on_glass, looking_at_viewer, intimate_gaze",
"upper_body": "chest_pressed_against_glass, leaning_into_glass",
"lower_body": "hips_pushed_forward, standing",
"hands": "hands_on_glass, palms_on_glass, fingers_spread",
"feet": "standing",
"additional": "condensation, translucent_surface, distortion"
},
"participants": {
"solo_focus": "true",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Against_glass_bs.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Against_glass_bs"
"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"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -1,32 +0,0 @@
{
"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"
},
"tags": [
"violence",
"dominance",
"pov",
"combat",
"anger"
]
}

View File

@@ -1,37 +0,0 @@
{
"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"
},
"tags": [
"ahegao",
"rolling eyes",
"tongue out",
"open mouth",
"blush",
"drooling",
"saliva",
"cross-eyed",
"double peace sign",
"v-sign"
]
}

View File

@@ -2,33 +2,23 @@
"action_id": "amateur_pov_filming",
"action_name": "Amateur Pov Filming",
"action": {
"full_body": "POV shot, subject positioned close to the lens, selfie composition or handheld camera style",
"head": "facing the camera directly, slightly tilted or chin tucked, candid expression",
"eyes": "looking directly at viewer, intense eye contact",
"arms": "one or both arms raised towards the viewer holding the capturing device",
"hands": "holding smartphone, clutching camera, fingers visible on device edges",
"torso": "upper body visible, facing forward, close proximity",
"pelvis": "obscured or out of frame",
"legs": "out of frame",
"feet": "out of frame",
"additional": "phone screen, camera interface, amateur footage quality, blurry background, indoor lighting, candid atmosphere"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "pov, selfie, solo, indoors, recording, smartphone, holding_phone",
"head": "looking_at_viewer, blush, open_mouth",
"upper_body": "upper_body, breasts, nipples",
"lower_body": "hips",
"hands": "holding_phone, holding_id_card",
"feet": "barefoot",
"additional": "mirror_selfie, amateur_aesthetic"
},
"lora": {
"lora_name": "Illustrious/Poses/Amateur_POV_Filming.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Amateur_POV_Filming"
"lora_triggers": "Homemade_PornV1, recording, pov, prostitution",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"pov",
"selfie",
"holding phone",
"amateur",
"candid",
"recording",
"close-up"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "arch_back_sex_v1_1_illustriousxl",
"action_name": "Arch Back Sex V1 1 Illustriousxl",
"action": {
"full_body": "character positioned with an exaggerated spinal curve, emphasizing the posterior",
"head": "thrown back in pleasure or looking back over the shoulder",
"eyes": "half-closed, rolled back, or heavily blushing",
"arms": "supporting body weight on elbows or hands, or reaching forward",
"hands": "gripping bedsheets or pressing firmly against the surface",
"torso": "extremely arched back, chest pressed down or lifted depending on angle",
"pelvis": "tilted upwards, hips raised high",
"legs": "kneeling or lying prone with knees bent",
"feet": "toes curled or extending upwards",
"additional": "sweat, blush, heavy breathing indication"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "doggystyle, sex_from_behind, all_fours",
"head": "head_back, looking_back, closed_eyes, blush",
"upper_body": "arms_support, arched_back",
"lower_body": "lifted_hip, kneeling, spread_legs",
"hands": "grabbing_butt",
"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": "arch-back-sex-v1.1-illustriousxl"
"lora_triggers": "kiss, arched_back, sex_from_behind",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"arch back",
"arched back",
"hips up",
"curved spine",
"ass focus",
"hyper-extension",
"prone",
"kneeling",
"from behind"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "arm_grab_missionary_ill_10",
"action_name": "Arm Grab Missionary Ill 10",
"action": {
"full_body": "lying on back, missionary position, submissive posture",
"head": "head tilted back, blushing, heavy breathing",
"eyes": "looking at viewer, half-closed eyes, rolling eyes",
"arms": "arms raised above head, arms grabbed, wrists held, armpits exposed",
"hands": "hands pinned, helpless",
"torso": "arched back, chest exposed",
"pelvis": "exposed crotch",
"legs": "spread legs, knees bent upwards, m-legs",
"feet": "toes curled",
"additional": "on bed, bed sheet, pov, submission, restraint"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "missionary, lying, on_back, sex, vaginal_sex",
"head": "blushing, open_mouth, one_eye_closed, looking_at_viewer, dilated_pupils",
"upper_body": "arms_above_head, pinned, restrained, grabbed_wrists, breasts, nipples, medium_breasts",
"lower_body": "legs_spread, lifted_pelvis, spread_legs, legs_up, knees_up",
"hands": "interlocked_fingers, holding_hands",
"feet": "barefoot",
"additional": "faceless_male, sweat, motion_lines"
},
"lora": {
"lora_name": "Illustrious/Poses/arm_grab_missionary_ill-10.safetensors",
"lora_weight": 1.0,
"lora_triggers": "arm_grab_missionary_ill-10"
"lora_triggers": "arm_grab_missionary",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"arm grab",
"missionary",
"lying on back",
"arms above head",
"wrists held",
"legs spread",
"armpits",
"submission",
"pov"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "ballsdeep_il_v2_2_s",
"action_name": "Ballsdeep Il V2 2 S",
"action": {
"full_body": "intense sexual intercourse, intimate close-up on genital connection, visceral physical interaction",
"head": "flushed face, expression of intense pleasure, head thrown back, mouth slightly open, panting",
"eyes": "eyes rolling back, ahegao or tightly closed eyes, heavy breathing",
"arms": "muscular arms tensed, holding partner's hips firmly, veins visible",
"hands": "hands gripping waist or buttocks, fingers digging into skin, pulling partner closer",
"torso": "sweaty skin, arched back, abdominal muscles engaged",
"pelvis": "hips slammed forward, testicles pressed firmly against partner's skin, complete insertion",
"legs": "thighs interlocking, kneeling or legs wrapped around partner's waist",
"feet": "toes curled tightly",
"additional": "sex, vaginal, balls deep, motion blur on hips, bodily fluids, skin indentation, anatomical focus"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "sexual_intercourse, deep_penetration, thrusting, mating_press, from_behind, doggy_style, missionary, cowgirl_position",
"head": "eyes_rolled_back, closed_eyes, open_mouth, flushed_face, sweat, expressionless, intense_expression",
"upper_body": "arched_back, hands_on_own_body, grabbing, fingers_clenched, sweating",
"lower_body": "joined_genitals, spread_legs, wrap_legs, hips_thrusting, stomach_bulge, testicles_pressed",
"hands": "finger_clutch, gripping",
"feet": "curled_toes",
"additional": "intense, deep_pen, skin_on_skin"
},
"lora": {
"lora_name": "Illustrious/Poses/BallsDeep-IL-V2.2-S.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BallsDeep-IL-V2.2-S"
"lora_triggers": "deep penetration",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"nsfw",
"sex",
"vaginal",
"internal view",
"cross-section",
"deep penetration",
"mating press"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "bathingtogether",
"action_name": "Bathingtogether",
"action": {
"full_body": "two characters sharing a bathtub, sitting close together in water",
"head": "wet hair, flushed cheeks, relaxed expressions, looking at each other",
"eyes": "gentle gaze, half-closed",
"arms": "resting on the tub rim, washing each other, or embracing",
"hands": "holding soap, sponge, or touching skin",
"torso": "wet skin, water droplets, partially submerged, steam rising",
"pelvis": "submerged in soapy water",
"legs": "knees bent, submerged, intertwined",
"feet": "underwater",
"additional": "bathroom tiles, steam clouds, soap bubbles, rubber duck, faucet"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "bathing, sitting, partially_submerged, bathtub",
"head": "looking_at_viewer, eye_contact",
"upper_body": "bare_shoulders, skin_to_skin, arms_around_each_other",
"lower_body": "underwater, knees_up",
"hands": "hands_on_body",
"feet": "barefoot",
"additional": "bubbles, water, steam, wet, wet_hair, mirror_reflection"
},
"lora": {
"lora_name": "Illustrious/Poses/bathingtogether.safetensors",
"lora_weight": 1.0,
"lora_triggers": "bathingtogether"
"lora_triggers": "bathing together",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bathing",
"couple",
"wet",
"steam",
"bathtub",
"shared bath",
"soap bubbles"
]
"tags": {
"participants": "2girls",
"nsfw": false
}
}

View File

@@ -1,33 +1,24 @@
{
"action": {
"base": "2koma, side-by-side, comparison",
"head": "facial, cum_on_face, messy_face, eyes_closed, mouth_open, orgasm",
"upper_body": "semi-nude, messy, cum_on_breasts",
"lower_body": "",
"hands": "hands_on_head",
"feet": "",
"additional": "cum, close-up, ejaculation"
},
"action_id": "before_after_1230829",
"action_name": "Before After 1230829",
"action": {
"full_body": "split view composition, side-by-side comparison, two panels showing the same character",
"head": "varying expressions, sad vs happy, neutral vs excited",
"eyes": "looking at viewer, varying intensity",
"arms": "neutral pose vs confident pose",
"hands": "hanging loosely vs gesturing",
"torso": "visible change in clothing or physique",
"pelvis": "standing or sitting",
"legs": "standing or sitting",
"feet": "neutral stance",
"additional": "transformation, makeover, dividing line, progression, evolution"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/before_after_1230829.safetensors",
"lora_weight": 1.0,
"lora_triggers": "before_after_1230829"
"lora_triggers": "before_after",
"lora_weight": 0.9,
"lora_weight_max": 0.7,
"lora_weight_min": 0.6
},
"tags": [
"split view",
"comparison",
"transformation",
"before and after",
"multiple views",
"concept art"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,14 +2,11 @@
"action_id": "belly_dancing",
"action_name": "Belly Dancing",
"action": {
"full_body": "belly dancing, standing",
"base": "belly_dancing, dancing, standing",
"head": "",
"eyes": "",
"arms": "hands above head",
"hands": "palms together",
"torso": "",
"pelvis": "swaying hips",
"legs": "",
"upper_body": "arms_up",
"lower_body": "swaying",
"hands": "own_hands_together",
"feet": "",
"additional": ""
},
@@ -20,10 +17,12 @@
"lora": {
"lora_name": "",
"lora_weight": 1.0,
"lora_triggers": ""
"lora_triggers": "",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"belly dancing",
"dance"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "bentback",
"action_name": "Bentback",
"action": {
"full_body": "standing, upper body bent forward at the waist, torso parallel to the ground",
"head": "turned to look back, looking over shoulder, chin raised",
"eyes": "looking at viewer, focused gaze",
"arms": "arms extended downward or resting on legs",
"hands": "hands on knees, hands on thighs",
"torso": "back arched, spinal curve emphasized, bent forward",
"pelvis": "hips pushed back, buttocks protruding",
"legs": "straight legs, locked knees or slight bend",
"feet": "feet shoulder-width apart, waiting",
"additional": "view from behind, dorsal view, dynamic posture"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "bent_over, from_behind, arched_back",
"head": "looking_back, looking_at_viewer",
"upper_body": "twisted_torso, arms_at_sides",
"lower_body": "ass_focus, kneepits, spread_legs",
"hands": "hands_on_legs",
"feet": "barefoot",
"additional": "leaning_forward"
},
"lora": {
"lora_name": "Illustrious/Poses/BentBack.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BentBack"
"lora_triggers": "bentback, kneepits",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bent over",
"standing",
"hands on knees",
"looking back",
"from behind",
"arched back",
"torso bend"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,34 +2,23 @@
"action_id": "blowjobcomicpart2",
"action_name": "Blowjobcomicpart2",
"action": {
"full_body": "kneeling in front of standing partner, intimate interaction, oral sex pose",
"head": "tilted up, mouth open, cheek bulge, blushing, messy face",
"eyes": "rolled back, heart-shaped pupils, crossed eyes, or looking up",
"arms": "reaching forward, holding partner's legs or hips",
"hands": "stroking, gripping thighs, holding shaft, guiding",
"torso": "leaning forward, subordinate posture",
"pelvis": "kneeling on ground",
"legs": "bent at knees, shins on floor",
"feet": "tucked under or toes curled",
"additional": "saliva, slobber, motion lines, speech bubbles, sound effects, comic panel structure, greyscale or screentones"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "3koma, comic_strip, sequence, vertical_strip",
"head": "tongue_out, open_mouth, saliva, empty_eyes, rolled_eyes",
"upper_body": "arms_at_sides, torso, standing_on_knees",
"lower_body": "sexual_activity, kneeling",
"hands": "hands_on_penis, grasping",
"feet": "out_of_frame",
"additional": "fellatio, irrumatio, licking, ejaculation, cum_in_mouth, excessive_cum"
},
"lora": {
"lora_name": "Illustrious/Poses/BlowjobComicPart2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BlowjobComicPart2"
"lora_triggers": "bjmcut",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"nsfw",
"fellatio",
"oral sex",
"kneeling",
"comic",
"monochrome",
"saliva",
"ahegao"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,32 +2,23 @@
"action_id": "bodybengirl",
"action_name": "Bodybengirl",
"action": {
"full_body": "character standing and bending forward at the waist, hips raised high",
"head": "looking back at viewer or head inverted",
"eyes": "looking at viewer",
"arms": "extended downwards towards the ground",
"hands": "touching toes, ankles, or palms flat on the floor",
"torso": "upper body folded down parallel to or against the legs",
"pelvis": "lifted upwards, prominent posterior view",
"legs": "straight or knees slightly locked, shoulder-width apart",
"feet": "planted firmly on the ground",
"additional": "often viewed from behind or the side to emphasize flexibility and curve"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "suspended_congress, lifted_by_torso, torso_grab",
"head": "",
"upper_body": "arms_up, bent_over",
"lower_body": "legs_up",
"hands": "",
"feet": "",
"additional": "1boy, 1girl, size_difference, loli"
},
"lora": {
"lora_name": "Illustrious/Poses/BodyBenGirl.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BodyBenGirl"
"lora_triggers": "bentstand-behind",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"bending over",
"touching toes",
"from behind",
"flexibility",
"standing",
"jack-o' pose"
]
"tags": {
"participants": "1boy 1girl",
"nsfw": true
}
}

View File

@@ -2,31 +2,23 @@
"action_id": "bodybengirlpart2",
"action_name": "Bodybengirlpart2",
"action": {
"full_body": "standing pose, bending forward at the waist while facing away from the camera",
"head": "turned backward looking over the shoulder",
"eyes": "looking directly at the viewer",
"arms": "extended downwards or resting on upper thighs",
"hands": "placed on knees or hanging freely",
"torso": "bent forward at a 90-degree angle, lower back arched",
"pelvis": "pushed back and tilted upwards",
"legs": "straight or slightly unlocked at the knees",
"feet": "standing firmly on the ground",
"additional": "view from behind, emphasizing hip curvature and flexibility"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "suspended, from_side, bent_over, torso_grab",
"head": "embarrassed, sweating, scared, mouth_open, looking_away, downcast",
"upper_body": "arms_at_sides, limp_arms",
"lower_body": "legs_dangling, knees_together, bare_feet, feet_dangling",
"hands": "open_hands, limp_hands",
"feet": "bare_feet, dangling",
"additional": "motion_lines, sweat_drops"
},
"lora": {
"lora_name": "Illustrious/Poses/BodyBenGirlPart2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BodyBenGirlPart2"
"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": [
"bent over",
"looking back",
"from behind",
"standing",
"flexible"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "bored, slouching, leaning_forward, ennui, uninterested",
"head": "head_on_hand, blank_stare, half-lidded_eyes",
"upper_body": "slumped, leaning_forward, sitting, arms_crossed",
"lower_body": "sitting, legs_crossed",
"hands": "hand_on_cheek, hand_on_chin",
"feet": "",
"additional": "sighing, waiting"
},
"participants": {
"solo_focus": "true",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Bored_Retrain-000115_1336316.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Bored_Retrain-000115_1336316"
"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"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "breast_pressh",
"action_name": "Breast Pressh",
"action": {
"full_body": "character pressing breasts together with hands or arms to enhance cleavage",
"head": "slightly tilted forward, often with a flushed or embarrassed expression",
"eyes": "looking down at chest or shyly at viewer",
"arms": "bent at elbows, brought in front of the chest",
"hands": "placed on the sides or underneath breasts, actively squeezing or pushing them inward",
"torso": "upper body leaned slightly forward or arched back to emphasize the chest area",
"pelvis": "neutral standing or sitting position",
"legs": "standing straight or sitting with knees together",
"feet": "planted firmly on ground if standing",
"additional": "emphasis on soft body physics, squish deformation, and skin indentation around the fingers"
},
"participants": {
"solo_focus": "false",
"orientation": "FF"
"base": "1boy, 2girls, sandwiched, standing, height_difference, size_difference",
"head": "head_between_breasts, face_between_breasts, cheek_squash",
"upper_body": "breast_press, hugging, arms_around_waist, chest_to_chest",
"lower_body": "hips_touching, legs_apart",
"hands": "hands_on_back",
"feet": "barefoot",
"additional": "hetero, multiple_girls"
},
"lora": {
"lora_name": "Illustrious/Poses/breast_pressH.safetensors",
"lora_weight": 1.0,
"lora_triggers": "breast_pressH"
"lora_weight": 0.6,
"lora_triggers": "breast_pressH",
"lora_weight_min": 0.6,
"lora_weight_max": 0.6
},
"tags": [
"breast press",
"squeezing breasts",
"cleavage",
"hands on breasts",
"self groping",
"squish",
"upper body"
]
"tags": {
"participants": "1boy 2girls",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "breast_smother, face_in_cleavage, intimate, (POV:1.2), side_view",
"head": "looking_down, half-closed_eyes, affectionate, dominant",
"upper_body": "large_breasts, cleavage, squished_breasts, hugging, embracing, chest_press",
"lower_body": "close_contact, standing",
"hands": "cradling_head, fingers_in_hair, pressing_head_to_breasts",
"feet": "barefoot, feet_on_ground",
"additional": "skin_compression, soft_lighting, motorboating"
},
"participants": {
"solo_focus": "true",
@@ -20,17 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/breast-smother-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "breast-smother-illustriousxl-lora-nochekaiser"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "duo, sex, sexual_intercourse, close-up, breast_sucking, fingering, intimate_embrace",
"head": "face_buried_in_breasts, sucking_nipple, nipples_suck, saliva, eyes_closed, heavy_breathing, blush, expression_of_bliss",
"upper_body": "reaching_down, holding_partner, arm_around_waist, large_breasts, exposed_breasts, nude_torso, pressing_bodies",
"lower_body": "legs_spread, pussy_exposed, vaginal_fingering, m_legs, intertwined_legs",
"hands": "fingering, fingers_inside, clitoris_rubbing, squeezing_breasts, groping",
"feet": "toes_curled, relaxed_feet",
"additional": "saliva_trail, sweat, sweat_drop, uncensored"
},
"participants": {
"solo_focus": "true",
@@ -20,18 +17,12 @@
"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_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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "breaking_through_barrier, dynamic_pose, impact_frame, dynamic_angle",
"head": "intense_expression, facial_focus, visible_through_glass",
"upper_body": "reaching_towards_viewer, twisted_torso, arms_extended",
"lower_body": "dynamic_pose, movement",
"hands": "hands_up, touching_glass, debris_interaction",
"feet": "grounded, dynamic",
"additional": "broken_glass, glass_shards, shattered, spiderweb_cracks, cinematic_lighting, refraction, debris, explosive_impact"
},
"participants": {
"solo_focus": "true",
@@ -20,16 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/BrokenGlass_illusXL_Incrs_v1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "BrokenGlass_illusXL_Incrs_v1"
"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"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "1girl, 1boy, facesitting, pov, first-person_view, dominant_woman, submissive_man",
"head": "looking_down, looking_away, half-closed_eyes, seductive_expression, facial_expression",
"upper_body": "arms_behind_back, arched_back, upper_body_lean",
"lower_body": "buttocks, ass_focus, heavy_buttocks, spread_legs, kneeling, thighs_straddling",
"hands": "hands_on_thighs, hands_on_head",
"feet": "feet_together, curled_toes",
"additional": "extreme_close-up, squashed, muffling, soft_lighting, skin_texture"
},
"participants": {
"solo_focus": "true",
@@ -20,16 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Butt_smother_ag-000043.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Butt_smother_ag-000043"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "buttjob, intercrural_sex, sex_positions",
"head": "",
"upper_body": "bent_over",
"lower_body": "buttjob, genitals_between_buttocks",
"hands": "hands_on_own_thighs",
"feet": "",
"additional": "missionary_position"
},
"participants": {
"solo_focus": "true",
@@ -20,16 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/buttjob.safetensors",
"lora_weight": 1.0,
"lora_triggers": "buttjob"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,36 +2,23 @@
"action_id": "carwashv2",
"action_name": "Carwashv2",
"action": {
"full_body": "leaning forward, bending over car hood, dynamic scrubbing pose, wet body",
"head": "looking at viewer, smiling, wet hair sticking to face",
"eyes": "open, energetic, happy",
"arms": "stretched forward, one arm scrubbing, active motion",
"hands": "holding large yellow sponge, covered in soap suds",
"torso": "bent at waist, leaning forward, arched back, wet clothes clinging",
"pelvis": "hips pushed back, tilted",
"legs": "straddling or standing wide for stability",
"feet": "planted on wet pavement",
"additional": "soap bubbles, heavy foam on body and car, water splashing, car background"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "washing_vehicle, bending_over, suggestive_pose",
"head": "wet_hair",
"upper_body": "wet_clothes, breast_press, cleavage, breasts_on_glass",
"lower_body": "",
"hands": "holding_sponge, holding_hose",
"feet": "",
"additional": "car, motor_vehicle, soap_bubbles, wet, water_splashing"
},
"lora": {
"lora_name": "Illustrious/Poses/CarWashV2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "CarWashV2"
"lora_weight": 0.8,
"lora_triggers": "w4sh1n, w4sh0ut",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"car wash",
"holding sponge",
"leaning forward",
"bending over",
"wet",
"wet clothes",
"foam",
"bubbles",
"soapy water",
"scrubbing"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,34 +2,23 @@
"action_id": "cat_stretchill",
"action_name": "Cat Stretchill",
"action": {
"full_body": "character on all fours performing a deep cat stretch, kneeling with chest pressed to the floor and hips raised high",
"head": "chin resting on the floor, looking forward or to the side",
"eyes": "looking up or generally forward",
"arms": "fully extended forward along the ground",
"hands": "palms flat on the floor",
"torso": "deeply arched back, chest touching the ground",
"pelvis": "elevated high in the air, creating a steep angle with the spine",
"legs": "kneeling, bent at the knees",
"feet": "toes touching the ground",
"additional": "emphasizes the curve of the spine and flexibility"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "cat_stretch, pose, all_fours",
"head": "head_down, looking_at_viewer, closed_eyes",
"upper_body": "arched_back, outstretched_arms, chest_support, hands_on_ground",
"lower_body": "hips_up, buttocks_up, kneeling, knees_on_ground",
"hands": "palms_down",
"feet": "feet_up",
"additional": "trembling, cat_tail, cat_ears"
},
"lora": {
"lora_name": "Illustrious/Poses/cat_stretchILL.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cat_stretchILL"
"lora_weight": 0.7,
"lora_triggers": "stretching, cat stretch, downward dog, trembling",
"lora_weight_min": 0.7,
"lora_weight_max": 0.7
},
"tags": [
"all fours",
"ass up",
"kneeling",
"cat pose",
"stretching",
"arms extended",
"on floor",
"arched back"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -1,40 +0,0 @@
{
"action_id": "caught_masturbating_illustrious",
"action_name": "Caught Masturbating Illustrious",
"action": {
"full_body": "character receiving a sudden shock while in a private moment of self-pleasure, body freezing or jerking in surprise",
"head": "face flushed red with deep blush, expression of pure panic and embarrassment, mouth gaped open in a gasp",
"eyes": "wide-eyed stare, pupils dilated, locking eyes with the intruder (viewer)",
"arms": "shoulders tensed, one arm frantically trying to cover the chest or face, the other halted mid-motion near the crotch",
"hands": "one hand stopping mid-masturbation typically under skirt or inside panties, other hand gesturing to stop or hiding face",
"torso": "leaning back onto elbows or pillows, clothing disheveled, shirt lifted",
"pelvis": "hips exposed, underwear pulled down to thighs or ankles, vulva accessible",
"legs": "legs spread wide in an M-shape or V-shape, knees bent, trembling",
"feet": "toes curled tightly in tension",
"additional": "context of an intruded private bedroom, messy bed sheets, atmosphere of sudden discovery and shame"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
},
"lora": {
"lora_name": "Illustrious/Poses/Caught_Masturbating_ILLUSTRIOUS.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Caught_Masturbating_ILLUSTRIOUS"
},
"tags": [
"caught",
"masturbation",
"embarrassed",
"blush",
"surprised",
"open mouth",
"looking at viewer",
"panties down",
"hand in panties",
"skirt lift",
"sweat",
"legs spread",
"panic"
]
}

View File

@@ -2,33 +2,23 @@
"action_id": "charm_person_magic",
"action_name": "Charm Person Magic",
"action": {
"full_body": "standing, casting pose, dynamic angle, upper body focused",
"head": "facing viewer, head tilted, alluring expression, seductive smile",
"eyes": "looking at viewer, glowing eyes, heart-shaped pupils, hypnotic gaze",
"arms": "reaching towards viewer, one arm outstretched, hand near face",
"hands": "open palm, casting gesture, finger snaps, beckoning motion",
"torso": "facing forward, slight arch",
"pelvis": "hips swayed, weight shifted",
"legs": "standing, crossed legs",
"feet": "out of frame",
"additional": "pink magic, magical aura, sparkles, heart particles, glowing hands, casting spell, enchantment, visual effects"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "casting_spell, magic_circle, spell_casting",
"head": "smile, confident_expression, glowing_eyes, looking_at_viewer",
"upper_body": "outstretched_hand, reaching_towards_viewer, arms_up, upper_body",
"lower_body": "",
"hands": "open_hand, hand_gesture",
"feet": "",
"additional": "aura, light_particles, glittering, magical_energy"
},
"lora": {
"lora_name": "Illustrious/Poses/charm_person_magic.safetensors",
"lora_weight": 1.0,
"lora_triggers": "charm_person_magic"
"lora_weight": 0.7,
"lora_triggers": "charm_person_(magic), cham_aura",
"lora_weight_min": 0.7,
"lora_weight_max": 0.7
},
"tags": [
"magic",
"fantasy",
"enchantment",
"hypnotic",
"alluring",
"spellcasting",
"pink energy"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "cheekbulge",
"action_name": "Cheekbulge",
"action": {
"full_body": "kneeling, leaning forward, close-up focus on face",
"head": "visible cheek bulge, distorted cheek, stuffed mouth, mouth stretched",
"eyes": "looking up, upturned eyes, teary eyes, eye contact",
"arms": "reaching forward or resting on partner's legs",
"hands": "holding object, guiding, or resting on thighs",
"torso": "angled forward",
"pelvis": "neutral kneeling posture",
"legs": "kneeling, bent knees",
"feet": "toes pointing back",
"additional": "fellatio, oral sex, saliva, saliva trail, penis in mouth, face deformation"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "fellatio",
"head": "cheek_bulge, head_tilt, saliva, penis_in_mouth, fellatio, looking_up, mouth_fill",
"upper_body": "arms_behind_back, upper_body",
"lower_body": "kneeling, kneeling_position",
"hands": "hands_on_head",
"feet": "plantar_flexion",
"additional": "deepthroat, pov, penis, male_focus"
},
"lora": {
"lora_name": "Illustrious/Poses/cheekbulge.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cheekbulge"
"lora_triggers": "cheek bulge, male pov",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cheek bulge",
"stuffed mouth",
"fellatio",
"distorted face",
"oral sex",
"looking up",
"face deformation"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,38 +2,23 @@
"action_id": "chokehold",
"action_name": "Chokehold",
"action": {
"full_body": "dynamic combat pose, character positioning behind an opponent, executing a rear chokehold, two people grappling",
"head": "chin tucked tight, face pressed close to the opponent's head, intense or straining expression",
"eyes": "focused, narrowed in concentration",
"arms": "one arm wrapped tightly around the opponent's neck, the other arm locking the hold by gripping the bicep or clasping hands",
"hands": "clenching tight, gripping own bicep or locking fingers behind opponent's neck",
"torso": "chest pressed firmly against the opponent's back, leaning back slightly for leverage",
"pelvis": "pressed close to opponent's lower back",
"legs": "wrapped around the opponent's waist (body triangle or hooks in) or wide standing stance for stability",
"feet": "hooked inside opponent's thighs or planted firmly on the ground",
"additional": "struggle, tension, submission hold, restrictive motion, self-defense scenario"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "rear_naked_choke, from_behind, struggling, kneeling",
"head": "head_back, open_mouth, rolling_eyes, teardrops, veins, suffocation, air_hunger",
"upper_body": "arm_around_neck, struggling, grabbing_arm, posture_leaned_forward, arched_back",
"lower_body": "kneeling, bent_over, spread_legs",
"hands": "clenched_hands, struggling",
"feet": "barefoot, toes_curled",
"additional": "distress, blushing, drooling, saliva, sweat"
},
"lora": {
"lora_name": "Illustrious/Poses/chokehold.safetensors",
"lora_weight": 1.0,
"lora_triggers": "chokehold"
"lora_triggers": "choke hold",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"chokehold",
"grappling",
"rear naked choke",
"fighting",
"wrestling",
"martial arts",
"restraining",
"submission",
"headlock",
"strangle",
"duo",
"struggle"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "cleavageteasedwnsty_000008",
"action_name": "Cleavageteasedwnsty 000008",
"action": {
"full_body": "Medium shot or close-up focus on the upper body, character facing forward",
"head": "Looking directly at viewer, chin slightly tucked or tilted, expression varying from shy blush to seductive smile",
"eyes": "Eye contact, focused on the viewer",
"arms": "Elbows bent, forearms brought up towards the chest",
"hands": "Fingers grasping the hem of the collar or neckline of the top, pulling it downwards",
"torso": "Clothing fabric stretched taut, neckline pulled down low to reveal cleavage, emphasis on the chest area",
"pelvis": "Neutral position, often obscured in close-up shots",
"legs": "Neutral or out of frame",
"feet": "Out of frame",
"additional": "Fabric tension lines, revealing skin, seductive atmosphere"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "leaning_forward, sexually_suggestive",
"head": "looking_at_viewer, smile, blush, one_eye_closed, blue_eyes",
"upper_body": "arms_bent_at_elbows, cleavage, breasts_squeezed_together, areola_slip, bare_shoulders, collarbone",
"lower_body": "",
"hands": "hands_on_own_chest, pulling_down_clothes, adjusting_clothes",
"feet": "",
"additional": "teasing, undressing"
},
"lora": {
"lora_name": "Illustrious/Poses/CleavageTeaseDwnsty-000008.safetensors",
"lora_weight": 1.0,
"lora_triggers": "CleavageTeaseDwnsty-000008"
"lora_triggers": "pulling down own clothes, teasing",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cleavage",
"clothes pull",
"collar pull",
"shirt pull",
"looking at viewer",
"breasts",
"teasing",
"blush",
"holding clothes"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -1,33 +1,24 @@
{
"action": {
"base": "close-up, portrait, face_focus",
"head": "open_mouth, tongue, saliva, blush, looking_at_viewer, eyes_visible",
"upper_body": "",
"lower_body": "",
"hands": "",
"feet": "",
"additional": "cum, messy, fluids"
},
"action_id": "closeup_facial_illus",
"action_name": "Closeup Facial Illus",
"action": {
"full_body": "extreme close-up portrait shot framing the face and upper neck, macro focus",
"head": "facing directly forward, highly detailed facial micro-expressions, blush",
"eyes": "intense gaze, intricate iris details, looking at viewer, eyelashes focus",
"arms": "not visible",
"hands": "not visible",
"torso": "upper collarbone area only",
"pelvis": "not visible",
"legs": "not visible",
"feet": "not visible",
"additional": "illustrative style, shallow depth of field, soft lighting, detailed skin texture, vibrant colors"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
},
"lora": {
"lora_name": "Illustrious/Poses/Closeup_Facial_iLLus.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Closeup_Facial_iLLus"
"lora_triggers": "Closeup Facial",
"lora_weight": 1,
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"close-up",
"portrait",
"face focus",
"illustration",
"detailed eyes",
"macro"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "cof",
"action_name": "Cum on Figure",
"action": {
"full_body": "figurine, mini-girl",
"head": "",
"eyes": "",
"arms": "",
"base": "faux_figurine, miniature, cum_on_body",
"head": "cum_on_face",
"upper_body": "",
"lower_body": "",
"hands": "",
"torso": "",
"pelvis": "",
"legs": "",
"feet": "",
"additional": "cum, cum on body, excessive cum, cum on face, cum on breasts, cum on chest"
"additional": "cum, excessive_cum"
},
"participants": {
"solo_focus": "true",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/cof.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cof"
"lora_triggers": "cof",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"standing force",
"carry on front",
"carry",
"lifting",
"legs wrapped",
"straddling"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "duo, standing, lift_and_carry, straddling, legs_wrapped_around_waist, physical_contact",
"head": "head_thrown_back, blushing, panting, eyes_closed, half-closed_eyes, rolled_back_eyes, expressionless_pleasure",
"upper_body": "arms_around_neck, holding_buttocks, supporting_thighs, chest_to_chest, close_embrace",
"lower_body": "hips_touching, grinding, mating_press, pelvic_curtain, thighs_spread, lifted_legs",
"hands": "grabbing, gripping_back, squeezing",
"feet": "arched_toes, dangling_feet",
"additional": "sweat, motion_lines, intimate, sexual_intercourse, erotic"
},
"participants": {
"solo_focus": "false",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/cooperative_grinding.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cooperative_grinding"
"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"
]
"tags": {
"participants": "1boy 2girls",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "cooperativepaizuri",
"action_name": "Cooperativepaizuri",
"action": {
"full_body": "intimate sexual pose, two people interacting closely",
"head": "flushed face, drooling, tongue out, expression of pleasure or submission",
"eyes": "half-closed eyes, looking down, ahegao or heart-shaped pupils",
"arms": "arms supporting body weight or holding partner",
"hands": "recipient's hands grasping subject's breasts, squeezing breasts together towards center",
"torso": "exposed breasts, heavy cleavage, chest compressed by external hands",
"pelvis": "leaning forward, hips raised or straddling",
"legs": "kneeling, spread legs, or wrapping around partner",
"feet": "arched feet, toes curled",
"additional": "penis sliding between breasts, friction, lubrication, skin indentation"
},
"participants": {
"solo_focus": "false",
"orientation": "MFF"
"base": "cooperative_paizuri, 2girls, 1boy, sexual_activity, sex_position",
"head": "smile, open_mouth, facial, looking_at_partner, eyes_closed, flushed",
"upper_body": "arms_around_neck, breasts_between_breasts, large_breasts, cleavage, nipple_tweaking",
"lower_body": "penis, glans, erection, kneeling, straddling, cowgirl_position",
"hands": "holding_penis, touching_partner, reaching_for_partner",
"feet": "barefoot, toes_curled",
"additional": "pov, cum_on_body, fluids, (multiple_girls:1.2), erotic, masterpiece"
},
"lora": {
"lora_name": "Illustrious/Poses/cooperativepaizuri.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cooperativepaizuri"
"lora_triggers": "cooperative paizuri",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"paizuri",
"assisted paizuri",
"male hand",
"breast squeeze",
"titjob",
"penis between breasts",
"sexual act",
"cleavage",
"big breasts"
]
"tags": {
"participants": "2girls 1boy",
"nsfw": true
}
}

View File

@@ -2,34 +2,23 @@
"action_id": "covering_privates_illustrious_v1_0",
"action_name": "Covering Privates Illustrious V1 0",
"action": {
"full_body": "standing in a defensive, modest posture, body language expressing vulnerability",
"head": "tilted down or looking away in embarrassment",
"eyes": "averted gaze, shy or flustered expression",
"arms": "arms pulled in tight against the body",
"hands": "hands covering crotch, hand over breasts, covering self",
"torso": "slightly hunched forward or twisting away",
"pelvis": "hips slightly turned",
"legs": "legs pressed tightly together, thighs touching, knock-kneed",
"feet": "standing close together, possibly pigeon-toed",
"additional": "blush, steam or light rays (optional)"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "covering_genitals, covering_breasts",
"head": "blush, embarrassed, looking_at_viewer",
"upper_body": "arms_crossed, covering_breasts, upper_body",
"lower_body": "legs_together, hips",
"hands": "covering_crotch",
"feet": "standing",
"additional": "modesty"
},
"lora": {
"lora_name": "Illustrious/Poses/covering privates_illustrious_V1.0.safetensors",
"lora_weight": 1.0,
"lora_triggers": "covering privates_illustrious_V1.0"
"lora_triggers": "covering privates, covering crotch, covering breasts",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"covering self",
"embarrassed",
"blush",
"hands on crotch",
"arm across chest",
"modesty",
"legs together",
"shy"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "coveringownmouth_ill_v1",
"action_name": "Coveringownmouth Ill V1",
"action": {
"full_body": "character appearing sick or nauseous, posture slightly hunched forward",
"head": "pale complexion, sweatdrops on face, cheeks flushed or blue (if severe), grimacing",
"eyes": "tearing up, wincing, half-closed, or dilated pupils",
"arms": "one or both arms raised sharply towards the face",
"hands": "covering mouth, hand over mouth, fingers clutching face",
"torso": "leaning forward, tense shoulders usually associated with retching or coughing",
"pelvis": "neutral position or slightly bent forward",
"legs": "knees slightly bent or trembling",
"feet": "planted firmly or stumbling",
"additional": "motion lines indicating shaking, gloom lines, vomit (optional/extreme)"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "covering_own_mouth, solo",
"head": "hand_over_mouth",
"upper_body": "arm_raised",
"lower_body": "variable",
"hands": "palm_inward",
"feet": "variable",
"additional": "pensive, shy, embarrassed, surprise"
},
"lora": {
"lora_name": "Illustrious/Poses/CoveringOwnMouth_Ill_V1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "CoveringOwnMouth_Ill_V1"
"lora_triggers": "covering_own_mouth",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"covering mouth",
"hand over mouth",
"ill",
"sick",
"nausea",
"queasy",
"motion sickness",
"sweat",
"pale"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "straddling, pov, on_top, leaning_forward",
"head": "looking_at_viewer, intense_gaze, half-closed_eyes",
"upper_body": "arms_extended, breasts_pressed_against_viewer, breast_squish, cleavage",
"lower_body": "spread_legs, knees_up, straddling_partner",
"hands": "on_man's_chest, hand_on_partner",
"feet": "out_of_frame",
"additional": "breast_deformation, intimate, close-up, first-person_view"
},
"participants": {
"solo_focus": "false",
@@ -20,16 +17,12 @@
"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_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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "from_behind, bent_over, doggy_style, looking_back, pov",
"head": "looking_back, flushed, heavy_breathing, facial_expression, looking_at_viewer, tears, heart_shaped_pupils, eyes_rolled_back",
"upper_body": "arched_back, leaning_forward",
"lower_body": "hips_up, kneeling, legs_spread",
"hands": "hands_gripping_bed_sheets",
"feet": "curled_toes",
"additional": "sweat, messy_hair, man_in_background"
},
"participants": {
"solo_focus": "true",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Cuckold NTR-IL_NAI_PY.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Cuckold NTR-IL_NAI_PY"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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",
"base": "cum_bath, bathtub, viscous_white_liquid, partially_submerged",
"head": "wet_hair, blush, steam, half-closed_eyes, looking_at_viewer",
"upper_body": "nude, wet, cum_on_chest, cum_on_stomach",
"lower_body": "submerged, knees_up",
"hands": "dripping_cum",
"feet": "submerged",
"additional": "tiled bathroom background, steam, excessive cum, sticky texture, overflowing tub"
"additional": "bathroom, steam, excessive_cum, sticky"
},
"participants": {
"solo_focus": "true",
@@ -20,15 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/cum_bathIllustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cum_bathIllustrious"
"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"
]
"tags": {
"participants": "1girl solo",
"nsfw": true
}
}

View File

@@ -2,38 +2,23 @@
"action_id": "cum_in_cleavage_illustrious",
"action_name": "Cum In Cleavage Illustrious",
"action": {
"full_body": "close-up or cowboy shot focusing intensely on the upper body and chest area",
"head": "flushed cheeks, heavy breathing, mouth slightly open, expression of embarrassment or pleasure, saliva trail",
"eyes": "half-closed, heart-shaped pupils (optional), looking down at chest or shyly at viewer",
"arms": "arms bent brings hands to chest level",
"hands": "hands squeezing breasts together to deepen cleavage, or pulling clothing aside to reveal the mess",
"torso": "large breasts pressed together, deep cleavage filled with pooling white seminal fluid, cum dripping down skin, messy upper body",
"pelvis": "obscured or hips visible in background",
"legs": "obscured",
"feet": "out of frame",
"additional": "high viscosity liquid detail, shiny skin, wet texture, after sex atmosphere"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "upper_body, focus_on_breasts, intimate",
"head": "blush, open_mouth, expressive_eyes, looking_at_viewer, heavy_lidded_eyes",
"upper_body": "arms_bent, breasts, cleavage, cum_in_cleavage, bare_breasts, liquid_in_cleavage",
"lower_body": "",
"hands": "hands_on_breasts, squeezing_breasts",
"feet": "",
"additional": "messy, erotic, semen, cum_on_skin"
},
"lora": {
"lora_name": "Illustrious/Poses/cum_in_cleavage_illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cum_in_cleavage_illustrious"
"lora_triggers": "cum_in_cleavage, holding own breasts",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cum",
"cum in cleavage",
"cum on breasts",
"semen",
"huge breasts",
"cleavage",
"messy",
"sticky",
"paizuri",
"sex act",
"illustration",
"nsfw"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "front_view, focus_on_midsection, semi-transparent_body, translucent_skin",
"head": "flustered, open_mouth, heavy_blush, tongue_out, eyes_rolled_back, heart-shaped_pupils",
"upper_body": "bent_arms, hands_on_stomach, visible_internal_cum, stomach_fill, distended_belly",
"lower_body": "glowing, slime_texture, dripping, thighs_together",
"hands": "cupping_stomach",
"feet": "standing, melting",
"additional": "internal_cum, x-ray, cross-section, viscous_liquid, bioluminescence"
},
"participants": {
"solo_focus": "true",
@@ -20,16 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Cum_inside_slime_v0.2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Cum_inside_slime_v0.2"
"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"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "cum_shot",
"action_name": "Cum Shot",
"action": {
"full_body": "close-up, portrait, upper body focus, kneeling or sitting",
"head": "mouth open, tongue out, blushing, sweating, cum on face, cum in mouth, semen on hair, messy hair",
"eyes": "half-closed eyes, rolling eyes, heart-shaped pupils, looking at viewer, glazed eyes",
"arms": "arms relaxed or hands framing face",
"hands": "hands on cheeks, making peace sign, or wiping face",
"torso": "exposed upper body, wet skin, cleavage",
"pelvis": "obscured or out of frame",
"legs": "kneeling or out of frame",
"feet": "out of frame",
"additional": "white liquid, splashing, sticky texture, aftermath, detailed fluids, high contrast"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "cum_shot, cum, from_above",
"head": "cum_on_face, facial, cum_in_eye, cum_in_mouth, open_mouth, messy_face",
"upper_body": "cum_on_breasts, cum_on_body, sticky",
"lower_body": "",
"hands": "",
"feet": "",
"additional": "white_fluid, dripping, shiny_skin, fluid_on_skin"
},
"lora": {
"lora_name": "Illustrious/Poses/cum_shot.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cum_shot"
"lora_weight": 0.8,
"lora_triggers": "cum, facial, ejaculation",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"cum_shot",
"facial",
"semen",
"cum",
"bukkake",
"aftermath",
"nsfw",
"liquid",
"messy"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "1girl 1girl, duo, close embrace, intimate, body contact",
"head": "kissing, deep kiss, open mouth, closed eyes, blush",
"upper_body": "arms around neck, arms around waist, chests touching, leaning in",
"lower_body": "leg lock, standing, pressing.",
"hands": "face_grabbing, hand in hair, touching partner",
"feet": "barefoot, grounded",
"additional": "cum_swap, spit_take, saliva, seminal_fluid, mess, liquid_bridge"
},
"participants": {
"solo_focus": "false",
@@ -20,18 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Cum_Swap.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Cum_Swap"
"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"
]
"tags": {
"participants": "1girl 1girl",
"nsfw": true
}
}

View File

@@ -0,0 +1,24 @@
{
"action_id": "cumblastfacial",
"action_name": "Cumblastfacial",
"action": {
"base": "solo, ejaculation, cumshot",
"head": "facial, head_tilt, looking_up, cum_in_eye, cum_on_face, covered_in_cum",
"upper_body": "arms_at_side, cum_on_upper_body, wet_clothes",
"lower_body": "standing",
"hands": "hands_at_side",
"feet": "standing",
"additional": "projectile_cum, excessive_cum, semen, cum_on_hair"
},
"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": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "cuminhands",
"action_name": "Cuminhands",
"action": {
"full_body": "upper body focus, character presenting cupped hands towards the viewer",
"head": "looking down at hands or looking at viewer, expression of embarrassment or lewd satisfaction, blushing",
"eyes": "half-closed or wide open, focused on the hands",
"arms": "elbows bent, forearms brought together in front of the chest or stomach",
"hands": "cupped hands, palms facing up, fingers tight together, holding white liquid, messy hands",
"torso": "posture slightly hunched or leaning forward to show hands",
"pelvis": "stationary",
"legs": "kneeling or standing",
"feet": "planted",
"additional": "white liquid, seminal fluid, dripping between fingers, sticky texture, high contrast fluids"
},
"participants": {
"solo_focus": "true",
"orientation": "F"
"base": "after_fellatio, ejaculation",
"head": "facial, cum_on_face, cum_in_mouth, cum_string, looking_at_hands",
"upper_body": "arms_bent, upper_body",
"lower_body": "",
"hands": "cupping_hands, cum_on_hands",
"feet": "",
"additional": "excessive_cum"
},
"lora": {
"lora_name": "Illustrious/Poses/cuminhands.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cuminhands"
"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 in hands",
"cupped hands",
"holding cum",
"cum",
"bodily fluids",
"messy",
"palms up",
"sticky",
"white liquid"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "close-up, high_angle, macro",
"head": "head_back, mouth_open, tongue_out, face_covered_in_cum, closed_eyes, rolling_eyes, ecstatic_expression, wet_eyelashes",
"upper_body": "bare_shoulders, cleavage",
"lower_body": "out_of_frame",
"hands": "out_of_frame",
"feet": "out_of_frame",
"additional": "cum_on_face, facial, seminal_fluid, cum_drip, dynamic_angle, splashing, messy, thick_liquid"
},
"participants": {
"solo_focus": "true",
@@ -20,15 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/cumshot.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cumshot"
"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"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "kneeling, leaning_back",
"head": "force_feeding, tube, head_tilted_back, mouth_open, tongue_out, facial_fluids, looking_up, eyes_rolled_back",
"upper_body": "arms_raised, holding_object, chest_pushed_forward, fluids_dripping, torso_drenched",
"lower_body": "kneeling, legs_together",
"hands": "hands_on_object",
"feet": "toes, feet_together",
"additional": "clear_tube, cum, white_viscous_liquid, messy, splatter, overflow"
},
"participants": {
"solo_focus": "true",
@@ -20,17 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/cumtube-000035.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cumtube-000035"
"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"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "cunnilingus_on_back_illustriousxl_lora_nochekaiser",
"action_name": "Cunnilingus On Back Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "lying on back, receiving oral sex, partner between legs",
"head": "head tilted back, expression of pleasure, blushing, heavy breathing, mouth open",
"eyes": "eyes closed, rolling eyes, or looking down at partner",
"arms": "arms resting on bed or reaching towards partner",
"hands": "gripping bedsheets, clutching pillow, or holding partner's head",
"torso": "arched back, chest heaving",
"pelvis": "hips lifted, crotch exposed to partner",
"legs": "spread legs, legs apart, knees bent, m-legs",
"feet": "toes curled, feet on bed",
"additional": "partner's face in crotch, tongue, saliva, sexual act, intimate focus"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "lying, on_back, spread_legs, nude",
"head": "torogao, blush, sweat, half-closed_eyes, tongue_out",
"upper_body": "navel, nipples, sweat",
"lower_body": "cunnilingus, vulva, spread_legs, thighs",
"hands": "hands_on_chest",
"feet": "",
"additional": "on_bed, pillow, profile"
},
"lora": {
"lora_name": "Illustrious/Poses/cunnilingus-on-back-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "cunnilingus-on-back-illustriousxl-lora-nochekaiser"
"lora_triggers": "cunnilingus on back",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cunnilingus",
"oral sex",
"lying on back",
"spread legs",
"pleasure",
"sex",
"NSFW"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,32 +2,23 @@
"action_id": "danglinglegs",
"action_name": "Danglinglegs",
"action": {
"full_body": "holding waist, dangling legs, size difference",
"head": "facing forward or looking down",
"eyes": "relaxed gaze",
"arms": "resting on lap or gripping the edge of the seat",
"hands": "placed on thighs or holding on",
"torso": "upright sitting posture",
"pelvis": "seated on edge",
"legs": "dangling in the air, knees bent at edge, feet not touching the floor",
"feet": "relaxed, hanging loose",
"additional": "sitting on ledge, sitting on desk, high stool"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "suspended_congress, lifting_person, standing_sex, sex_from_behind",
"head": "clenched_teeth, head_back, eyes_closed",
"upper_body": "arms_around_neck, body_lifted, breasts_pressed_against_body",
"lower_body": "penis_in_vagina, hips_held, legs_apart, feet_off_ground",
"hands": "hands_on_shoulders, grabbing_shoulders",
"feet": "toes_curled, barefoot",
"additional": "size_difference, larger_male, orgasm, sweat"
},
"lora": {
"lora_name": "Illustrious/Poses/danglinglegs.safetensors",
"lora_weight": 1.0,
"lora_triggers": "danglinglegs"
"lora_triggers": "dangling legs, lifted by penis, suspended on penis",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"dangling legs",
"sitting",
"feet off ground",
"from below",
"ledge",
"high place"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "1girl, 1boy, duo, kissing, deep_kiss, french_kiss, romantic, passionate, intimacy",
"head": "eyes_closed, open_mouth, tongue, tongue_touching, flushed, blushing, tilted_head",
"upper_body": "embrace, hugging, holding_each_other, arms_around_neck, arms_around_waist, chest_to_chest",
"lower_body": "hips_pressed_together, standing_close",
"hands": "cupping_face, hands_in_hair, gripping, back_embrace",
"feet": "tiptoes, standing",
"additional": "saliva, dripping_saliva, saliva_string, tongue_kiss"
},
"participants": {
"solo_focus": "true",
@@ -20,22 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Deep_Kiss-000007.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Deep_Kiss-000007"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,39 +2,23 @@
"action_id": "deepthroat_ponytailhandle_anime_il_v1",
"action_name": "Deepthroat Ponytailhandle Anime Il V1",
"action": {
"full_body": "kneeling, performing deepthroat fellatio, body angled towards partner",
"head": "tilted back forcedly, mouth stretched wide, gagging, face flushed, hair pulled taught",
"eyes": "tearing up, rolled back, looking up, streaming tears",
"arms": "reaching forward, holding onto partner's legs for support",
"hands": "grasping thighs, fingers digging in",
"torso": "leaning forward, back slightly arched",
"pelvis": "kneeling position",
"legs": "knees on ground, shins flat",
"feet": "toes curled tightly",
"additional": "saliva trails, heavy breathing, hand grabbing ponytail, penis in mouth, irrumatio"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "irrumatio, fellatio, 1boy, 1girl, duo, deepthroat",
"head": "forced, head_back, mouth_open, saliva, drooling, crying, tears, expressionless, wide_eyes",
"upper_body": "arms_at_sides, upper_body",
"lower_body": "",
"hands": "hands_on_hair, grabbing_hair",
"feet": "",
"additional": "penis, ponytail, pov"
},
"lora": {
"lora_name": "Illustrious/Poses/Deepthroat_PonytailHandle_Anime_IL_V1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Deepthroat_PonytailHandle_Anime_IL_V1"
"lora_triggers": "deepthroat_ponytailhandle, grabbing another's hair, ponytail",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"deepthroat",
"fellatio",
"oral sex",
"hair pull",
"grabbing hair",
"ponytail",
"kneeling",
"gagging",
"irrumatio",
"tears",
"saliva",
"submissive",
"forced oral"
]
"tags": {
"participants": "1boy 1girl",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "kneeling, on_all_fours, orz, slumped, defeat, dogeza, sex_from_behind",
"head": "bowed_head, looking_down, shadowed_face, crying, tears, empty_eyes, closed_eyes, anguish",
"upper_body": "arms_on_ground, hunched_back, leaning_forward",
"lower_body": "hips_up, kneeling, on_knees",
"hands": "hands_on_ground, palms_down, clenched_hand",
"feet": "barefoot, curled_toes",
"additional": "gloom, depression, dramatic_shadows, humiliation, emotional_breakdown"
},
"participants": {
"solo_focus": "true",
@@ -20,18 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Defeat NTR-IL_NAI_PY.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Defeat NTR-IL_NAI_PY"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "suspension, hanging, bondage, arms_up, limp, dangling, defeated, total_submission",
"head": "head_down, hair_over_eyes, eyes_closed, unconscious, expressionless",
"upper_body": "arms_above_head, stretched_arms, chest_up, ribcage",
"lower_body": "limp_legs, dangling_legs, sagging_hips",
"hands": "bound, wrists_bound, handcuffs",
"feet": "barefoot, dangling",
"additional": "ropes, chains, dungeon, interior"
},
"participants": {
"solo_focus": "true",
@@ -20,17 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Defeat suspension-IL_NAI_PY.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Defeat suspension-IL_NAI_PY"
"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"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "threesome, double penetration, oral, vaginal, spitroast, suspended, dangling_legs",
"head": "head_back, mouth_open, tongue_out, exhausted, eyes_rolled_back, semi-closed_eyes, ahegao",
"upper_body": "arms_bent, arched_back, sweaty",
"lower_body": "ass_up, kneeling, spread_legs",
"hands": "gripping, clenching",
"feet": "toes_curled",
"additional": "messy_hair, trembling, heavy_breathing, defeated"
},
"participants": {
"solo_focus": "true",
@@ -20,20 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Defeatspitroast_Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Defeatspitroast_Illustrious"
"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"
]
"tags": {
"participants": "1girl 2boys",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "1girl, hetero, doggystyle, male_focused, (solo_focus:1.2)",
"head": "lying, stomach, on_stomach, pillow, looking_at_phone, bored, uninterested, expressionless",
"upper_body": "lying, stomach",
"lower_body": "doggystyle",
"hands": "holding_phone",
"feet": "",
"additional": ""
},
"participants": {
"solo_focus": "true",
@@ -20,17 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Disinterested_Sex___Bored_Female.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Disinterested_Sex___Bored_Female"
"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"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "glass_box, confinement, trapped, human_exhibit, enclosure",
"head": "looking_at_viewer, open_mouth, empty_eyes, expressionless",
"upper_body": "bound, arms_behind_back, arms_pressed_against_glass, restricted_movement",
"lower_body": "kneeling, standing",
"hands": "hands_pressed_against_glass, bound_hands",
"feet": "barefoot",
"additional": "reflections, glass, transparent_wall, exhibit, bondage, bdsm"
},
"participants": {
"solo_focus": "true",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/display_case_bdsm_illus.safetensors",
"lora_weight": 1.0,
"lora_triggers": "display_case_bdsm_illus"
"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"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "standing, action_figure, encased, display_box, transparent_packaging",
"head": "neutral_expression, face_forward, fixed_gaze, doll_joint",
"upper_body": "rigid_posture, standing_stiffly, front_view",
"lower_body": "standing_straight, feet_together",
"hands": "hands_at_sides, open_palm, pressing_against_glass",
"feet": "flat_feet",
"additional": "cardboard_backing, toy_packaging, barcode, reflections_on_glass, sealed_box, plastic_container"
},
"participants": {
"solo_focus": "true",
@@ -20,17 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/display_case_illustr.safetensors",
"lora_weight": 1.0,
"lora_triggers": "display_case_illustr"
"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"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,32 +2,23 @@
"action_id": "doggydoublefingering",
"action_name": "Doggydoublefingering",
"action": {
"full_body": "all fours, doggy style, kneeling, presenting rear, from behind",
"head": "looking back, looking at viewer, blushing face",
"eyes": "half-closed eyes, expressionless or aroused",
"arms": "reaching back between legs, reaching towards crotch",
"hands": "fingering, double fingering, both hands used, spreading vaginal lips, manipulating genitals",
"torso": "arched back, curvature of spine",
"pelvis": "hips raised, presenting pussy, exposed gluteal crease",
"legs": "knees bent on ground, thighs spread",
"feet": "toes curled, relaxing instep",
"additional": "pussy juice, focus on buttocks, focus on genitals"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "3girls, group_sex, doggystyle, fingering, multiple_females_fingered",
"head": "blushing, sweating, facial_expression, eyes_closed, looking_at_viewer",
"upper_body": "leaning_forward, upper_body_focus",
"lower_body": "all_fours, spread_legs, hips_up",
"hands": "arms_extended, fingers_touching_surface",
"feet": "kneeling, soles_of_feet",
"additional": "male_focus, male_fingering, multiple_females, group_sex, vaginal_penetration, doggystyle_from_behind, shared_pleasure"
},
"lora": {
"lora_name": "Illustrious/Poses/DoggyDoubleFingering.safetensors",
"lora_weight": 1.0,
"lora_triggers": "DoggyDoubleFingering"
"lora_triggers": "doggydoublefingerfront, from front, 3girls, multiple girls, fingering, sex from behind, doggystyle",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"masturbation",
"solo",
"ass focus",
"pussy",
"kneeling",
"NSFW"
]
"tags": {
"participants": "3girls, 1boy",
"nsfw": true
}
}

View File

@@ -2,36 +2,23 @@
"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 over a table or surface, bent at the waist",
"head": "face submerged in a bowl, head bent downward",
"eyes": "closed or obscured by liquid",
"arms": "resting on the surface to support weight or holding the bowl",
"hands": "palms flat on table or gripping the sides of the bowl",
"torso": "leaned forward, horizontal alignment",
"pelvis": "pushed back",
"legs": "standing or kneeling",
"feet": "resting on floor",
"additional": "cum pool, large bowl filled with viscous white liquid, semen, messy, splashing, dripping"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "kneeling, all_fours, head_down, humiliation, close-up, from_below, solo",
"head": "face_down, cum_in_mouth, cum_bubble, crying, closed_eyes",
"upper_body": "",
"lower_body": "",
"hands": "clutching_head",
"feet": "",
"additional": "bowl, cum, drowning, air_bubble"
},
"lora": {
"lora_name": "Illustrious/Poses/Dunking_face_in_a_bowl_of_cum_r1.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Dunking_face_in_a_bowl_of_cum_r1"
"lora_triggers": "gokkun, cum bowl",
"lora_weight_min": 0.4,
"lora_weight_max": 0.6
},
"tags": [
"dunking face",
"face in bowl",
"bowl of cum",
"semen",
"messy",
"submerged",
"leaning forward",
"bent over",
"white liquid",
"cum"
]
"tags": {
"participants": "1girl",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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"
"base": "duo, 1boy, 1girl, male_lifting_female, standing, holding, sexual_position, intercourse",
"head": "looking_at_each_other, head_back, closed_eyes",
"upper_body": "arms_around_neck, chest_to_chest, close_embrace, torso_embrace",
"lower_body": "connected, groins_touching, legs_around_male, legs_up, m_legs, bent_knees",
"hands": "hands_on_thighs, gripping_thighs, holding_legs",
"feet": "dangling_feet, toes_curled",
"additional": "strength, suspension, height_difference, lifting_person"
},
"participants": {
"solo_focus": "true",
@@ -20,16 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/ekiben_ill-10.safetensors",
"lora_weight": 1.0,
"lora_triggers": "ekiben_ill-10"
"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"
]
"tags": {
"participants": "1boy, 1girl, duo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"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."
"base": "standing, arms_at_sides, upper_body, elbow_squeeze, pushing_together",
"head": "looking_at_viewer, shy, teasing",
"upper_body": "arms_pressed_against_body, cleavage, breast_compression, arms_crossed_under_breasts",
"lower_body": "standing, standing_on_one_leg, knock-kneed",
"hands": "hands_together, hand_on_torso",
"feet": "barefoot, shoes",
"additional": "tight_clothes"
},
"participants": {
"solo_focus": "true",
@@ -20,13 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Elbow_Squeeze__Concept_Lora-000008.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Elbow_Squeeze__Concept_Lora-000008"
"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"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,36 +2,23 @@
"action_id": "extreme_sex_v1_0_illustriousxl",
"action_name": "Extreme Sex V1 0 Illustriousxl",
"action": {
"full_body": "lying on back, mating press, legs lifted high, dynamic angle, foreshortening",
"head": "head leaning back, heavy blush, sweat, mouth open, tongue out, intense expression",
"eyes": "rolling eyes, heart-shaped pupils, eyelashes",
"arms": "arms reaching forward, grabbing sheets, or holding own legs",
"hands": "clenched hands, grabbing",
"torso": "arched back, chest exposed, sweat on skin",
"pelvis": "hips lifted, pelvis tilted upwards",
"legs": "legs spread, m-legs, legs folded towards torso, knees bent",
"feet": "feet in air, toes curled, plantar view",
"additional": "motion lines, shaking, bodily fluids, bed sheet, pillow"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "sexual_activity, sex, multiple_positions",
"head": "ahegao, rolling_eyes, head_back, mouth_open, drooling, saliva_trail",
"upper_body": "sweaty, flushed, messy_hair, heavy_breathing",
"lower_body": "legs_spread, wrapped_around_partner",
"hands": "hands_on_partner, gripping",
"feet": "curled_toes",
"additional": "passionate, climax, facial_flush, intense_expression"
},
"lora": {
"lora_name": "Illustrious/Poses/extreme-sex-v1.0-illustriousxl.safetensors",
"lora_weight": 1.0,
"lora_triggers": "extreme-sex-v1.0-illustriousxl"
"lora_triggers": "extreme sex",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"mating press",
"lying on back",
"legs up",
"open mouth",
"blush",
"sweat",
"m-legs",
"intense",
"ahegao",
"explicit"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,35 +2,23 @@
"action_id": "face_grab_illustrious",
"action_name": "Face Grab Illustrious",
"action": {
"full_body": "medium shot or close up of a character having their face grabbed by a hand",
"head": "face obscured by hand, cheeks squeezed, skin indentation from fingers, annoyed or pained expression",
"eyes": "squinting or partially covered by fingers",
"arms": "raised upwards attempting to pry the hand away",
"hands": "holding the wrist or forearm of the grabbing hand",
"torso": "upper body slightly leaned back from the force of the grab",
"pelvis": "neutral alignment",
"legs": "standing still",
"feet": "planted firmly",
"additional": "the grabbing hand usually belongs to another person or is an off-screen entity, commonly referred to as the iron claw technique"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "pov, first-person_view, close-up, grabbing_another's_face",
"head": "forced_expression, open_mouth, tongue_out, pout, crying, streaming_tears, looking_at_viewer",
"upper_body": "upper_body, nude, partially_clad",
"lower_body": "out_of_frame",
"hands": "pov_hands, grabbing_face",
"feet": "out_of_frame",
"additional": "after_fellatio, cum_on_tongue, cum_on_face"
},
"lora": {
"lora_name": "Illustrious/Poses/face_grab_illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "face_grab_illustrious"
"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": [
"face grab",
"iron claw",
"hand on face",
"hand over face",
"skin indentation",
"squeezed face",
"fingers on face",
"forced",
"cheek pinch"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "facesit_08",
"action_name": "Facesit 08",
"action": {
"full_body": "POV perspective from below, character straddling the camera/viewer in a squatting or kneeling position",
"head": "tilted downwards, looking directly at the viewer",
"eyes": "gazing down, maintaining eye contact",
"arms": "resting comfortably",
"hands": "placed on own thighs or knees for support",
"torso": "foreshortened from below, leaning slightly forward",
"pelvis": "positioned directly over the camera lens, dominating the frame",
"legs": "spread wide, knees bent deeply, thighs framing the view",
"feet": "resting on the surface on either side of the viewpoint",
"additional": "extreme low angle, forced perspective, intimate proximity"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "sitting_on_face, cunnilingus, oral",
"head": "looking_at_viewer, looking_down",
"upper_body": "hand_on_head, nude, close-up",
"lower_body": "pussy, spread_legs, vaginal_fluids, clitoris",
"hands": "hands_on_head",
"feet": "out_of_frame",
"additional": "yuri, female_pov, 2girls"
},
"lora": {
"lora_name": "Illustrious/Poses/facesit-08.safetensors",
"lora_weight": 1.0,
"lora_triggers": "facesit-08"
"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": [
"facesitting",
"pov",
"femdom",
"squatting",
"looking down",
"low angle",
"thighs"
]
"tags": {
"participants": "2girls",
"nsfw": true
}
}

View File

@@ -1,37 +0,0 @@
{
"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"
},
"tags": [
"bukkake",
"facial",
"cum on face",
"semen",
"messy",
"white liquid",
"cum in eyes",
"cum in mouth",
"splatter",
"after sex"
]
}

View File

@@ -0,0 +1,24 @@
{
"action_id": "fellatio_from_below_illustriousxl_lora_nochekaiser",
"action_name": "Fellatio From Below Illustriousxl Lora Nochekaiser",
"action": {
"base": "fellatio, from_below, squatting",
"head": "looking_at_viewer, open_mouth, looking_down",
"upper_body": "nude, navel, breasts, nipples",
"lower_body": "nude, pussy, spread_legs, bent_legs",
"hands": "hands_on_ground",
"feet": "barefoot",
"additional": "penis, testicles, fellatio, 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": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,37 +2,23 @@
"action_id": "fellatio_on_couch_illustriousxl_lora_nochekaiser",
"action_name": "Fellatio On Couch Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "kneeling on couch, leaning forward, performing fellatio, sexual act, duo focus",
"head": "face in crotch, mouth open, sucking, cheeks hollowed, saliva trail",
"eyes": "looking up, half-closed eyes, eye contact, ahegao",
"arms": "reaching forward, holding partner's thighs, resting on cushions",
"hands": "stroking penis, gripping legs, guiding head",
"torso": "leaning forward, bent over, arched back",
"pelvis": "kneeling, hips pushed back",
"legs": "kneeling on sofa, spread slightly, knees bent",
"feet": "toes curled, resting on upholstery, plantar flexion",
"additional": "indoor, living room, sofa, couch, fabric texture, motion lines"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "fellatio, oral, sitting, on_couch, sex, hetero",
"head": "blush, sweat, head_down, eyes_closed, looking_down",
"upper_body": "nude, breasts, breast_press, leaning_forward",
"lower_body": "sitting, spread_legs, nude",
"hands": "hands_on_legs",
"feet": "feet_on_floor",
"additional": "couch, penis, testicles, focus_on_penis"
},
"lora": {
"lora_name": "Illustrious/Poses/fellatio-on-couch-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "fellatio-on-couch-illustriousxl-lora-nochekaiser"
"lora_triggers": "fellatio on couch, hetero, penis, oral, sitting, fellatio, testicles, blush, couch, sweat, breast press, nipples, completely nude, uncensored",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"fellatio",
"oral sex",
"on couch",
"kneeling",
"sofa",
"penis",
"cum",
"saliva",
"indoor",
"sex",
"blowjob"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "femdom_face_between_breasts",
"action_name": "Femdom Face Between Breasts",
"action": {
"full_body": "upper body view, female character pressing a person's face into her chest",
"head": "looking down, chin tucked, dominant expression",
"eyes": "narrowed, looking down at the person",
"arms": "wrapping around the person's head, holding head firmly",
"hands": "fingers tangled in hair, or pressing the back of the head",
"torso": "chest pushed forward, breasts pressed tightly together around a face",
"pelvis": "neutral alignment",
"legs": "standing or sitting",
"feet": "not visible",
"additional": "male face buried in breasts, squished face, soft lighting, close-up"
"base": "upper_body, 1girl, 1boy, couple, breast_smother",
"head": "looking_down, dominant, smirk, narrowed_eyes, looking_at_viewer",
"upper_body": "arms_around_head, chest, breasts_pressed_together, cleavage, breast_smother",
"lower_body": "standing",
"hands": "hands_in_hair, holding_head",
"feet": "",
"additional": "face_buried_in_breasts, squished_face, dominance, sexual_intercourse, suggestive"
},
"participants": {
"solo_focus": "true",
@@ -20,15 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/femdom_face_between_breasts.safetensors",
"lora_weight": 1.0,
"lora_triggers": "femdom_face_between_breasts"
"lora_triggers": "femdom_face_between_breasts",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"breast smother",
"buried in breasts",
"face between breasts",
"facesitting",
"femdom",
"big breasts",
"cleavage"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,36 +2,23 @@
"action_id": "femdom_held_down_illust",
"action_name": "Femdom Held Down Illust",
"action": {
"full_body": "dominant character straddling someone, pinning them to the surface, assertive posture, on top",
"head": "looking down at viewer (pov), dominance expression, chin tilted down",
"eyes": "narrowed, intense eye contact, looking down",
"arms": "extended downwards, locked elbows, exerting pressure",
"hands": "forcefully holding wrists against the surface, pinning hands, wrist grab",
"torso": "leaning forward slightly, arching back, looming over",
"pelvis": "straddling the subject's waist or chest, hips grounded",
"legs": "knees bent, kneeling on either side of the subject, thighs active",
"feet": "kneeling position, toes touching the ground or bed",
"additional": "pov, from below, power dynamic, submission, floor or bed background"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "straddling, pin, 1girl, 1boy, lying_on_back",
"head": "looking_down, looking_at_viewer, intense_expression",
"upper_body": "arms_above_head, holding_wrists, dominant_female",
"lower_body": "spread_legs, crotch_straddle",
"hands": "hands_holding, grasping, clenched_hand",
"feet": "barefoot",
"additional": "femdom, power_dynamic, struggle, restraint"
},
"lora": {
"lora_name": "Illustrious/Poses/Femdom_Held_Down_Illust.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Femdom_Held_Down_Illust"
"lora_weight": 0.8,
"lora_triggers": "fdom_held",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"femdom",
"held down",
"pinning",
"straddling",
"on top",
"looking down",
"pov",
"from below",
"wrist grab",
"dominance"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,34 +2,23 @@
"action_id": "fertilization_illustriousxl_lora_nochekaiser",
"action_name": "Fertilization Illustriousxl Lora Nochekaiser",
"action": {
"full_body": "lying on back, legs spread, internal view, cross-section, x-ray view of abdomen",
"head": "head resting on pillow, heavy breathing, blushing",
"eyes": "half-closed eyes, rolled back eyes or heart-shaped pupils",
"arms": "arms resting at sides or holding bed sheets",
"hands": "hands clutching sheets or resting on stomach",
"torso": "exposed tummy, navel, transparent skin effect",
"pelvis": "focus on womb, uterus visible, internal female anatomy",
"legs": "legs spread wide, m-legs, knees up",
"feet": "toes curled",
"additional": "visualized fertilization process, sperm, egg, cum inside, glowing internal organs, detailed uterus, biology diagram style"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "sex, vaginal, on_bed, nude, cowboy_shot, ejaculation",
"head": "ahegao, flushed, open_mouth, head_back, rolled_eyes, half-closed_eyes",
"upper_body": "nude, nipples, navel, arms_at_sides",
"lower_body": "pussy, cum_in_pussy, internal_cumshot, penis, hetero, spread_legs, legs_up",
"hands": "clenched_hands",
"feet": "bare_feet",
"additional": "cross-section, fertilization, pregnancy, uterus, ovum, sperm_cell, ovaries"
},
"lora": {
"lora_name": "Illustrious/Poses/fertilization-illustriousxl-lora-nochekaiser.safetensors",
"lora_weight": 1.0,
"lora_triggers": "fertilization-illustriousxl-lora-nochekaiser"
"lora_triggers": "fertilization, ovum, impregnation, sperm cell, cross-section, cum in pussy, internal cumshot, uterus, cum, sex, vaginal, ovaries, penis, hetero, ejaculation",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"fertilization",
"internal view",
"cross-section",
"x-ray",
"womb",
"cum inside",
"uterus",
"impregnation"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,38 +2,23 @@
"action_id": "fff_imminent_masturbation",
"action_name": "Fff Imminent Masturbation",
"action": {
"full_body": "lying on back, reclining mostly nude, body tense with anticipation",
"head": "tilted back slightly, chin up, face flushed",
"eyes": "half-closed, heavy-lidded, lustful gaze",
"arms": "reaching downwards along the body",
"hands": "hovering near genitals, fingers spreading, one hand grasping thigh, one hand reaching into panties or towards crotch",
"torso": "arched back, chest heaving",
"pelvis": "tilted upward, hips lifted slightly",
"legs": "spread wide, knees bent and falling outward (M-legs)",
"feet": "toes curled",
"additional": "sweaty skin, disheveled clothing, underwear pulled aside, messy sheets"
},
"participants": {
"solo_focus": "false",
"orientation": "FFF"
"base": "hand_on_crotch, trembling, legs_together, knock-kneed, blushing, arousal",
"head": "heavy_breathing, sweat, looking_down, narrowed_eyes, half-closed_eyes, dilated_pupils, flushed",
"upper_body": "arched_back, squirming, knees_together",
"lower_body": "hips_forward, standing, legs_together",
"hands": "hand_on_crotch, grasping, squeezing, rubbing_crotch",
"feet": "standing, feet_together",
"additional": "clothed_masturbation, urgency, arousal, intimate_touch"
},
"lora": {
"lora_name": "Illustrious/Poses/FFF_imminent_masturbation.safetensors",
"lora_weight": 1.0,
"lora_triggers": "FFF_imminent_masturbation"
"lora_triggers": "FFF_grabbing_own_crotch, trembling, sweat, breath, imminent_masturbation",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"solo",
"female",
"imminent masturbation",
"hand near crotch",
"hand in panties",
"fingering",
"spread legs",
"lying",
"on bed",
"aroused",
"blush",
"nsfw"
]
"tags": {
"participants": "solo",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "ffm3some_footjob_efeme3ftfe_il_1475115",
"action_name": "Ffm3Some Footjob Efeme3Ftfe Il 1475115",
"action": {
"full_body": "FFM threesome scenario, one male lying on back receiving stimulation, two females sitting or reclining near his, performing a double footjob",
"head": "females looking down at their feet, male head bathed in pleasure, expressions of focus and arousal",
"eyes": "looking at penis, eyes closed, eye contact with male",
"arms": "females arms resting behind them for support or on their own legs",
"hands": "hands resting on bed sheets, gripping sheets, or touching own legs",
"torso": "male torso exposed supine, females upper bodies leaning back or sitting upright",
"pelvis": "hips positioned to extend legs towards the male",
"legs": "females legs extended towards center, male legs spread or straight",
"feet": "barefoot, soles rubbing against penis, toes curling, sandwiching penis between feet, four feet visible",
"additional": "indoors, bed, crumpled sheets, sexual activity, multiple partners"
"base": "ffm, threesome, 1boy, 2girls, footjob, multiple_partners, sexual_activity",
"head": "looking_down, male focus, arousal, eyes_closed, looking_at_penis, eye_contact",
"upper_body": "supine, bare_torso, torso_focus, arms_at_sides, reclining",
"lower_body": "spread_legs, legs_up, legs_spread",
"hands": "gripping_sheets, hands_on_bed, hands_on_legs",
"feet": "barefoot, soles, toes_curling, sandwich, four_feet",
"additional": "indoors, bed, crumpled_sheets, climax, sweaty"
},
"participants": {
"solo_focus": "false",
@@ -20,18 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/FFM3SOME-footjob-EFEME3ftfe-IL_1475115.safetensors",
"lora_weight": 1.0,
"lora_triggers": "FFM3SOME-footjob-EFEME3ftfe-IL_1475115"
"lora_triggers": "FFM3SOME-footjob-EFEME3ftfe-IL_1475115",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"footjob",
"ffm",
"threesome",
"2girls",
"1boy",
"soles",
"barefoot",
"legs",
"penis",
"sexual"
]
"tags": {
"participants": "1boy, 2girls, ffm, threesome",
"nsfw": true
}
}

View File

@@ -2,37 +2,23 @@
"action_id": "ffm_threesome___kiss_and_fellatio_illustrious",
"action_name": "Ffm Threesome Kiss And Fellatio Illustrious",
"action": {
"full_body": "FFM threesome composition, 1boy between 2girls, simultaneous sexual activity",
"head": "one female kissing the male deep french kiss, second female bobbing head at crotch level",
"eyes": "eyes closed in pleasure, half-lidded, rolling back",
"arms": "wrapping around neck, holding head, bracing on thighs",
"hands": "fingers tangled in hair, holding penis, guiding head, groping",
"torso": "leaning forward, arched back, sitting upright",
"pelvis": "kneeling, sitting on lap, hips thrust forward",
"legs": "kneeling, spread legs, wrapped around waist",
"feet": "arched feet, curled toes",
"additional": "saliva trail, tongue, penis in mouth, cheek poking, blush, sweat, intimate lighting"
},
"participants": {
"solo_focus": "false",
"orientation": "FFM"
"base": "ffm_threesome, 2girls, 1boy, group_sex, sandwich_position",
"head": "kissing, fellatio, head_grab, closed_eyes, tilted_head",
"upper_body": "arms_around_neck, hand_on_head, leaning_forward, physical_contact, messy_hair, collarbone",
"lower_body": "kneeling, sitting, straddling, spread_legs, barefoot",
"hands": "stroking, hand_on_penis",
"feet": "barefoot",
"additional": "indoor, couch, faceless_male, saliva, blush, intimate, pleasure"
},
"lora": {
"lora_name": "Illustrious/Poses/FFM_threesome_-_Kiss_and_Fellatio_Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "FFM_threesome_-_Kiss_and_Fellatio_Illustrious"
"lora_triggers": "ffm_threesome_kiss_and_fellatio",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"ffm",
"threesome",
"group sex",
"kissing",
"fellatio",
"blowjob",
"2girls",
"1boy",
"simultaneous oral",
"french kiss",
"penis in mouth"
]
"tags": {
"participants": "1boy, 2girls",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "ffm_threesome_doggy_style_front_view_illustrious",
"action_name": "Ffm Threesome Doggy Style Front View Illustrious",
"action": {
"full_body": "threesome, 2girls, 1boy, doggy style, all fours, kneeling, from front, bodies overlapping",
"head": "looking at viewer, head raised, blushing, sweating, tongues out",
"eyes": "open eyes, heart-shaped pupils, eye contact",
"arms": "arms straight, supporting weight, hands on ground",
"hands": "palms flat, fingers spread, on bed sheet",
"torso": "leaning forward, arched back, breasts hanging",
"pelvis": "hips raised high, buttocks touching",
"legs": "knees bent, kneeling, legs spread",
"feet": "toes curled, feet relaxed",
"additional": "sex, penetration, vaginal, motion lines, saliva trail, indoors, bed"
"base": "threesome, 2girls, 1boy, doggy_style, from_front, all_fours, kneeling, bodies_overlapping",
"head": "looking_at_viewer, head_raised, blushes, sweat, tongue_out, open_eyes, heart_pupils, eye_contact",
"upper_body": "arms_straight, hands_on_ground, leaning_forward, arched_back, breasts_hanging",
"lower_body": "hips_raised, buttocks, knees_bent, kneeling, legs_spread",
"hands": "palms_flat, fingers_spread, on_bed",
"feet": "toes_curled, feet_relaxed",
"additional": "sex, penetration, vaginal_intercourse, motion_lines, saliva_trail, indoors, bed"
},
"participants": {
"solo_focus": "false",
@@ -20,18 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/FFM_Threesome_doggy_style_front_view_Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "FFM_Threesome_doggy_style_front_view_Illustrious"
"lora_triggers": "FFM_Threesome_doggy_style_front_view_Illustrious",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"threesome",
"2girls",
"1boy",
"doggy style",
"from front",
"all fours",
"sex",
"penetration",
"blush",
"sweat"
]
"tags": {
"participants": "2girls 1boy",
"nsfw": true
}
}

View File

@@ -0,0 +1,24 @@
{
"action_id": "ffm_threesome_girl_sandwichdouble_dip_illustrious",
"action_name": "Ffm Threesome Girl Sandwichdouble Dip Illustrious",
"action": {
"base": "ffm_threesome, 2girls, 1boy, sandwiched, bed, messy_bed",
"head": "ahegao, flushed, closed_eyes, rolled_back_eyes, looking_at_viewer",
"upper_body": "embracing, cleavage, breasts_pressed_together, holding_bed_sheet",
"lower_body": "straddling, legs_spread, pelvis_against_pelvis, implied_penetration",
"hands": "grabbing_sheet, touching_partner",
"feet": "barefoot",
"additional": "group_sex, orgasm, erotic, indoors"
},
"lora": {
"lora_name": "Illustrious/Poses/FFM_threesome_girl_sandwichdouble_dip_Illustrious.safetensors",
"lora_weight": 1.0,
"lora_triggers": "ffm_threesome_double_dip",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": {
"participants": "1boy, 2girls",
"nsfw": true
}
}

View File

@@ -2,39 +2,23 @@
"action_id": "ffm_threesome_one_girl_on_top_and_bj",
"action_name": "Ffm Threesome One Girl On Top And Bj",
"action": {
"full_body": "FFM threesome scene consisting of a male lying on his back on a bed, one female straddling his hips in a cowgirl position, and a second female positioned near his head or upper body",
"head": "heads close together, expressions of pleasure, mouth open, blushing",
"eyes": "rolled back, heart-shaped pupils, closed eyes, looking down",
"arms": "reaching out, holding hips, caressing face, resting on bed",
"hands": "gripping waist, holding hair, touching chest",
"torso": "arching back, leaning forward, sweat on skin, bare skin",
"pelvis": "interlocking hips, straddling, grinding motion",
"legs": "kneeling, spread wide, bent at knees",
"feet": "toes curled, resting on mattress",
"additional": "bedroom setting, crumpled sheets, intimate atmosphere, soft lighting"
},
"participants": {
"solo_focus": "false",
"orientation": "FFM"
"base": "ffm_threesome, cowgirl_position, straddling, lying, on_back",
"head": "blush, half-closed_eyes, heavy_breathing, open_mouth",
"upper_body": "nude, breasts",
"lower_body": "legs_apart, straddling, kneeling, bent_legs",
"hands": "hands_on_body, touching_self",
"feet": "barefoot",
"additional": "fellatio, penis, testicles, multiple_girls, 2girls, 1boy, sex"
},
"lora": {
"lora_name": "Illustrious/Poses/FFM_threesome_one_girl_on_top_and_BJ.safetensors",
"lora_weight": 1.0,
"lora_triggers": "FFM_threesome_one_girl_on_top_and_BJ"
"lora_triggers": "ffm_threesome_straddling_fellatio",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"2girls",
"1boy",
"ffm",
"threesome",
"cowgirl",
"fellatio",
"woman on top",
"sex",
"vaginal",
"oral",
"group sex",
"lying on back",
"nude"
]
"tags": {
"participants": "1girl 1boy 1girl",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "ffmnursinghandjob_ill_v3",
"action_name": "Ffmnursinghandjob Ill V3",
"action": {
"full_body": "threesome, 2girls, 1boy, ffm, male lying on back, two females kneeling or straddling",
"head": "blushing faces, looking down, ecstatic expressions, tongue out",
"eyes": "half-closed eyes, heart-shaped pupils, looking at penis",
"arms": "holding breasts, offering breast, reaching for penis",
"hands": "double handjob, stroking penis, squeezing breasts",
"torso": "exposed breasts, leaning forward, nipples visible",
"pelvis": "hips positioned near male's face or chest",
"legs": "kneeling, spread legs",
"base": "threesome, 2girls, 1boy, ffm, male_lying_on_back, females_kneeling, straddle",
"head": "blush, looking_down, ecstatic, tongue_out, half-closed_eyes, heart-shaped_pupils, looking_at_penis",
"upper_body": "holding_breasts, reaching_for_penis, exposed_breasts, leaning_forward, nipples",
"lower_body": "kneeling, spread_legs, phallus_straddle",
"hands": "double_handjob, stroking_penis, squeezing_breasts",
"feet": "barefoot",
"additional": "lactation, breast milk, saliva string, messy"
"additional": "lactation, breast_milk, saliva, mess"
},
"participants": {
"solo_focus": "false",
@@ -20,20 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/ffmNursingHandjob_ill_v3.safetensors",
"lora_weight": 1.0,
"lora_triggers": "ffmNursingHandjob_ill_v3"
"lora_triggers": "ffmNursingHandjob_ill_v3",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"threesome",
"2girls",
"1boy",
"ffm",
"handjob",
"double_handjob",
"nursing",
"breast_feeding",
"lactation",
"breast_milk",
"big_breasts",
"kneeling"
]
"tags": {
"participants": "1boy, 2girls, threesome",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "finish_blow_ill_v0_90_000004",
"action_name": "Finish Blow Ill V0 90 000004",
"action": {
"full_body": "highly dynamic combat pose, delivering a final powerful strike, lunging forward or mid-air jump",
"head": "intense battle expression, shouting or gritted teeth, hair flowing with motion",
"eyes": "fierce gaze, focused on target, angry eyes",
"arms": "swinging wildy, outstretched with weapon, motion blur on limbs",
"hands": "tightly gripping weapon, two-handed grip, or clenched fist",
"torso": "twisted torso for momentum, leaning into the attack",
"pelvis": "hips rotated to generate power, low center of gravity",
"legs": "wide stance, knees bent, dynamic foreshortening",
"feet": "planted firmly on ground or pointed in air, debris kicks up",
"additional": "light trails, speed lines, impact effects, shockwaves, cinematic lighting, dutch angle, weapon smear"
"base": "dynamic_pose, fighting_stance, lunging, aerial_pose, mid-air",
"head": "intense_expression, screaming, gritted_teeth, flowing_hair, fierce_eyes, glare",
"upper_body": "weapon_swing, motion_blur, torso_twist, dynamic_angle",
"lower_body": "wide_stance, knees_bent, rotated_hips, foreshortening",
"hands": "grip, clenched_hand, holding_weapon, two-handed_weapon",
"feet": "standing_on_ground, mid-air",
"additional": "speed_lines, impact_frames, shockwave, cinematic_lighting, dutch_angle, smear_frame"
},
"participants": {
"solo_focus": "true",
@@ -20,14 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/finish_blow_ill_v0.90-000004.safetensors",
"lora_weight": 1.0,
"lora_triggers": "finish_blow_ill_v0.90-000004"
"lora_triggers": "finish_blow_ill_v0.90-000004",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"action shot",
"fighting",
"masterpiece",
"motion blur",
"intense",
"cinematic composition"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "fixed_perspective_v3_1558768",
"action_name": "Fixed Perspective V3 1558768",
"action": {
"full_body": "Character positioned with exaggerated depth, utilizing strong foreshortening to create a 3D effect aimed at the viewer",
"head": "Face centered and close to the camera, looking directly at the viewer",
"eyes": "Intense eye contact, detailed eyes",
"arms": "One or both arms reaching towards the lens, appearing larger due to perspective",
"hands": "Enlarged hands/fingers reaching out (foreshortened)",
"torso": "Angled to recede into the background",
"pelvis": "Visually smaller, further back",
"legs": "Trailing off into the distance, significantly smaller than the upper body",
"feet": "Small or out of frame due to depth",
"additional": "Fisheye lens effect, dramatic camera angle, depth of field, high distortion, 3D composition"
"base": "foreshortening, exaggerated_perspective, depth, 3d, cinematic_composition",
"head": "extreme_close_up, looking_at_viewer, eye_contact, detailed_eyes, face_focus",
"upper_body": "reaching_towards_viewer, hand_in_foreground, perspective_distortion, angled_body",
"lower_body": "diminutive, distant, perspective_shift",
"hands": "enlarged_hand, fingers_spread, reaching, holding_frame",
"feet": "",
"additional": "fisheye, low_angle, depth_of_field, wide_angle_lens, distortion"
},
"participants": {
"solo_focus": "true",
@@ -20,15 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/fixed_perspective_v3_1558768.safetensors",
"lora_weight": 1.0,
"lora_triggers": "fixed_perspective_v3_1558768"
"lora_triggers": "fixed_perspective_v3_1558768",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"foreshortening",
"perspective",
"fisheye",
"reaching",
"dynamic angle",
"portrait",
"depth of field"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "fixed_point_v2",
"action_name": "Fixed Point V2",
"action": {
"full_body": "standing, assertive posture, foreshortening effect on the arm",
"head": "facing viewer, chin slightly tucked or tilted confidentially",
"eyes": "looking at viewer, focused gaze, winking or intense stare",
"arms": "arm extended forward towards the camera, elbow straight or slightly bent",
"hands": "finger gun, pointing, index finger extended, thumb raised, hand gesture",
"torso": "facing forward, slight rotation to align with the pointing arm",
"pelvis": "neutral standing position",
"legs": "standing, hip width apart",
"feet": "grounded",
"additional": "depth of field, focus on hand, perspective usually from front"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "kneeling, on_floor, indoors, bedroom",
"head": "looking_at_viewer, open_eyes",
"upper_body": "leaning_on_bed, torso_facing_viewer",
"lower_body": "kneeling, legs_together",
"hands": "hands_resting",
"feet": "barefoot",
"additional": "fxdpt, wide_shot, room_interior"
},
"lora": {
"lora_name": "Illustrious/Poses/fixed_point_v2.safetensors",
"lora_weight": 1.0,
"lora_triggers": "fixed_point_v2"
"lora_weight": 0.8,
"lora_triggers": "fxdpt, full room view",
"lora_weight_min": 0.8,
"lora_weight_max": 0.8
},
"tags": [
"gesture",
"finger gun",
"pointing",
"aiming",
"looking at viewer",
"foreshortening",
"bang"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,33 +2,23 @@
"action_id": "flaccid_after_cum_illustrious_000009",
"action_name": "Flaccid After Cum Illustrious 000009",
"action": {
"full_body": "lying on back, limp pose, completely spent, relaxed muscles, spread eagle",
"head": "head tilted back, mouth open, tongue hanging out, messy hair, heavy breathing",
"eyes": "half-closed eyes, eyes rolled back, glassy eyes, ahegao",
"arms": "arms spread wide, limp arms, resting on surface",
"hands": "loosely open hands, twitching fingers",
"torso": "heaving chest, sweating skin, relaxed abdomen",
"pelvis": "exposed, hips flat on surface",
"legs": "legs spread wide, m-legs, knees bent and falling outward",
"feet": "toes curled",
"additional": "covered in white liquid, messy body, bodily fluids, after sex, exhaustion, sweat drops"
},
"participants": {
"solo_focus": "true",
"orientation": "MF"
"base": "post-coital, exhausted, lying, bed",
"head": "flushed_face, eyes_rolled_back, messy_hair, half-closed_eyes, expressionless",
"upper_body": "sweaty, bare_chest, heaving_chest",
"lower_body": "flaccid_penis, soft_penis, semen, legs_spread",
"hands": "relaxed_hands",
"feet": "relaxed_feet",
"additional": "messy_bed, steam"
},
"lora": {
"lora_name": "Illustrious/Poses/Flaccid_After_Cum_Illustrious-000009.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Flaccid_After_Cum_Illustrious-000009"
"lora_triggers": "flaccid after cum",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"lying",
"sweat",
"blush",
"open mouth",
"bodily fluids",
"spread legs",
"ahegao"
]
"tags": {
"participants": "1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "fleshlight_position_doggystyle_dangling_legs_sex_from_behind_hanging_legs_ponyilsdsdxl",
"action_name": "Fleshlight Position Doggystyle Dangling Legs Sex From Behind Hanging Legs Ponyilsdsdxl",
"action": {
"full_body": "doggystyle, sex from behind, hanging legs, vaginal",
"head": "facing down or looking back over shoulder",
"eyes": "half-closed or expression of pleasure",
"arms": "supporting upper body weight, elbows often bent",
"hands": "gripping the sheets or resting flat on the surface",
"torso": "prone, leaning forward, back deeply arched",
"pelvis": "elevated and pushed back to the edge of the surface",
"legs": "dangling down off the edge, knees slightly bent, not supporting weight",
"feet": "hanging freely, toes connecting with nothing, off the ground",
"additional": "on edge of bed, precarious balance, from behind perspective"
"base": "doggystyle, sex, vaginal, from_behind, hanging_legs",
"head": "looking_back, expressionless, open_mouth, closed_eyes",
"upper_body": "arched_back, leaning_forward, elbows_on_bed",
"lower_body": "raised_hips, legs_dangling, dangling",
"hands": "hands_on_bed, gripping_bedclothes",
"feet": "barefoot, curled_toes",
"additional": "on_bed, from_behind, sex_position"
},
"participants": {
"solo_focus": "true",
@@ -20,18 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Fleshlight_Position_Doggystyle_Dangling_Legs_Sex_From_Behind_Hanging_Legs_PonyILSDSDXL.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Fleshlight_Position_Doggystyle_Dangling_Legs_Sex_From_Behind_Hanging_Legs_PonyILSDSDXL"
"lora_triggers": "Fleshlight_Position_Doggystyle_Dangling_Legs_Sex_From_Behind_Hanging_Legs_PonyILSDSDXL",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"doggystyle",
"dangling legs",
"hanging legs",
"edge of bed",
"prone",
"arched back",
"from behind",
"raised hips",
"feet off ground",
"sex act"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "folded_xl_illustrious_v1_0",
"action_name": "Folded Xl Illustrious V1 0",
"action": {
"full_body": "Character standing in a confident or defensive posture with weight shifted to one side",
"head": "Chin slightly raised, facing the viewer directly",
"eyes": "Sharp gaze, expressing confidence, skepticism, or annoyance",
"arms": "Both arms crossed firmly over the chest (folded arms)",
"hands": "Hands tucked under the biceps or grasping the opposite upper arm",
"torso": "Upright posture, chest slightly expanded",
"pelvis": "Hips slightly cocked to one side for attitude",
"legs": "Standing straight, legs apart or one knee relaxed",
"feet": "Planted firmly on the ground",
"additional": "Often implies an attitude of arrogance, patience, or defiance"
"base": "standing, crossed_arms, posture",
"head": "looking_at_viewer, chin_up, confident_expression, skeptical_expression, annoyed",
"upper_body": "crossed_arms",
"lower_body": "standing, hip_cocked",
"hands": "hands_on_upper_arms",
"feet": "feet_together, standing",
"additional": "arrogance, defiance"
},
"participants": {
"solo_focus": "true",
@@ -20,15 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Folded XL illustrious V1.0.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Folded XL illustrious V1.0"
"lora_triggers": "Folded XL illustrious V1.0",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"crossed arms",
"standing",
"confident",
"attitude",
"looking at viewer",
"skeptical",
"upper body"
]
"tags": {
"participants": "solo",
"nsfw": false
}
}

View File

@@ -2,16 +2,13 @@
"action_id": "forced_cunnilingus",
"action_name": "Forced Cunnilingus",
"action": {
"full_body": "female lying on back, legs spread wide, partner positioning head between legs performing oral sex",
"head": "head tilted back, blushing, expression of distress or shock, mouth slightly open",
"eyes": "teary eyes, squeezed shut or looking away",
"arms": "arms pinned above head or held down against surface",
"hands": "clenched fists, wrists held",
"torso": "arched back, chest heaving",
"pelvis": "hips lifted slightly, exposed crotch",
"legs": "legs spread, m-legs, knees bent, thighs held apart by partner",
"feet": "toes curled in tension",
"additional": "cunnilingus, saliva trail, partner's head buried in crotch, struggle, non-consensual undertones"
"base": "cunnilingus, oral_sex, lying_on_back, legs_spread, partner_positioning, 1girl, 1boy",
"head": "head_tilted_back, blushing, distressed, tears, mouth_open, looking_away, teary_eyes",
"upper_body": "arms_pinned, arched_back, chest_heaving",
"lower_body": "hips_lifted, spread_legs, m_legs, knees_bent, exposed_crotch",
"hands": "clenched_hands, held_wrists",
"feet": "curled_toes",
"additional": "saliva, head_between_thighs, struggle, non-consensual"
},
"participants": {
"solo_focus": "true",
@@ -20,19 +17,12 @@
"lora": {
"lora_name": "Illustrious/Poses/Forced_cunnilingus.safetensors",
"lora_weight": 1.0,
"lora_triggers": "Forced_cunnilingus"
"lora_triggers": "Forced_cunnilingus",
"lora_weight_min": 1.0,
"lora_weight_max": 1.0
},
"tags": [
"cunnilingus",
"oral sex",
"lying on back",
"legs spread",
"legs held",
"pinned down",
"distressed",
"blushing",
"crying",
"vaginal",
"sex act"
]
"tags": {
"participants": "1girl 1boy",
"nsfw": true
}
}

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