Compare commits
@@ -0,0 +1,28 @@
|
||||
name: Publish to Comfy registry
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
paths:
|
||||
- "pyproject.toml"
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
publish-node:
|
||||
name: Publish Custom Node to registry
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.repository_owner == 'SatadalAI' }}
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- name: Publish Custom Node
|
||||
uses: Comfy-Org/publish-node-action@v1
|
||||
with:
|
||||
## Add your own personal access token to your Github Repository secrets and reference it here.
|
||||
personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }}
|
||||
@@ -1,7 +1,7 @@
|
||||
# SATA Utility Node Suite for ComfyUI
|
||||
|
||||
**Author:** Satadal
|
||||
**Version:** 1.0
|
||||
**Version:** 1.5.0
|
||||
**License:** MIT
|
||||
**Repository:** https://github.com/SatadalAI/SATA_UtilityNode
|
||||
|
||||
@@ -12,11 +12,15 @@
|
||||
SATA Utility Node Suite is a collection of custom nodes for [ComfyUI](https://github.com/comfyanonymous/ComfyUI) designed to enhance your image processing and workflow experience.
|
||||
It includes:
|
||||
|
||||
- **Upscale Machine:** High-quality model-based image upscaling with aspect-ratio preserving rescale.
|
||||
- **Prompt Machine:** Easy prompt selection from a CSV for positive/negative prompt workflows.
|
||||
- **Upscale Machine:** High-quality model-based image upscaling with Frequency-Split SR and Blue Noise injection.
|
||||
- **Prompt Machine (Six-Slot):** Professional structured prompting with JSON output support.
|
||||
- **Prompt Style Machine:** Easy prompt selection from a CSV for positive/negative prompt workflows.
|
||||
- **Touchpad Pan & Zoom:** Seamless navigation for large images in the ComfyUI preview panel.
|
||||
- **Resolution Machine:** Quick selection of model-specific image resolutions for popular models.
|
||||
- **Save Image w/Metadata:** saving images with meta data and with different file formats.
|
||||
- **Resolution Machine:** Quick selection of model-specific image resolutions with intelligent Megapixel scaling.
|
||||
- **Save Image w/Metadata:** Saving images with metadata and with different file formats.
|
||||
- **Prompt Autocomplete:** Text widget with highly optimized subsequence fuzzy autocompletion.
|
||||
- **Latent Machine:** Advanced noise generation (Power-Law, Plasma, Blue, Offset) supporting both 4-channel and 16-channel modern architectures.
|
||||
- **Preview Machine:** Privacy-focused image preview node with auto-hide and hover-to-reveal functionality.
|
||||
|
||||
---
|
||||
|
||||
@@ -25,17 +29,23 @@ It includes:
|
||||
### 🖼️ Upscale Machine
|
||||
|
||||
- **Model-based Upscaling:** Uses custom or pre-trained models from the `upscale_models` folder.
|
||||
- **Frequency-Split SR:** Separates image into base colors (low frequencies) and sharp edges (high frequencies). The neural network only upscales edges, while a bicubic algorithm scales colors, eliminating "plastic/waxy" looks and edge halos.
|
||||
- **Blue Noise Injection:** Adds high-frequency micro-textures (`inject_noise_for_realism`) during upscaling. Automatically activates when using a chained model to fix the "smoothness" problem in low-step/distilled models like SDXL Turbo.
|
||||
- **Aspect Ratio Preserving Rescale:** Output size is always original size × rescale factor.
|
||||
- **CPU-based Rescaling:** Efficient resizing using OpenCV.
|
||||
- **Supersampling:** Optional detail preservation for downscaling/fractional resizing.
|
||||
- **Rounding Modulus:** Ensures output dimensions align with model/UI constraints.
|
||||
- **Dual Output:** Returns both the processed image and a help/documentation link.
|
||||
- **Rounding Modulus:** Ensures output dimensions seamlessly align with UNet architectural constraints.
|
||||
|
||||
### 💬 Prompt Machine
|
||||
### 💬 Prompt Machine (Six-Slot Framework)
|
||||
|
||||
- **Structured Prompting:** Dedicated input boxes for `subject`, `style`, `lighting`, `composition`, `mood`, and `technical` details to prevent "word salad".
|
||||
- **JSON Output Mode:** Toggle `json_output` to compile the slots into a strict JSON string, perfect for piping into LLM rewriting nodes or API pipelines.
|
||||
- **Autocomplete Ready:** Fully integrated with the autocomplete system—just type `#` in any slot to trigger the smart tag popup!
|
||||
- **Natural Language & Comma Separated:** Dynamically formats outputs for FLUX (Natural Language) or SDXL (Comma Separated).
|
||||
|
||||
### 💬 Prompt Style Machine (Legacy)
|
||||
|
||||
- **CSV-based Prompt Selection:** Select prompt sets from a CSV file (`prompts.csv`).
|
||||
- **Positive/Negative Output:** Outputs both positive and negative prompts as strings.
|
||||
- **Easy Integration:** Designed for use in prompt-driven workflows.
|
||||
- **Clean Output:** Outputs the positive prompt string with a live, enlarged text preview inside the node.
|
||||
|
||||
### 🖱️ Touchpad Pan & Zoom
|
||||
|
||||
@@ -44,23 +54,43 @@ It includes:
|
||||
|
||||
### 📏 Resolution Machine
|
||||
|
||||
- **Model-aware Resolution Selection:** Choose from a list of recommended resolutions for each supported model.
|
||||
- **Auto-populate Width/Height:** Selecting a resolution automatically fills in the correct width and height.
|
||||
- **Manual Override:** You can manually set width/height, which clears the preset selection.
|
||||
- **Supports Many Models:** Includes presets for SD1.5, SDXL, Illustrious XL, Pony XL, Flux.1 Dev, Qwen-Image, Wan2.2-S2V, SD3.5 Large, Lumina-Image 2.0, and more.
|
||||
- **UI Integration:** Intuitive dropdowns for model and resolution selection in the ComfyUI interface.
|
||||
- **Intelligent Megapixel Scaling:** Uses a target Megapixel slider to automatically calculate the exact width/height required to hit the target while perfectly preserving your chosen aspect ratio. Rounds to the nearest multiple of 8.
|
||||
- **Model-aware Resolution Selection:** Choose from a list of recommended resolutions for each supported model (SD1.5, SDXL, Flux.1 & Flux.2, SD3 & SD3.5, Ideogram 4, Lumina, Qwen-Image, Z-Image Turbo, Hunyuan-DiT, and Video Models like Wan2.2, HunyuanVideo, Mochi-1, LTX-Video).
|
||||
|
||||
---
|
||||
|
||||
### 💾 Save Image w/Metadata
|
||||
|
||||
- **Single path+filename input:** Provide a single required `path_and_filename` string (examples: `comfy`, `Test/comfy`, `SDXL/Test/comfy`). The last path segment is used as the filename; preceding segments become folders under the ComfyUI output directory.
|
||||
- **Single path+filename input:** Provide a single required `path_and_filename` string.
|
||||
- **Supported formats:** PNG, JPEG (saved as .jpg), WEBP (choose with the `extension` dropdown).
|
||||
- **Automatic folder creation:** Any missing folders in the provided path are created automatically.
|
||||
- **Metadata embedding:** PNG files receive tEXt entries (parameters/prompt). JPEG/WEBP receive EXIF UserComment where possible.
|
||||
- **Placeholder resolution:** Filenames and paths accept `%...%` placeholders which are resolved from the node's `prompt` dictionary (best-effort). Example: if `prompt` contains `{"title": "MyTitle"}`, using `%title%/img` will save under `MyTitle/img.png`.
|
||||
- **Collision-safe saving:** If a file already exists the node will append `_0001`, `_0002`, ... to the base filename to avoid overwriting.
|
||||
- **Placeholder resolution:** Filenames and paths accept `%...%` placeholders which are resolved from the node's `prompt` dictionary.
|
||||
- **Collision-safe saving:** Automatically appends numerical suffixes to avoid overwriting.
|
||||
|
||||
### ✍️ Prompt Autocomplete
|
||||
|
||||
- **Subsequence Fuzzy Matching:** Ultra-fast, highly optimized fuzzy search with rank-based scoring.
|
||||
- **Autocompletion:** Type `#` (configurable) to trigger a popup with suggestions from CSV/JSON files in the `prompt` folder. Supports strict 100-item render limits to prevent UI lag.
|
||||
- **Random Selection:** Select `🎲 Random` to insert a random item from a category.
|
||||
- **Global Mode:** Optional setting to enable autocompletion on ALL text widgets in ComfyUI.
|
||||
|
||||
### 🌌 Latent Machine
|
||||
|
||||
- **Advanced Noise Generation:** Initialize latents with specific noise patterns:
|
||||
- **Gaussian (White):** Standard noise, good for sharp details.
|
||||
- **Blue (High-Frequency):** Enhances detail and textures.
|
||||
- **Pink (1/f) / Brown (1/f²):** Photorealism, nature, anime backgrounds.
|
||||
- **Perlin / Plasma:** Fluid landscapes, sci-fi, abstract terrains.
|
||||
- **High-Contrast Offset Noise:** Toggle `high_contrast` to inject a `0.1` mean shift to the starting noise, allowing the model to generate pure blacks (pitch-black nights) and blown-out whites (snowstorms).
|
||||
- **Auto 16-Channel Detection:** Automatically provisions the correct latent depth for modern architectures (Flux, SD3, Lumina, Z-Image).
|
||||
- **Reproducibility:** Full seed support for consistent noise generation.
|
||||
|
||||
### 👁️ Preview Machine
|
||||
|
||||
- **Privacy-Focused Preview:** Image preview node that hides content by default.
|
||||
- **Hover to Reveal / Auto-Hide:** Simply hover over the node to temporarily reveal the image.
|
||||
- **Global Hide Mode:** Optional setting to hide ALL preview nodes in the workflow (Settings → SATA Utility: Global Hide Previews).
|
||||
|
||||
## 📦 Installation
|
||||
|
||||
@@ -80,86 +110,9 @@ It includes:
|
||||
|
||||
---
|
||||
|
||||
## 📚 Node Inputs & Outputs
|
||||
|
||||
### Upscale Machine
|
||||
|
||||
| Name | Type | Description |
|
||||
|------------------|--------|--------------------------------------------------|
|
||||
| `image` | IMAGE | Input image tensor |
|
||||
| `upscale_model` | STRING | Model filename from `upscale_models` folder |
|
||||
| `rescale_factor` | FLOAT | Scaling factor (aspect ratio preserved) |
|
||||
| `supersample` | STRING | `"true"` or `"false"` |
|
||||
| `rounding_modulus` | INT | Ensures dimensions are divisible by this value |
|
||||
|
||||
**Outputs:**
|
||||
|
||||
| Name | Type | Description |
|
||||
|-------------|--------|------------------------------------|
|
||||
| `IMAGE` | IMAGE | The upscaled and resized image |
|
||||
| `show_help` | STRING | Link to documentation/help |
|
||||
|
||||
---
|
||||
|
||||
### 💬 Prompt Machine
|
||||
|
||||
Loads positive and negative prompts from a `prompts.csv` file, allowing you to quickly switch between predefined prompt sets in your workflow.
|
||||
|
||||
| Name | Type | Description |
|
||||
|-------------|--------|------------------------------------|
|
||||
| `selection` | STRING | Prompt set name from CSV |
|
||||
|
||||
**Outputs:**
|
||||
| Name | Type | Description |
|
||||
|-------------|--------|------------------------------------|
|
||||
| `positive` | STRING | Positive prompt |
|
||||
| `negative` | STRING | Negative prompt |
|
||||
|
||||
---
|
||||
|
||||
### 🖱️ Touchpad Pan & Zoom
|
||||
|
||||
A UI enhancement that enables smooth, intuitive touchpad-based panning and zooming on images in the ComfyUI preview panel. No node configuration is required—it works automatically.
|
||||
|
||||
---
|
||||
|
||||
### 📏 Resolution Machine
|
||||
|
||||
Provides dropdowns to quickly select recommended resolutions for popular models like SDXL, Pony, SD3, and more. Selecting a preset auto-populates width and height, but you can also set them manually.
|
||||
|
||||
| Name | Type | Description |
|
||||
|--------------|--------|--------------------------------------------------|
|
||||
| `model` | STRING | Model name (select from supported models) |
|
||||
| `resolution` | STRING | Resolution preset name (auto-populates size) |
|
||||
| `width` | INT | Image width (can be set manually) |
|
||||
| `height` | INT | Image height (can be set manually) |
|
||||
|
||||
**Outputs:**
|
||||
| Name | Type | Description |
|
||||
|----------|------|----------------------------|
|
||||
| `width` | INT | Final image width |
|
||||
| `height` | INT | Final image height |
|
||||
|
||||
---
|
||||
|
||||
### 💾 Save Image w/Metadata
|
||||
|
||||
An advanced image saving node with dynamic pathing, metadata embedding, and filename collision avoidance.
|
||||
|
||||
| Name | Type | Description |
|
||||
|------------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `path_and_filename` | STRING | Path and filename string (e.g., `MyRenders/character`). The last segment is the filename; preceding segments are folders under the ComfyUI `output` directory. |
|
||||
| `extension` | STRING | File format: `png`, `jpeg`, `webp`. |
|
||||
| `custom_string` | STRING | Optional custom text to embed in metadata. |
|
||||
| `quality_jpeg_or_webp` | INT | Quality for JPEG/WEBP formats (1-100). |
|
||||
| `lossless_webp` | BOOLEAN | If true, saves WEBP files losslessly. |
|
||||
| `prompt` (hidden) | DICT | Workflow data used to resolve `%...%` placeholders in the filename (e.g., `%sampler_name%`). |
|
||||
|
||||
**Key Behaviors:**
|
||||
- **Dynamic Paths:** Automatically creates any missing folders in your specified path.
|
||||
- **Metadata:** Embeds workflow data into PNG (tEXt), JPEG (EXIF), and WEBP (EXIF) files.
|
||||
- **Collision Safe:** Prevents overwrites by appending a number (e.g., `image_0001.png`) if the filename already exists.
|
||||
- **UI Output:** Returns a list of saved files to the ComfyUI manager/preview panel.
|
||||
**Settings:**
|
||||
- **Trigger Character:** Change the character that opens the popup (default: `#`).
|
||||
- **Global Mode:** Enable autocompletion for all text widgets in ComfyUI (default: `false`).
|
||||
|
||||
## 📝 License
|
||||
|
||||
|
||||
+18
-9
@@ -1,25 +1,34 @@
|
||||
# __init__.py
|
||||
|
||||
# Import all the node classes from the nodes directory
|
||||
from .nodes.prompt_machine import Prompt_Machine
|
||||
from .nodes.prompt_machine import Prompt_Machine, Prompt_Style_Machine
|
||||
from .nodes.resolution_machine import Resolution_Machine
|
||||
from .nodes.save_image_metadata import ImageSaveWithMetadata
|
||||
from .nodes.save_machine import Save_Machine
|
||||
from .nodes.upscale_machine import Upscale_Machine
|
||||
from .nodes.prompt_autocomplete import PromptAutocomplete
|
||||
from .nodes.latent_machine import Latent_Machine
|
||||
from .nodes.preview_machine import Preview_Machine
|
||||
|
||||
# A dictionary that maps class names to class objects
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"Prompt_Machine": Prompt_Machine,
|
||||
"Prompt_Style_Machine": Prompt_Style_Machine,
|
||||
"Resolution_Machine": Resolution_Machine,
|
||||
"ImageSaveWithMetadata": ImageSaveWithMetadata,
|
||||
"Save_Machine": Save_Machine,
|
||||
"Upscale_Machine": Upscale_Machine,
|
||||
"PromptAutocomplete": PromptAutocomplete,
|
||||
"Latent_Machine": Latent_Machine,
|
||||
"Preview_Machine": Preview_Machine,
|
||||
}
|
||||
|
||||
# A dictionary that maps display names to class names
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"Prompt Machine": "Prompt_Machine",
|
||||
"Resolution Machine": "Resolution_Machine",
|
||||
"Save Image w/Metadata": "ImageSaveWithMetadata",
|
||||
"Upscale Machine": "Upscale_Machine",
|
||||
"Prompt_Machine": "Prompt Machine",
|
||||
"Prompt_Style_Machine": "Prompt Style Machine",
|
||||
"Resolution_Machine": "Resolution Machine",
|
||||
"Save_Machine": "Save Machine",
|
||||
"Upscale_Machine": "Upscale Machine",
|
||||
"PromptAutocomplete": "Prompt Autocomplete",
|
||||
"Latent_Machine": "Latent Machine",
|
||||
"Preview_Machine": "Preview Machine",
|
||||
}
|
||||
|
||||
# A dictionary that contains web directory information
|
||||
|
||||
+359
-57
@@ -1,61 +1,363 @@
|
||||
{
|
||||
"SD 1.5": {
|
||||
"Square (1:1) 512x512": { "width": 512, "height": 512 },
|
||||
"Square high-res (1:1) 768x768": { "width": 768, "height": 768 },
|
||||
"Landscape (3:2) 768x512": { "width": 768, "height": 512 },
|
||||
"Portrait (2:3) 512x768": { "width": 512, "height": 768 },
|
||||
"Landscape (4:3) 768x576": { "width": 768, "height": 576 },
|
||||
"Portrait (3:4) 576x768": { "width": 576, "height": 768 },
|
||||
"Widescreen (16:9) 912x512": { "width": 912, "height": 512 },
|
||||
"Tall (9:16) 512x912": { "width": 512, "height": 912 },
|
||||
"Custom (manual)": { "width": 0, "height": 0 }
|
||||
"resolutions": {
|
||||
"512": {
|
||||
"Square": {
|
||||
"Square (1:1) 512x512": {
|
||||
"width": 512,
|
||||
"height": 512
|
||||
}
|
||||
},
|
||||
"Landscape": {
|
||||
"Photography (3:2) 768x512": {
|
||||
"width": 768,
|
||||
"height": 512
|
||||
},
|
||||
"Widescreen (16:9) 912x512": {
|
||||
"width": 912,
|
||||
"height": 512
|
||||
}
|
||||
},
|
||||
"Portrait": {
|
||||
"Photo Portrait (2:3) 512x768": {
|
||||
"width": 512,
|
||||
"height": 768
|
||||
},
|
||||
"Vertical (9:16) 512x912": {
|
||||
"width": 512,
|
||||
"height": 912
|
||||
}
|
||||
}
|
||||
},
|
||||
"768": {
|
||||
"Square": {
|
||||
"Square (1:1) 768x768": {
|
||||
"width": 768,
|
||||
"height": 768
|
||||
}
|
||||
},
|
||||
"Landscape": {
|
||||
"Cinematic (21:9) 1344x576": {
|
||||
"width": 1344,
|
||||
"height": 576
|
||||
},
|
||||
"Photography (3:2) 768x512": {
|
||||
"width": 768,
|
||||
"height": 512
|
||||
},
|
||||
"Photo Landscape (4:3) 768x576": {
|
||||
"width": 768,
|
||||
"height": 576
|
||||
}
|
||||
},
|
||||
"Portrait": {
|
||||
"Tall (9:21) 576x1344": {
|
||||
"width": 576,
|
||||
"height": 1344
|
||||
},
|
||||
"Photo Portrait (2:3) 512x768": {
|
||||
"width": 512,
|
||||
"height": 768
|
||||
},
|
||||
"Portrait (3:4) 576x768": {
|
||||
"width": 576,
|
||||
"height": 768
|
||||
}
|
||||
}
|
||||
},
|
||||
"1024": {
|
||||
"Square": {
|
||||
"Square (1:1) 1024x1024": {
|
||||
"width": 1024,
|
||||
"height": 1024
|
||||
}
|
||||
},
|
||||
"Landscape": {
|
||||
"Cinematic (21:9) 1536x640": {
|
||||
"width": 1536,
|
||||
"height": 640
|
||||
},
|
||||
"Cinematic (21:9) 1680x720": {
|
||||
"width": 1680,
|
||||
"height": 720
|
||||
},
|
||||
"Ultra Wide (2:1) 1536x768": {
|
||||
"width": 1536,
|
||||
"height": 768
|
||||
},
|
||||
"Widescreen (16:9) 1280x720": {
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
},
|
||||
"Widescreen (16:9) 1344x768": {
|
||||
"width": 1344,
|
||||
"height": 768
|
||||
},
|
||||
"Widescreen (16:9) 1536x864": {
|
||||
"width": 1536,
|
||||
"height": 864
|
||||
},
|
||||
"Wide Landscape (10:7) 1280x896": {
|
||||
"width": 1280,
|
||||
"height": 896
|
||||
},
|
||||
"Photo Landscape (4:3) 1152x864": {
|
||||
"width": 1152,
|
||||
"height": 864
|
||||
},
|
||||
"Photo Landscape (4:3) 1152x896": {
|
||||
"width": 1152,
|
||||
"height": 896
|
||||
},
|
||||
"Photography (3:2) 1152x768": {
|
||||
"width": 1152,
|
||||
"height": 768
|
||||
},
|
||||
"Photography (3:2) 1248x832": {
|
||||
"width": 1248,
|
||||
"height": 832
|
||||
},
|
||||
"Photography (3:2) 1280x832": {
|
||||
"width": 1280,
|
||||
"height": 832
|
||||
},
|
||||
"Balanced Landscape (19:13) 1216x832": {
|
||||
"width": 1216,
|
||||
"height": 832
|
||||
}
|
||||
},
|
||||
"Portrait": {
|
||||
"Tall (9:21) 640x1536": {
|
||||
"width": 640,
|
||||
"height": 1536
|
||||
},
|
||||
"Tall (9:21) 720x1680": {
|
||||
"width": 720,
|
||||
"height": 1680
|
||||
},
|
||||
"Extra Tall (1:2) 768x1536": {
|
||||
"width": 768,
|
||||
"height": 1536
|
||||
},
|
||||
"Vertical (9:16) 720x1280": {
|
||||
"width": 720,
|
||||
"height": 1280
|
||||
},
|
||||
"Vertical (9:16) 768x1344": {
|
||||
"width": 768,
|
||||
"height": 1344
|
||||
},
|
||||
"Vertical (9:16) 864x1536": {
|
||||
"width": 864,
|
||||
"height": 1536
|
||||
},
|
||||
"Tall Portrait (7:10) 896x1280": {
|
||||
"width": 896,
|
||||
"height": 1280
|
||||
},
|
||||
"Portrait (3:4) 864x1152": {
|
||||
"width": 864,
|
||||
"height": 1152
|
||||
},
|
||||
"Portrait (3:4) 896x1152": {
|
||||
"width": 896,
|
||||
"height": 1152
|
||||
},
|
||||
"Photo Portrait (2:3) 768x1152": {
|
||||
"width": 768,
|
||||
"height": 1152
|
||||
},
|
||||
"Photo Portrait (2:3) 832x1248": {
|
||||
"width": 832,
|
||||
"height": 1248
|
||||
},
|
||||
"Photo Portrait (2:3) 832x1280": {
|
||||
"width": 832,
|
||||
"height": 1280
|
||||
},
|
||||
"Balanced Portrait (13:19) 832x1216": {
|
||||
"width": 832,
|
||||
"height": 1216
|
||||
}
|
||||
}
|
||||
},
|
||||
"1280": {
|
||||
"Square": {
|
||||
"Square (1:1) 1280x1280": {
|
||||
"width": 1280,
|
||||
"height": 1280
|
||||
},
|
||||
"Square (1:1) 1328x1328": {
|
||||
"width": 1328,
|
||||
"height": 1328
|
||||
}
|
||||
},
|
||||
"Landscape": {
|
||||
"Cinematic (21:9) 2016x864": {
|
||||
"width": 2016,
|
||||
"height": 864
|
||||
},
|
||||
"Wide Medium (12:7) 1536x896": {
|
||||
"width": 1536,
|
||||
"height": 896
|
||||
},
|
||||
"Widescreen (16:9) 1664x928": {
|
||||
"width": 1664,
|
||||
"height": 928
|
||||
},
|
||||
"Balanced Landscape (9:7) 1440x1120": {
|
||||
"width": 1440,
|
||||
"height": 1120
|
||||
},
|
||||
"Photo Landscape (4:3) 1472x1104": {
|
||||
"width": 1472,
|
||||
"height": 1104
|
||||
},
|
||||
"Photo Landscape (4:3) 1472x1140": {
|
||||
"width": 1472,
|
||||
"height": 1140
|
||||
},
|
||||
"Photography (3:2) 1536x1024": {
|
||||
"width": 1536,
|
||||
"height": 1024
|
||||
}
|
||||
},
|
||||
"Portrait": {
|
||||
"Tall (9:21) 864x2016": {
|
||||
"width": 864,
|
||||
"height": 2016
|
||||
},
|
||||
"Vertical (9:16) 928x1664": {
|
||||
"width": 928,
|
||||
"height": 1664
|
||||
},
|
||||
"Balanced Portrait (7:9) 1120x1440": {
|
||||
"width": 1120,
|
||||
"height": 1440
|
||||
},
|
||||
"Portrait (3:4) 1104x1472": {
|
||||
"width": 1104,
|
||||
"height": 1472
|
||||
},
|
||||
"Portrait (3:4) 1140x1472": {
|
||||
"width": 1140,
|
||||
"height": 1472
|
||||
},
|
||||
"Photo Portrait (2:3) 1024x1536": {
|
||||
"width": 1024,
|
||||
"height": 1536
|
||||
}
|
||||
}
|
||||
},
|
||||
"1536": {
|
||||
"Square": {
|
||||
"Square (1:1) 1536x1536": {
|
||||
"width": 1536,
|
||||
"height": 1536
|
||||
}
|
||||
},
|
||||
"Landscape": {
|
||||
"Widescreen (16:9) 1920x1088": {
|
||||
"width": 1920,
|
||||
"height": 1088
|
||||
},
|
||||
"Widescreen (16:9) 2048x1152": {
|
||||
"width": 2048,
|
||||
"height": 1152
|
||||
},
|
||||
"Balanced Landscape (9:7) 1728x1344": {
|
||||
"width": 1728,
|
||||
"height": 1344
|
||||
},
|
||||
"Photo Landscape (4:3) 1728x1296": {
|
||||
"width": 1728,
|
||||
"height": 1296
|
||||
},
|
||||
"Photography (3:2) 1872x1248": {
|
||||
"width": 1872,
|
||||
"height": 1248
|
||||
}
|
||||
},
|
||||
"Portrait": {
|
||||
"Vertical (9:16) 1152x2048": {
|
||||
"width": 1152,
|
||||
"height": 2048
|
||||
},
|
||||
"Balanced Portrait (7:9) 1344x1728": {
|
||||
"width": 1344,
|
||||
"height": 1728
|
||||
},
|
||||
"Portrait (3:4) 1296x1728": {
|
||||
"width": 1296,
|
||||
"height": 1728
|
||||
},
|
||||
"Photo Portrait (2:3) 1248x1872": {
|
||||
"width": 1248,
|
||||
"height": 1872
|
||||
}
|
||||
}
|
||||
},
|
||||
"Video": {
|
||||
"Square": {},
|
||||
"Landscape": {
|
||||
"Widescreen (16:9) 1280x720": {
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
}
|
||||
},
|
||||
"Portrait": {
|
||||
"Vertical (9:16) 720x1280": {
|
||||
"width": 720,
|
||||
"height": 1280
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"SDXL_Illustrious_Pony": {
|
||||
"Square (1:1) 1024x1024": { "width": 1024, "height": 1024 },
|
||||
"Landscape (3:2) 1280x832": { "width": 1280, "height": 832 },
|
||||
"Portrait (2:3) 832x1280": { "width": 832, "height": 1280 },
|
||||
"Photography (4:3) 1152x896": { "width": 1152, "height": 896 },
|
||||
"Portrait Insta (3:4) 896x1152": { "width": 896, "height": 1152 },
|
||||
"Widescreen (16:9) 1344x768": { "width": 1344, "height": 768 },
|
||||
"Vertical (9:16) 768x1344": { "width": 768, "height": 1344 },
|
||||
"Cinematic (21:9) 1536x640": { "width": 1536, "height": 640 },
|
||||
"Cinematic Portrait (9:21) 640x1536": { "width": 640, "height": 1536 },
|
||||
"Best Landscape (19:13) 1216x832": { "width": 1216, "height": 832 },
|
||||
"Best Portrait (13:19) 832x1216": { "width": 832, "height": 1216 },
|
||||
"Mini Portrait (768x1152)": { "width": 768, "height": 1152 },
|
||||
"Mini Landscape (1152x768)": { "width": 1152, "height": 768 },
|
||||
"Custom (manual)": { "width": 0, "height": 0 }
|
||||
},
|
||||
|
||||
"Flux": {
|
||||
"High-res (16:9) 1920x1088": { "width": 1920, "height": 1088 },
|
||||
"Square Medium (1:1) 768x768": { "width": 768, "height": 768 },
|
||||
"Portrait Small (3:4) 768x1024": { "width": 768, "height": 1024 },
|
||||
"Landscape Small (4:3) 1024x768": { "width": 1024, "height": 768 },
|
||||
"Wide Small (3:2) 1152x768": { "width": 1152, "height": 768 },
|
||||
"Portrait Medium (2:3) 768x1152": { "width": 768, "height": 1152 },
|
||||
"Ultra Wide Small (2:1) 1536x768": { "width": 1536, "height": 768 },
|
||||
"Portrait Large (1:2) 768x1536": { "width": 768, "height": 1536 },
|
||||
"Square Large (1:1) 1024x1024": { "width": 1024, "height": 1024 },
|
||||
"Portrait Small HD (7:10) 896x1280": { "width": 896, "height": 1280 },
|
||||
"Landscape Small HD (10:7) 1280x896": { "width": 1280, "height": 896 },
|
||||
"Wide Medium (12:7) 1536x896": { "width": 1536, "height": 896 },
|
||||
"Portrait HD (7:12) 896x1536": { "width": 896, "height": 1536 },
|
||||
"Custom (manual)": { "width": 0, "height": 0 }
|
||||
},
|
||||
|
||||
"Qwen-Image": {
|
||||
"Square (1:1)": { "width": 1328, "height": 1328 },
|
||||
"Widescreen (16:9)": { "width": 1664, "height": 928 },
|
||||
"Tall (9:16)": { "width": 928, "height": 1664 },
|
||||
"Landscape (4:3)": { "width": 1472, "height": 1140 },
|
||||
"Portrait (3:4)": { "width": 1140, "height": 1472 },
|
||||
"Custom (manual)": { "width": 0, "height": 0 }
|
||||
},
|
||||
|
||||
"Wan2.2": {
|
||||
"720p HD video": { "width": 1280, "height": 720 },
|
||||
"Custom (manual)": { "width": 0, "height": 0 }
|
||||
"models": {
|
||||
"SD 1.5 Family": [
|
||||
"512",
|
||||
"768"
|
||||
],
|
||||
"SDXL Family (Pony, Juggernaut)": [
|
||||
"768",
|
||||
"1024"
|
||||
],
|
||||
"FLUX Family (FLUX.1, FLUX.2)": [
|
||||
"1024",
|
||||
"1280",
|
||||
"1536"
|
||||
],
|
||||
"SD3 Family (SD3, SD3.5)": [
|
||||
"1024",
|
||||
"1280",
|
||||
"1536"
|
||||
],
|
||||
"Z-Image Family": [
|
||||
"1024",
|
||||
"1280",
|
||||
"1536"
|
||||
],
|
||||
"Hunyuan-DiT": [
|
||||
"1024",
|
||||
"1280"
|
||||
],
|
||||
"Qwen-Image": [
|
||||
"1024",
|
||||
"1280"
|
||||
],
|
||||
"Lumina": [
|
||||
"1024",
|
||||
"1280"
|
||||
],
|
||||
"Ideogram 4": [
|
||||
"1024",
|
||||
"1280",
|
||||
"1536"
|
||||
],
|
||||
"AuraFlow": [
|
||||
"1024"
|
||||
],
|
||||
"Video Models (Wan, Hunyuan, Mochi, LTX)": [
|
||||
"Video"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -47,3 +47,309 @@ Velvet,"{prompt} in smooth velvet fabric, gorgeous exquisite cloth, highly detai
|
||||
"Wool, Fine knit","{prompt} in wool cloth, highly detailed, gorgeous, fine knit cashmere wool fabric","anime, graphic, text, painting, crayon, graphite, glitch, cartoon, ugly, deformed, noisy, blurry, distorted",
|
||||
"Wool, Heavy knit","{prompt} in chunky heavy wool yarn, highly detailed, heavy knit large wool fabric, sailor's wool","anime, graphic, text, painting, crayon, graphite, glitch, cartoon, ugly, deformed, noisy, blurry, distorted",
|
||||
"Wool, Cable knit","{prompt} in chunky heavy cable knit wool yarn, highly detailed, cable knit large wool fabric","anime, graphic, text, painting, crayon, graphite, glitch, cartoon, ugly, deformed, noisy, blurry, distorted",
|
||||
80s Dark Fantasy Photo,"YOUR CONTEXT:
|
||||
You are a photographer working on the set of a dark fantasy film reminiscent of the 1980s (think *Excalibur*, *Legend*, or *Conan the Barbarian*).
|
||||
Your photograph showcases {$spicy-content-with} a heavily stylized composition with practical effects, matte paintings, and the dramatic lighting of that era. The image is shot with soft focus. Lighting is theatrical with saturated colors: deep blues, fiery oranges, and sickly greens. Emphasis is placed on creating a sense of scale and grandeur through forced perspective and miniature work. Post-processing involves adding subtle film grain, bloom effects around light sources, and a slight color shift.
|
||||
YOUR PHOTOGRAPHY:
|
||||
{prompt}",,
|
||||
Anime,"YOUR CONTEXT:
|
||||
You are a Japanese anime artist.
|
||||
Your Japanese animation includes {$spicy-content-with} an ominous atmosphere, clean lines, and dramatic facial expressions. The artwork uses cool and dark tones along with dramatic lighting and shadows that emphasize the central figure and create a somber, intense mood.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Casual Photo,"YOUR CONTEXT:
|
||||
You are an amateur documentary photographer taking low quality photos.
|
||||
Your photographs exhibit {$spicy-content-with} sharp backgrounds, unpolished realism with natural lighting, and candid friendship‑level moments that feel immediate and authentic.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Classic Film Photo,"YOUR CONTEXT:
|
||||
You are a professional cinematographer of iconic classic mid‑century cinema (1950s‑1960s Hollywood golden age).
|
||||
Your photographs are on 35mm film with grain, displaying {$spicy-content-with} a warm color temperature, and an anamorphic lens that creates imperfections and blurry edges.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Comic 1,"YOUR CONTEXT:
|
||||
You are an American artist.
|
||||
Your illustration has a comic book cover style, with vibrant colors and outlined shapes, featuring {$spicy-content-with} realistic and epic details in the style of modern .
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Comic 2,"YOUR CONTEXT:
|
||||
You are an Italian artist.
|
||||
Your illustration has a European comic book style, featuring {$spicy-content-with} black hand-drawn outlines, solid colors, realistic anatomical proportions, and cross-hatching for shading.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Comic 3,"YOUR CONTEXT:
|
||||
You are a European artist creating fiction worlds.
|
||||
Your image is a classic ligne claire futurist illustration, featuring {$spicy-content-with} exceptionally clean lines that define each element with the utmost precision. The composition highlights an intense atmosphere with complex technology. The color palette is vibrant, with flat colors and intricate lines and design.
|
||||
YOUR IMAGE:
|
||||
{prompt}",,
|
||||
Comic Book Cover,"YOUR CONTEXT:
|
||||
You are a celebrated comic book cover artist, renowned for hyper-realistic action and monumental heroics.
|
||||
Your cover art is a Dynamic Heroic Realism illustration, characterized by {$spicy-content-with} intricate anatomical accuracy, meticulously rendered textures (fabric, metal, skin), and an explosive sense of motion. The composition often features dramatic foreshortening and a heroic, powerful pose for the central figure, surrounded by dynamic environmental destruction or energy effects. Lighting is grand and directional, sculpting forms with sharp highlights and deep shadows, ensuring every detail contributes to an overwhelming sense of epic scale and immediate impact.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Cottagecore Pastoral Photo,"YOUR CONTEXT:
|
||||
You are a lifestyle photographer capturing the ""Cottagecore"" aesthetic, celebrating a nostalgic, rural life.
|
||||
Your photograph showcases {$spicy-content-with} a soft-focus, romantic composition bathed in warm, hazy afternoon light. The color palette is soft and organic, featuring sage green, dried rose, lavender, and warm ochre. The atmosphere is cozy and rustic, filled with natural textures like linen, dried flowers, and weathered wood in a peaceful countryside setting.
|
||||
YOUR PHOTOGRAPHY:
|
||||
{prompt}",,
|
||||
Cyberpunk Rain Photo,"YOUR CONTEXT:
|
||||
You are a cinematic photographer specializing in the Neon Noir aesthetic of a futuristic night city.
|
||||
Your photograph showcases {$spicy-content-with} high-contrast lighting with deep shadows and glowing neon accents. The color palette is dominated by electric cyan, hot magenta, and deep violet. The atmosphere is moody and atmospheric, featuring wet surfaces, rain reflections, and hazy mist.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Digital Cyberpunk,"YOUR CONTEXT:
|
||||
You are a digital artist working in a dystopian, technologically advanced future.
|
||||
Your illustration is a Cyberpunk Noir scene, characterized by {$spicy-content-with} harsh, dramatic lighting that casts long, sharp shadows, reflecting the grimy underbelly of a futuristic scene. It employs a limited color palette dominated by deep blues, neon greens, and stark oranges, giving a mysterious aesthetic.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Drone PhotoPhoto,"YOUR CONTEXT:
|
||||
You are an aerial photographer who enjoys using wide-angle drone cams.
|
||||
Your photographs exhibit {$spicy-content-with} panoramic scenes captured from afar, high up with elevated perspectives and intense colors.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Electric Blue Outline,"YOUR CONTEXT:
|
||||
Your image showcases {$spicy-content-with} a digital cyberpunk draw, characterized by vibrant and saturated colors with solid backgrounds and blue outlines.
|
||||
YOUR IMAGE:
|
||||
{prompt}",,
|
||||
Epic Greg,"YOUR CONTEXT:
|
||||
You are a master digital painter of heroic sagas.
|
||||
Your illustration is a grand-scale digital oil painting that includes {$spicy-content-with} characterized by masterful, sweeping brushwork and thick impasto textures. It features dramatic, cinematic lighting with intense chiaroscuro, where light sources like embers or magical energy pierce through atmospheric haze, smoke, and swirling clouds. The composition is heroic and classically inspired, using a rich, moody palette of deep earth tones accented by vibrant, glowing highlights for a legendary and immersive feel.
|
||||
YOUR PAINTING:
|
||||
{prompt}",,
|
||||
Flash 90s PhotoPhoto,"YOUR CONTEXT:
|
||||
You are an amateur photographer, taking photos with point‑and‑shoot cam-quality, in the early 1990s.
|
||||
Your photographs exhibit {$spicy-content-with} a rough, low-resolution quality, washed-out colors, including a harsh built-in flash, grainy texture, and overexposed highlights, capturing a casual atmosphere that evokes nostalgia.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Folk-Art Mosaic,"YOUR CONTEXT:
|
||||
You are a traditional artisan celebrating the vibrant colors and symbolic imagery of folk art.
|
||||
Your artwork is a Folk Art Mosaic, composed of {$spicy-content-with} small, tessellated pieces of vibrant, solid colors, forming bold patterns and stylized representations of everyday life or mythical creatures. The aesthetic is naive and handcrafted, with a rich texture and a joyful, earthy color palette.
|
||||
YOUR ARTWORK:
|
||||
{prompt}",,
|
||||
Glass Encased Advertising,"YOUR CONTEXT:
|
||||
An eye-level, realistic photo of a glass-encased advertising poster (mupi) located on a clean city sidewalk. There are subtle reflections of nearby buildings and trees on the glass surface. The lighting is natural overcast daylight.
|
||||
WHAT'S BEHIND THE REFLECTIVE GLASS:
|
||||
A faded and sun-faded, low quality printed advertisement, showing: {prompt}",,
|
||||
Gothic Engraving,"YOUR CONTEXT:
|
||||
You are an artist inspired by the macabre aesthetics of 19th-century gothic literature and medieval manuscripts.
|
||||
Your illustration is a Neo-Gothic engraving, executed with intricate linework. It features {$spicy-content-with} dramatic chiaroscuro and a sense of brooding mystery. The color palette is muted, favoring deep indigos, charcoal grays, and touches of crimson, evoking a sense of antique dread.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
High-Key Fashion PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a fashion photographer who creates ultra-bright photos for luxury productions.
|
||||
Your photograph showcases {$spicy-content-with} a high‑key composition shot flooded with soft studio lighting. The exposure is over‑lit with white background, eliminating shadows and delivering a crisp, polished look. Colors are saturated yet controlled (vivid reds, cobalt blues, and crisp whites) while the photo has immaculate details thanks to high‑resolution capture and minimal post‑processing to maintain the airy, glamorous aesthetic.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Ink Draw,"YOUR CONTEXT:
|
||||
You are an ink drawing artist.
|
||||
Your illustration is a realistic ink drawing featuring {$spicy-content-with} fine cross-hatching and stippling techniques. These methods create deep shadows and highlights using only black lines. The image includes large areas of white space and Imagine the colors as all shades of gray.
|
||||
The colors mentioned are actually shades of gray.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Ink Frenzy,"YOUR CONTEXT:
|
||||
You are an underground street-art comic illustrator.
|
||||
Your image is a high-energy, chaotic ink drawing featuring {$spicy-content-with} aggressive brush strokes, intentional ink splatters, and ""controlled mess"" textures. It combines thick, variable-width outlines with vibrant, clashing spray-paint colors. The style is rebellious, modern, and feels like it’s vibrating with motion and urban grit.
|
||||
YOUR IMAGE:
|
||||
{prompt}",,
|
||||
Kawaii Pop Photo,"YOUR CONTEXT:
|
||||
You are a fashion photographer specializing in the bright, playful aesthetic of Kawaii Pop.
|
||||
Your photograph showcases {$spicy-content-with} a high-key composition flooded with vibrant, saturated colors. The exposure is bright and cheerful, with a focus on pastel pinks, electric blues, and sunny yellows. Scene is styled in over-the-top Kawaii fashion with playful poses. The background is simple and colorful, with elements like balloons, confetti, or cartoonish graphics.
|
||||
YOUR PHOTOGRAPHY:
|
||||
{prompt}",,
|
||||
Light Painting Photo,"YOUR CONTEXT:
|
||||
You are an experimental photographer who enjoys creating light painting images with long exposures and LED sources.
|
||||
Your photographs exhibit {$spicy-content-with} luminous trails, vibrant colors, and elements that are strikingly illuminated by the long exposure.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Light and Airy PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a photographer who loves bright, ethereal, and romantic images.
|
||||
Your photograph is bathed in soft, diffused light, creating a bright and airy aesthetic. Colors are pastel and delicate, with a focus on whites, creams, and light blues. The image features {$spicy-content-with} a shallow depth of field, blurring the background and drawing attention to the subject. Post-processing emphasizes highlights and reduces shadows, resulting in a clean, luminous look.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
LomographyPhoto,"YOUR CONTEXT:
|
||||
You are an adventurous experimental photographer exploring the world through a lomographic lens.
|
||||
Your photographs exhibit {$spicy-content-with} film grain, colorful lens flares, soft focus with motion blur, and analog filter effects, trying to capture emotions.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Low-Poly Render,"YOUR CONTEXT:
|
||||
Your unity engine render shows {$spicy-content-with} a low-poly 3d platformer level made from low-poly meshes and low-quality textures.
|
||||
YOUR UNITY ENGINE RENDER:
|
||||
{prompt}",,
|
||||
LowRes Pixel Art,"YOUR CONTEXT:
|
||||
You are a pixel artist.
|
||||
Your illustration is a low-resolution pixel art featuring {$spicy-content-with} chunky pixels and vibrant intense colors, arcade game style.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Manga,"YOUR CONTEXT:
|
||||
You are a Japanese manga artist.
|
||||
Your illustration features {$spicy-content-with} black and white manga-style that includes manga screentone patterns with high-contrast black and white drawing, in a violent atmosphere. Always imagine colors as shades of gray.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Minimalist Digital Illustration,"YOUR CONTEXT:
|
||||
You are a cover artist known for powerful, minimalist designs.
|
||||
Your cover art is a bold graphic iconography piece, featuring {$spicy-content-with} stark, impactful silhouettes and clean, sharp lines that define forms with absolute clarity. The color palette is vibrant, employing large fields of solid color with subtle gradients. Most importantly, the proportions are exaggerated, and the perspective is extremely distorted, creating a sense of vertigo and action.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Minimalist PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a photographer who prefers serene and tranquil images.
|
||||
Your photographs exhibit {$spicy-content-with} high contrast and clean, minimalist compositions that emphasize empty space to highlight negative space.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Modern Impressionism,"YOUR CONTEXT:
|
||||
Your image showcases {$spicy-content-with} a loose and highly expressive brushstroke, characterized by a rich texture created through visible layers of paint and quick, broad strokes reminiscent of modern Impressionism. This technique employing a limited yet impactful color palette with strong contrasts of light and shadow and a focus on warm and cool tones to create a dynamic and energetic feel.
|
||||
YOUR IMAGE:
|
||||
{prompt}",,
|
||||
Modern Ukiyo-e Print,"YOUR CONTEXT:
|
||||
You are a master of traditional Japanese woodblock printing adapted to a modern narrative.
|
||||
Your illustration features {$spicy-content-with} bold, flowing outlines and flat areas of color with subtle wood-grain textures. The composition uses dramatic perspective typical of ""Ukiyo-e"" art, with stylized waves, clouds, or smoke, and a color palette of deep indigo, vermillion, and ochre on an aged washi paper background.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Noir PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a cinematographer who works in dark movies.
|
||||
Your photographs exhibit {$spicy-content-with} intense side lighting and gobo‑crafted patterns to sculpt deep, sharply defined shadows, along with a muted Ektachrome palette that evokes film noir.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Nostalgic 90s Photo,"YOUR CONTEXT:
|
||||
You are a street photographer capturing the raw, rebellious energy of the 1990s underground scene.
|
||||
Your photograph showcases {$spicy-content-with} a low-fidelity, grainy analog film aesthetic. The exposure features harsh camera flash, slight motion blur, and light leaks. The colors are slightly de-saturated with warm skin tones and heavy shadows, giving it a candid, ""snapshot"" feel.
|
||||
YOUR PHOTOGRAPHY:
|
||||
{prompt}",,
|
||||
Orthochromatic Spirit PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a photographer inspired by the look of early photographic processes, specifically orthochromatic and colorized films.
|
||||
Your photograph showcases {$spicy-content-with} a scene with a high-contrast, blue-sensitive aesthetic. Reds appear very dark, while blues and greens are bright. The image is characterized by a stark, graphic quality. Post-processing focuses on enhancing the contrast and emphasizing the tonal separation.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Paper-Cut Diorama,"YOUR CONTEXT:
|
||||
You are a conceptual artist creating a tactile, handcrafted world.
|
||||
Your illustration is a digital ""paper-cut"" style including {$spicy-content-with} distinct layered shapes with subtle drop shadows to create depth. Each element looks like it was cut from different textures of colored construction paper. The style is geometric, clean, and vibrant, making the comic look like a 3D physical diorama.
|
||||
YOUR IMAGE:
|
||||
{prompt}",,
|
||||
Phone Photo,"YOUR CONTEXT:
|
||||
Your photographs has android phone cam-quality.
|
||||
Your photographs exhibit {$spicy-content-with} surprising compositions, sharp complex backgrounds, natural lighting, and candid moments that feel immediate and authentic.
|
||||
Your photographs are actual gritty candid photographic background.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Pop PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a contemporary pop artist known for your vibrant, oversaturated palettes and energetic, graphic compositions.
|
||||
Your photographs exhibit {$spicy-content-with} exaggerated colors and solid backgrounds using Ben-Day dots, achieving an unconventional and clearly pop art effect.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Pop-Art,"YOUR CONTEXT:
|
||||
You are a bold artist.
|
||||
Your illustration features {$spicy-content-with} Pop Art style, characterized by bold vibrant colors. The colors are executed using the pointillist technique, where dots of color come together to create the overall picture. Dazzling patterns and comic style characters. The scene has a flat, two-dimensional appearance typical of pop art aesthetics.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Portra Film PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a photographer who appreciates the classic aesthetic of Kodak Portra film.
|
||||
Your photograph emulates that look, known for its soft colors, fine grain, and natural skin tones. The image features {$spicy-content-with} a subtle warmth, with a focus on accurate color rendition and a gentle, diffused glow. Highlights are smooth and creamy, while shadows retain detail. Minimal post-processing is applied to preserve the organic, film-like quality.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Post-Processed Artistry,"YOUR CONTEXT:
|
||||
You are a digital artist.
|
||||
Your image is a masterpiece featuring {$spicy-content-with} heavy chromatic aberration, and digital intense color. The aesthetic is ultra-modern and fragmented, using a high-contrast palette of neon purples and cyans, creating a sense of a digital reality.
|
||||
YOUR IMAGE:
|
||||
{prompt}",,
|
||||
Production PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a Hollywood filmmaker making a high-budget film.
|
||||
Your photographs exhibit {$spicy-content-with} atmospheric composition that emphasize intense emotions using selective focus, and warm and cold colors with high quality studio lighting.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Quiet Luxury Photo,"YOUR CONTEXT:
|
||||
You are an editorial fashion photographer specializing in the Old Money aesthetic.
|
||||
Your photograph showcases {$spicy-content-with} a sophisticated, clean composition using natural, soft morning light. The color palette is muted and neutral, focusing on beige, cream, navy blue, and forest green. The scene feels expensive and timeless, set in a luxury location.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Retro 80s ,"YOUR CONTEXT:
|
||||
Your illustration is made with brightly colored bold lines and touches of cracked paint, while having {$spicy-content-with} a 1980s graphic design aesthetic.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Risograph Print,"YOUR CONTEXT:
|
||||
You are an underground indie press printer.
|
||||
Your illustration is a tactile Risograph-style print, featuring {$spicy-content-with} vibrant fluorescent ink and a heavy grainy texture. It uses a punchy palette of neon pink, intense yellow, and deep teal.
|
||||
YOUR MULTI SUBJECT PRINT:
|
||||
{prompt}",,
|
||||
Shadow Fantasy Illustration,"YOUR CONTEXT:
|
||||
You are a dark fantasy comic book artist.
|
||||
Your drawing is a high-contrast illustration characterized by {$spicy-content-with} massive areas of solid black ink and minimal white highlights. Inspired by ""Mignola-esque"" aesthetics, it uses chunky, angular silhouettes and geometric shadows to define form rather than internal lines. The atmosphere is ancient, heavy, and supernatural.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Simple 3D Render,"YOUR CONTEXT:
|
||||
You are a 3d artist.
|
||||
Your render is a high-gloss, illustration featuring {$spicy-content-with} ultra-reflective surfaces. The style is dark with dark backgrounds and iridescent highlights.
|
||||
YOUR RENDER:
|
||||
{prompt}",,
|
||||
Spotlight Stage Photo,"YOUR CONTEXT:
|
||||
You are a professional stage and theater photographer capturing dramatic performances.
|
||||
Your photographs exhibit {$spicy-content-with} a single, high-intensity overhead spotlight that creates a sharp circular pool of light, dramatic chiaroscuro contrast that isolates the subject against a pitch-black background, and visible volumetric light beams with subtle dust motes for an authentic theatrical atmosphere.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Street Documentary PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a documentary photographer chronicling urban life.
|
||||
Your photograph showcases {$spicy-content-with} candid moments in natural street environments. The image employs a natural color balance, modest contrast, and a shallow depth of field to isolate subjects within bustling scenes. Emphasis is placed on authentic emotion, body language, and the interplay of ambient city light (neon signs, street lamps). Minimal post‑processing preserves the raw, honest feel—only slight exposure adjustments and noise reduction are applied to maintain the immediacy of the moment.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Studio Anime,"YOUR CONTEXT:
|
||||
You are a Japanese anime artist.
|
||||
Your Japanese animation includes {$spicy-content-with} warm artwork inspired by Studio Ghibli, with detailed characters and a whimsical aesthetic, full of emotion.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Synthwave Photo,"YOUR CONTEXT:
|
||||
You are a photographer inspired by the retro-futuristic visuals of the 1980s.
|
||||
Your photograph showcases {$spicy-content-with} Synthwave aesthetic, characterized by neon colors and geometric shapes, it includes vibrant pinks, purples, and blues, with a glowing effect. Grids, scanlines, and a retro-futuristic atmosphere. The photograph feels like a scene from a classic 80s sci-fi film.
|
||||
Real people against a computer-generated background.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Teal and Orange PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a color specialist photographer.
|
||||
Your photograph showcases {$spicy-content-with} a satured teal and orange colors. The image features cool teal tones in the shadows and highlights, balanced by warm orange tones in the midtones and skin tones, creating a vibrant photography with high contrast and vivid colors.
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Tilt Shift / Toy PhotoPhoto,"YOUR CONTEXT:
|
||||
You are a photographer who enjoys using tilt‑shift lenses to turn real‑world scenes into miniature toy models.
|
||||
Your photographs exhibit {$spicy-content-with} crisp, high‑resolution details captured in an exaggerated perspective, with a very narrow focus plane, and a dreamy, toy‑like atmosphere that creates the classic “miniature” illusion.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Unsettling,"YOUR CONTEXT:
|
||||
You are an illustrator of dark and disturbing themes.
|
||||
Your illustration includes {$spicy-content-with} stippling textures, dramatic raking side lighting, and a dread-filled atmosphere that is oppressive and claustrophobic. High contrast emphasizes form and shadow, employing cinematic chiaroscuro for depth.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Vintage Comic,"YOUR CONTEXT:
|
||||
You are a 1950s artist.
|
||||
Your illustration in a worn sheet of paper features {$spicy-content-with} a vintage 1950s comic book style made with hand-drawn lines and painted in solid white, red, blue, and black.
|
||||
YOUR ILLUSTRATION:
|
||||
{prompt}",,
|
||||
Vintage Illustration,"YOUR CONTEXT:
|
||||
You are a sci-fi pulp magazine illustrator from the 1940s.
|
||||
Your drawing is a lush, painted-style comic cover including {$spicy-content-with} dramatic, heroic lighting and a vivid ""Technicolor"" palette of saturated oranges, deep teals, and bright yellows. It features soft airbrushed textures, muscular anatomy, and a grainy film-stock finish that evokes a sense of retro-futuristic adventure.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Vintage PhotoPhoto,"YOUR CONTEXT:
|
||||
You are an 80s photographer who enjoys informal shots.
|
||||
Your worn vintage photographs exhibit {$spicy-content-with} a minimalist, amateurish composition, warm desaturated tones and a soft focus that creates a cozy atmosphere.
|
||||
YOUR PHOTO:
|
||||
{prompt}",,
|
||||
Vintage VGA Monitor,"YOUR CONTEXT:
|
||||
You have an old VGA CRT monitor sitting on a wooden desk, and a window is reflected on its screen. The monitor's casing has a raised black inscription in the upper left corner that reads ""VGA"". The screen has a slight curve and sweep lines typical of CRT displays.
|
||||
WHAT'S INSIDE YOUR MONITOR'S SCREEN:
|
||||
A low-resolution, 2D pixel art platform videogame form early 1990s, featuring: {prompt}",,
|
||||
Vintage Polaroid Photo,"YOUR CONTEXT:
|
||||
You are a nostalgic photographer who embraces instant film’s tactile charm.
|
||||
Your Polaroid photograph is using vintage‑style film. The photograph features the iconic square format including {$spicy-content-with} a soft focus, a subtle vignetting, and the characteristic pastel color shift of instant film. Showing candid moments or intimate still‑lifes. The photograph retains the authentic border, emulsion texture, and occasional “film‑like” imperfections (light leaks, scratches).
|
||||
YOUR PHOTOGRAPH:
|
||||
{prompt}",,
|
||||
Whimsical Watercolor,"YOUR CONTEXT:
|
||||
You are an illustrator specializing in gentle, enchanting narratives for children's books.
|
||||
Your drawing is a whimsical watercolor image, featuring {$spicy-content-with} loose, fluid watercolor washes, delicate linework, and playful, anthropomorphic elements within a lush natural setting. The style is soft and inviting, with a vibrant yet gentle color palette that captures the magic of innocence.
|
||||
YOUR DRAWING:
|
||||
{prompt}",,
|
||||
Wide Angle / Peephole,"YOUR CONTEXT:
|
||||
Your peephole shows {$spicy-content-with} a shot from a high angle, inside a fisheye lens distortion glass circle, highly distorted with a wide angle.
|
||||
YOUR PEEPHOLE:
|
||||
{prompt}",,
|
||||
Witchcore Photo,"YOUR CONTEXT:
|
||||
You are a photographer drawn to the mystical and earthy aesthetic of Witchcore.
|
||||
Your photograph showcases {$spicy-content-with} a moody, atmospheric scene steeped in natural elements. The image employs a natural color balance, with a focus on deep greens, browns, and blacks. Emphasis is placed on textures: moss, wood, crystals, and flowing fabrics. The photograph has a raw, organic feel, with mystical ambiance.
|
||||
YOUR PHOTOGRAPHY:
|
||||
{prompt}",,
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@@ -0,0 +1,248 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
|
||||
// CONSTANTS
|
||||
const GLOBAL_HIDE_SETTING_ID = "SATA_UtilityNode.GlobalPreviewHide";
|
||||
const PREVIEW_MACHINE_CLASS = "Preview_Machine";
|
||||
const SAVE_MACHINE_CLASS = "Save_Machine";
|
||||
|
||||
// Track hover state
|
||||
const hoveredNodeIds = new Set();
|
||||
|
||||
// Helper to get settings for both ComfyUI V1 and V2
|
||||
function getSettingValue(id, defaultValue) {
|
||||
if (app.extensionManager && app.extensionManager.setting) {
|
||||
const val = app.extensionManager.setting.get(id);
|
||||
return val !== undefined ? val : defaultValue;
|
||||
} else if (app.ui && app.ui.settings) {
|
||||
return app.ui.settings.getSettingValue(id, defaultValue);
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
app.registerExtension({
|
||||
name: "SATA_UtilityNode.Preview_Machine",
|
||||
|
||||
settings: [
|
||||
{
|
||||
id: GLOBAL_HIDE_SETTING_ID,
|
||||
name: "SATA Utility: Global Hide Previews",
|
||||
type: "boolean",
|
||||
defaultValue: false,
|
||||
onChange: (value) => {
|
||||
if (app.graph) app.graph.setDirtyCanvas(true, true);
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
async setup() {
|
||||
setupGlobalMouseTracker();
|
||||
},
|
||||
|
||||
async nodeCreated(node) {
|
||||
if (isTargetNode(node)) {
|
||||
setupNodeHider(node);
|
||||
}
|
||||
},
|
||||
|
||||
async loadedGraphNode(node) {
|
||||
if (isTargetNode(node)) {
|
||||
setupNodeHider(node);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function isTargetNode(node) {
|
||||
return node.comfyClass === "PreviewImage" ||
|
||||
node.comfyClass === "SaveImage" ||
|
||||
node.comfyClass === PREVIEW_MACHINE_CLASS ||
|
||||
node.comfyClass === SAVE_MACHINE_CLASS;
|
||||
}
|
||||
|
||||
function shouldHideNode(node) {
|
||||
const globalHide = getSettingValue(GLOBAL_HIDE_SETTING_ID, false);
|
||||
|
||||
if (node.comfyClass === PREVIEW_MACHINE_CLASS) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (node.comfyClass === SAVE_MACHINE_CLASS) {
|
||||
const w = node.widgets?.find(w => w.name === "hide_preview");
|
||||
if (w) {
|
||||
if (w.value === true) return true;
|
||||
if (w.value === false && !globalHide) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return globalHide;
|
||||
}
|
||||
|
||||
function isMouseOverNode(node) {
|
||||
if (!app.canvas || !app.canvas.graph_mouse) return false;
|
||||
|
||||
const mouse = app.canvas.graph_mouse;
|
||||
const x = mouse[0];
|
||||
const y = mouse[1];
|
||||
|
||||
return x >= node.pos[0] &&
|
||||
x <= (node.pos[0] + node.size[0]) &&
|
||||
y >= node.pos[1] &&
|
||||
y <= (node.pos[1] + node.size[1]);
|
||||
}
|
||||
|
||||
function setupGlobalMouseTracker() {
|
||||
let rafPending = false;
|
||||
|
||||
const checkAndUpdate = () => {
|
||||
if (!app.graph || !app.graph._nodes) return;
|
||||
|
||||
let changed = false;
|
||||
|
||||
for (const node of app.graph._nodes) {
|
||||
if (!isTargetNode(node)) continue;
|
||||
|
||||
const currentlyHovered = isMouseOverNode(node);
|
||||
const wasHovered = hoveredNodeIds.has(node.id);
|
||||
|
||||
if (currentlyHovered !== wasHovered) {
|
||||
if (currentlyHovered) {
|
||||
hoveredNodeIds.add(node.id);
|
||||
} else {
|
||||
hoveredNodeIds.delete(node.id);
|
||||
}
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
app.graph.setDirtyCanvas(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("mousemove", () => {
|
||||
if (!rafPending) {
|
||||
rafPending = true;
|
||||
requestAnimationFrame(() => {
|
||||
rafPending = false;
|
||||
checkAndUpdate();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("mouseout", (e) => {
|
||||
if (e.relatedTarget === null) {
|
||||
hoveredNodeIds.clear();
|
||||
if (app.graph) app.graph.setDirtyCanvas(true, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setupNodeHider(node) {
|
||||
if (node._sata_hider_v6) return;
|
||||
node._sata_hider_v6 = true;
|
||||
|
||||
// Function to check if node should be hidden right now
|
||||
const shouldHideNow = () => {
|
||||
const shouldHide = shouldHideNode(node);
|
||||
const hovered = hoveredNodeIds.has(node.id);
|
||||
return shouldHide && !hovered;
|
||||
};
|
||||
|
||||
// Find and patch all image-related widgets on the node
|
||||
const patchWidgets = () => {
|
||||
if (!node.widgets) return;
|
||||
|
||||
for (const widget of node.widgets) {
|
||||
// Check if this is an image widget (they typically have draw/drawWidget methods)
|
||||
if (widget._sata_patched) continue;
|
||||
|
||||
// Patch the draw method if it exists
|
||||
if (widget.draw && typeof widget.draw === 'function') {
|
||||
const origDraw = widget.draw.bind(widget);
|
||||
widget.draw = function (ctx, node, widgetWidth, y, widgetHeight) {
|
||||
if (shouldHideNow()) {
|
||||
// Draw hidden placeholder instead
|
||||
ctx.save();
|
||||
ctx.fillStyle = "#1a1a1a";
|
||||
ctx.fillRect(0, y, widgetWidth, widgetHeight);
|
||||
|
||||
ctx.fillStyle = "#888";
|
||||
ctx.font = "12px Arial";
|
||||
ctx.textAlign = "center";
|
||||
ctx.textBaseline = "middle";
|
||||
ctx.fillText("Hidden", widgetWidth / 2, y + widgetHeight / 2 - 8);
|
||||
ctx.font = "9px Arial";
|
||||
ctx.fillStyle = "#666";
|
||||
ctx.fillText("(Hover to Reveal)", widgetWidth / 2, y + widgetHeight / 2 + 8);
|
||||
ctx.restore();
|
||||
return;
|
||||
}
|
||||
return origDraw(ctx, node, widgetWidth, y, widgetHeight);
|
||||
};
|
||||
widget._sata_patched = true;
|
||||
}
|
||||
|
||||
// Also patch drawWidget if it exists (some widgets use this)
|
||||
if (widget.drawWidget && typeof widget.drawWidget === 'function') {
|
||||
const origDrawWidget = widget.drawWidget.bind(widget);
|
||||
widget.drawWidget = function (...args) {
|
||||
if (shouldHideNow()) {
|
||||
// Skip drawing - the onDrawForeground will handle the overlay
|
||||
return;
|
||||
}
|
||||
return origDrawWidget(...args);
|
||||
};
|
||||
widget._sata_patched = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Patch widgets initially and on any update
|
||||
patchWidgets();
|
||||
|
||||
// Also intercept onDrawBackground to catch widget additions
|
||||
const origOnDrawBackground = node.onDrawBackground;
|
||||
node.onDrawBackground = function (ctx) {
|
||||
patchWidgets(); // Re-check for new widgets
|
||||
if (origOnDrawBackground) {
|
||||
origOnDrawBackground.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
// Draw overlay in onDrawForeground as backup
|
||||
const origOnDrawForeground = node.onDrawForeground;
|
||||
node.onDrawForeground = function (ctx) {
|
||||
if (origOnDrawForeground) {
|
||||
origOnDrawForeground.apply(this, arguments);
|
||||
}
|
||||
|
||||
if (shouldHideNow()) {
|
||||
ctx.save();
|
||||
ctx.fillStyle = "#1a1a1a";
|
||||
ctx.fillRect(0, 0, this.size[0], this.size[1]);
|
||||
|
||||
ctx.fillStyle = "#888";
|
||||
ctx.font = "bold 14px Arial";
|
||||
ctx.textAlign = "center";
|
||||
ctx.textBaseline = "middle";
|
||||
ctx.fillText("Hidden", this.size[0] / 2, this.size[1] / 2 - 10);
|
||||
|
||||
ctx.font = "10px Arial";
|
||||
ctx.fillStyle = "#666";
|
||||
ctx.fillText("(Hover to Reveal)", this.size[0] / 2, this.size[1] / 2 + 10);
|
||||
ctx.restore();
|
||||
}
|
||||
};
|
||||
|
||||
// Widget callback for Save_Machine
|
||||
if (node.comfyClass === SAVE_MACHINE_CLASS) {
|
||||
const hideWidget = node.widgets?.find(w => w.name === "hide_preview");
|
||||
if (hideWidget) {
|
||||
const origCallback = hideWidget.callback;
|
||||
hideWidget.callback = function (value) {
|
||||
if (origCallback) origCallback.call(this, value);
|
||||
if (app.graph) app.graph.setDirtyCanvas(true, true);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,522 @@
|
||||
import { app } from "../../../scripts/app.js";
|
||||
|
||||
// Helper to get settings for both ComfyUI V1 and V2
|
||||
function getSettingValue(id, defaultValue) {
|
||||
if (app.extensionManager && app.extensionManager.setting) {
|
||||
const val = app.extensionManager.setting.get(id);
|
||||
return val !== undefined ? val : defaultValue;
|
||||
} else if (app.ui && app.ui.settings) {
|
||||
return app.ui.settings.getSettingValue(id, defaultValue);
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
function fuzzyMatch(text, query) {
|
||||
const textLower = text.toLowerCase();
|
||||
const queryLower = query.toLowerCase();
|
||||
if (!queryLower) return { match: true, score: 0 };
|
||||
|
||||
let queryIdx = 0;
|
||||
let score = 0;
|
||||
let lastMatchIdx = -1;
|
||||
|
||||
for (let i = 0; i < textLower.length; i++) {
|
||||
if (textLower[i] === queryLower[queryIdx]) {
|
||||
if (lastMatchIdx !== -1) {
|
||||
score += (i - lastMatchIdx - 1);
|
||||
}
|
||||
lastMatchIdx = i;
|
||||
queryIdx++;
|
||||
if (queryIdx === queryLower.length) {
|
||||
score += (textLower.length - i - 1) * 0.1;
|
||||
return { match: true, score: score };
|
||||
}
|
||||
}
|
||||
}
|
||||
return { match: false, score: Infinity };
|
||||
}
|
||||
|
||||
// Register extension
|
||||
app.registerExtension({
|
||||
name: "SATA_UtilityNode.PromptAutocomplete",
|
||||
|
||||
settings: [
|
||||
{
|
||||
id: "SATA_UtilityNode.PromptAutocomplete.Trigger",
|
||||
name: "Prompt Autocomplete Trigger Character",
|
||||
type: "text",
|
||||
defaultValue: "#",
|
||||
},
|
||||
{
|
||||
id: "SATA_UtilityNode.PromptAutocomplete.Global",
|
||||
name: "Prompt Autocomplete Global Mode (All Text Widgets)",
|
||||
type: "boolean",
|
||||
defaultValue: false,
|
||||
}
|
||||
],
|
||||
|
||||
async initAutocompleteForNode(node) {
|
||||
const isTargetNode = node.comfyClass === "PromptAutocomplete" || node.comfyClass === "Prompt_Machine";
|
||||
const isGlobal = getSettingValue("SATA_UtilityNode.PromptAutocomplete.Global", false);
|
||||
|
||||
if (!isTargetNode && !isGlobal) return;
|
||||
|
||||
// Find text widgets
|
||||
const textWidgets = node.widgets?.filter(w => w.type === "customtext" || w.type === "text" || w.type === "STRING");
|
||||
if (!textWidgets) return;
|
||||
|
||||
// Load snippets (cache them)
|
||||
if (!this.snippetsCache) {
|
||||
await this.loadSnippets();
|
||||
}
|
||||
|
||||
textWidgets.forEach(w => {
|
||||
this.attachAutocomplete(w);
|
||||
});
|
||||
},
|
||||
|
||||
async nodeCreated(node) {
|
||||
this.initAutocompleteForNode(node);
|
||||
},
|
||||
|
||||
async loadedGraphNode(node) {
|
||||
this.initAutocompleteForNode(node);
|
||||
},
|
||||
|
||||
snippetsCache: null,
|
||||
|
||||
async loadSnippets() {
|
||||
try {
|
||||
// 1. List files
|
||||
const listResp = await fetch("/sata/autocomplete/list");
|
||||
const listData = await listResp.json();
|
||||
const files = listData.files || [];
|
||||
|
||||
this.snippetsCache = {};
|
||||
|
||||
// 2. Load content for each file
|
||||
for (const file of files) {
|
||||
const contentResp = await fetch(`/sata/autocomplete/get?file=${encodeURIComponent(file)}`);
|
||||
const contentData = await contentResp.json();
|
||||
this.snippetsCache[file] = contentData.items || [];
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.error("[PromptAutocomplete] Failed to load snippets:", err);
|
||||
}
|
||||
},
|
||||
|
||||
attachAutocomplete(widget) {
|
||||
// We need to hook into the DOM element of the widget
|
||||
// ComfyUI widgets usually expose their input element via `inputEl` or we might need to find it.
|
||||
// For standard multiline text widgets, it's often a textarea.
|
||||
|
||||
// Wait for the widget to have an element
|
||||
const originalDraw = widget.draw;
|
||||
const self = this;
|
||||
|
||||
// Hook into the input element creation/usage
|
||||
// NOTE: ComfyUI's customtext widget often creates a textarea.
|
||||
// We can try to find the textarea in the DOM if it's active, or hook the input callback.
|
||||
|
||||
// A more robust way for ComfyUI widgets:
|
||||
// The widget has an `inputEl` property if it's a DOM widget.
|
||||
|
||||
// Let's try to hook the `inputEl` if it exists, or wait for it.
|
||||
|
||||
// Helper to setup the listener
|
||||
function setupListener(input) {
|
||||
if (input.dataset.hasAutocomplete) return;
|
||||
input.dataset.hasAutocomplete = "true";
|
||||
|
||||
input.addEventListener("keydown", (e) => self.handleKeydown(e, input, widget));
|
||||
input.addEventListener("input", (e) => self.handleInput(e, input, widget));
|
||||
}
|
||||
|
||||
// Check if inputEl already exists
|
||||
if (widget.inputEl) {
|
||||
setupListener(widget.inputEl);
|
||||
} else {
|
||||
// If checking widget.draw:
|
||||
// Standard LiteGraph widgets might not have an instance-level draw method, relying on the class prototype or default.
|
||||
// If we blindly assign widget.draw = ..., we obscure the default behavior (disappearing widget).
|
||||
// So we only wrap if originalDraw exists (or is on the prototype? widget points to instance).
|
||||
|
||||
// Safer approach: check if draw is defined on the instance or try to get it from prototype?
|
||||
// Actually, if we just want to catch inputEl creation, maybe polling is safer for standard widgets
|
||||
// if we suspect they don't have a direct 'draw' method we can wrap nicely.
|
||||
|
||||
if (originalDraw) {
|
||||
widget.draw = function (ctx, node, widgetWidth, y, widgetHeight) {
|
||||
const result = originalDraw.apply(this, arguments);
|
||||
if (this.inputEl) {
|
||||
setupListener(this.inputEl);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
} else {
|
||||
// Fallback: poll for inputEl a few times
|
||||
const poll = setInterval(() => {
|
||||
if (widget.inputEl) {
|
||||
setupListener(widget.inputEl);
|
||||
clearInterval(poll);
|
||||
}
|
||||
}, 200);
|
||||
// Stop polling after 5 seconds to save resources
|
||||
setTimeout(() => clearInterval(poll), 5000);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// --- Autocomplete Logic ---
|
||||
|
||||
popup: null,
|
||||
active: false,
|
||||
currentCategory: null, // null = showing categories, string = showing items
|
||||
selectedIndex: 0,
|
||||
filteredItems: [],
|
||||
triggerChar: "#",
|
||||
|
||||
handleInput(e, input, widget) {
|
||||
const trigger = getSettingValue("SATA_UtilityNode.PromptAutocomplete.Trigger", "#");
|
||||
this.triggerChar = trigger;
|
||||
|
||||
const val = input.value;
|
||||
const cursor = input.selectionStart;
|
||||
|
||||
// Simple check: is the character before cursor the trigger?
|
||||
// Or are we in a "trigger session"?
|
||||
|
||||
// If we just typed the trigger
|
||||
if (e.data === trigger) {
|
||||
this.showPopup(input, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
// If active, update filter
|
||||
if (this.active) {
|
||||
// Find the text after the last trigger
|
||||
const lastTriggerIndex = val.lastIndexOf(trigger, cursor - 1);
|
||||
if (lastTriggerIndex === -1) {
|
||||
this.closePopup();
|
||||
return;
|
||||
}
|
||||
|
||||
const query = val.substring(lastTriggerIndex + 1, cursor);
|
||||
|
||||
// Check if we have a category selected (format: #category:query)
|
||||
// But wait, the plan said: Select Category -> Then Items.
|
||||
// So maybe we just filter categories first.
|
||||
|
||||
if (this.currentCategory) {
|
||||
// We are inside a category
|
||||
// Check if the query contains the category prefix?
|
||||
// Actually, let's keep it simple:
|
||||
// 1. Type # -> Show list of files (categories)
|
||||
// 2. Select file -> Insert "filename:" ? Or just switch mode?
|
||||
// Let's do: Type # -> Show categories.
|
||||
// If user types more, filter categories.
|
||||
// If user selects category, we switch to showing items of that category.
|
||||
// But how do we represent that in text?
|
||||
// Maybe we don't change text, just internal state?
|
||||
// Standard way: #category:item
|
||||
|
||||
// Let's parse the text to see where we are.
|
||||
// If text is "#cat", we filter categories.
|
||||
// If text is "#cat:ite", we filter items in "cat".
|
||||
|
||||
const parts = query.split(":");
|
||||
if (parts.length > 1) {
|
||||
// We have a category selected
|
||||
const catName = parts[0];
|
||||
const itemQuery = parts.slice(1).join(":"); // rest is item query
|
||||
|
||||
// Check if catName is valid
|
||||
if (this.snippetsCache[catName + ".csv"] || this.snippetsCache[catName + ".json"] || this.snippetsCache[catName]) {
|
||||
// It's a valid category (roughly).
|
||||
// Let's find the exact filename key
|
||||
let key = Object.keys(this.snippetsCache).find(k => k.startsWith(catName));
|
||||
if (key) {
|
||||
this.currentCategory = key;
|
||||
this.updateItems(itemQuery);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If no colon, or invalid category, we are filtering categories
|
||||
this.currentCategory = null;
|
||||
this.updateCategories(query);
|
||||
|
||||
} else {
|
||||
// No category selected yet
|
||||
// Check for colon
|
||||
const parts = query.split(":");
|
||||
if (parts.length > 1) {
|
||||
// Maybe user typed "style:" manually?
|
||||
const catName = parts[0];
|
||||
let key = Object.keys(this.snippetsCache).find(k => k.replace(/\.(csv|json)$/, "") === catName);
|
||||
if (key) {
|
||||
this.currentCategory = key;
|
||||
this.updateItems(parts.slice(1).join(":"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.updateCategories(query);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
handleKeydown(e, input, widget) {
|
||||
if (!this.active) return;
|
||||
|
||||
if (e.key === "ArrowUp") {
|
||||
e.preventDefault();
|
||||
this.selectedIndex = Math.max(0, this.selectedIndex - 1);
|
||||
this.renderPopup();
|
||||
} else if (e.key === "ArrowDown") {
|
||||
e.preventDefault();
|
||||
this.selectedIndex = Math.min(this.filteredItems.length - 1, this.selectedIndex + 1);
|
||||
this.renderPopup();
|
||||
} else if (e.key === "Enter" || e.key === "Tab") {
|
||||
e.preventDefault();
|
||||
this.selectItem(input);
|
||||
} else if (e.key === "Escape") {
|
||||
e.preventDefault();
|
||||
this.closePopup();
|
||||
}
|
||||
},
|
||||
|
||||
showPopup(input, cursor) {
|
||||
if (this.popup) document.body.removeChild(this.popup);
|
||||
|
||||
this.popup = document.createElement("div");
|
||||
this.popup.className = "sata-autocomplete-popup";
|
||||
Object.assign(this.popup.style, {
|
||||
position: "absolute",
|
||||
zIndex: "9999",
|
||||
backgroundColor: "#222",
|
||||
border: "1px solid #555",
|
||||
maxHeight: "300px",
|
||||
overflowY: "auto",
|
||||
width: "200px",
|
||||
color: "#ddd",
|
||||
fontFamily: "monospace",
|
||||
fontSize: "12px",
|
||||
boxShadow: "0 4px 6px rgba(0,0,0,0.3)"
|
||||
});
|
||||
|
||||
// Position popup near cursor (approximate)
|
||||
const rect = input.getBoundingClientRect();
|
||||
// This is tricky for textarea cursor position.
|
||||
// For now, just place it under the textarea or at bottom left of it.
|
||||
// To do it properly requires a library or complex calculation.
|
||||
// Let's put it at the bottom-left of the input for now.
|
||||
this.popup.style.left = `${rect.left}px`;
|
||||
this.popup.style.top = `${rect.bottom}px`;
|
||||
|
||||
document.body.appendChild(this.popup);
|
||||
this.active = true;
|
||||
this.currentCategory = null;
|
||||
this.updateCategories("");
|
||||
},
|
||||
|
||||
closePopup() {
|
||||
if (this.popup) {
|
||||
document.body.removeChild(this.popup);
|
||||
this.popup = null;
|
||||
}
|
||||
this.active = false;
|
||||
this.currentCategory = null;
|
||||
},
|
||||
|
||||
updateCategories(query) {
|
||||
const files = Object.keys(this.snippetsCache || {});
|
||||
const matches = [];
|
||||
files.forEach(f => {
|
||||
const display = f.replace(/\.(csv|json)$/, "");
|
||||
const res = fuzzyMatch(display, query);
|
||||
if (res.match) {
|
||||
matches.push({
|
||||
type: "category",
|
||||
value: f,
|
||||
display: display,
|
||||
score: res.score
|
||||
});
|
||||
}
|
||||
});
|
||||
matches.sort((a, b) => a.score - b.score);
|
||||
|
||||
this.filteredItems = matches;
|
||||
this.selectedIndex = 0;
|
||||
this.renderPopup();
|
||||
},
|
||||
|
||||
updateItems(query) {
|
||||
if (!this.currentCategory) return;
|
||||
const items = this.snippetsCache[this.currentCategory] || [];
|
||||
|
||||
const matches = [];
|
||||
items.forEach(i => {
|
||||
const res = fuzzyMatch(i, query);
|
||||
if (res.match) {
|
||||
matches.push({ value: i, score: res.score });
|
||||
}
|
||||
});
|
||||
matches.sort((a, b) => a.score - b.score);
|
||||
const sortedItems = matches.map(m => m.value).slice(0, 100);
|
||||
|
||||
// Add "Random" option at top
|
||||
this.filteredItems = [
|
||||
{ type: "random", value: "RANDOM", display: "🎲 Random" },
|
||||
...sortedItems.map(i => ({ type: "item", value: i, display: i }))
|
||||
];
|
||||
|
||||
this.selectedIndex = 0;
|
||||
this.renderPopup();
|
||||
},
|
||||
|
||||
renderPopup() {
|
||||
if (!this.popup) return;
|
||||
this.popup.innerHTML = "";
|
||||
|
||||
if (this.filteredItems.length === 0) {
|
||||
const div = document.createElement("div");
|
||||
div.textContent = "No matches";
|
||||
div.style.padding = "4px";
|
||||
div.style.color = "#888";
|
||||
this.popup.appendChild(div);
|
||||
return;
|
||||
}
|
||||
|
||||
this.filteredItems.forEach((item, idx) => {
|
||||
const div = document.createElement("div");
|
||||
div.textContent = item.display;
|
||||
div.style.padding = "4px 8px";
|
||||
div.style.cursor = "pointer";
|
||||
div.style.whiteSpace = "nowrap";
|
||||
div.style.overflow = "hidden";
|
||||
div.style.textOverflow = "ellipsis";
|
||||
|
||||
if (idx === this.selectedIndex) {
|
||||
div.style.backgroundColor = "#444";
|
||||
div.style.color = "#fff";
|
||||
|
||||
// Show preview if it's a long item
|
||||
if (item.type === "item" && item.value.length > 30) {
|
||||
this.showPreview(item.value);
|
||||
} else {
|
||||
this.hidePreview();
|
||||
}
|
||||
}
|
||||
|
||||
div.onclick = () => {
|
||||
this.selectedIndex = idx;
|
||||
this.selectItem(this.activeInput); // We need reference to input
|
||||
};
|
||||
|
||||
this.popup.appendChild(div);
|
||||
});
|
||||
|
||||
// Keep active input ref
|
||||
const activeElement = document.activeElement;
|
||||
if (activeElement && activeElement.tagName === "TEXTAREA") {
|
||||
this.activeInput = activeElement;
|
||||
}
|
||||
},
|
||||
|
||||
previewBox: null,
|
||||
|
||||
showPreview(text) {
|
||||
if (!this.previewBox) {
|
||||
this.previewBox = document.createElement("div");
|
||||
Object.assign(this.previewBox.style, {
|
||||
position: "absolute",
|
||||
zIndex: "10000",
|
||||
backgroundColor: "#333",
|
||||
border: "1px solid #666",
|
||||
padding: "8px",
|
||||
maxWidth: "300px",
|
||||
color: "#eee",
|
||||
fontSize: "11px",
|
||||
pointerEvents: "none"
|
||||
});
|
||||
document.body.appendChild(this.previewBox);
|
||||
}
|
||||
|
||||
this.previewBox.textContent = text;
|
||||
const rect = this.popup.getBoundingClientRect();
|
||||
this.previewBox.style.left = `${rect.right + 5}px`;
|
||||
this.previewBox.style.top = `${rect.top}px`;
|
||||
this.previewBox.style.display = "block";
|
||||
},
|
||||
|
||||
hidePreview() {
|
||||
if (this.previewBox) {
|
||||
this.previewBox.style.display = "none";
|
||||
}
|
||||
},
|
||||
|
||||
selectItem(input) {
|
||||
if (!input) return;
|
||||
const item = this.filteredItems[this.selectedIndex];
|
||||
if (!item) return;
|
||||
|
||||
const val = input.value;
|
||||
const cursor = input.selectionStart;
|
||||
const trigger = this.triggerChar;
|
||||
const lastTriggerIndex = val.lastIndexOf(trigger, cursor - 1);
|
||||
|
||||
let textToInsert = "";
|
||||
|
||||
if (item.type === "category") {
|
||||
// Insert category name + colon
|
||||
// e.g. #style:
|
||||
textToInsert = item.display + ":";
|
||||
this.currentCategory = item.value;
|
||||
// Don't close popup, just update to items
|
||||
// We need to update the input value first
|
||||
|
||||
// Replace everything from trigger to cursor with trigger + textToInsert
|
||||
const before = val.substring(0, lastTriggerIndex + 1); // includes trigger
|
||||
const after = val.substring(cursor);
|
||||
input.value = before + textToInsert + after;
|
||||
|
||||
// Move cursor
|
||||
const newCursor = lastTriggerIndex + 1 + textToInsert.length;
|
||||
input.setSelectionRange(newCursor, newCursor);
|
||||
|
||||
// Trigger input event manually to update state
|
||||
this.handleInput({ data: null }, input, null);
|
||||
return;
|
||||
|
||||
} else if (item.type === "random") {
|
||||
// Pick random item from current category
|
||||
const items = this.snippetsCache[this.currentCategory] || [];
|
||||
if (items.length > 0) {
|
||||
textToInsert = items[Math.floor(Math.random() * items.length)];
|
||||
}
|
||||
} else {
|
||||
// Normal item
|
||||
textToInsert = item.value;
|
||||
}
|
||||
|
||||
// Replace
|
||||
const before = val.substring(0, lastTriggerIndex); // remove trigger
|
||||
const after = val.substring(cursor);
|
||||
|
||||
// If we are replacing a category query like #style:something, we need to find the start of #
|
||||
// Actually, if we are in item mode, the text is "#style:query".
|
||||
// We want to replace the whole "#style:query" with "textToInsert".
|
||||
|
||||
input.value = before + textToInsert + after;
|
||||
|
||||
// Move cursor
|
||||
const newCursor = before.length + textToInsert.length;
|
||||
input.setSelectionRange(newCursor, newCursor);
|
||||
|
||||
this.closePopup();
|
||||
this.hidePreview();
|
||||
}
|
||||
});
|
||||
+65
-6
@@ -4,7 +4,7 @@ import { app } from "../../../scripts/app.js";
|
||||
app.registerExtension({
|
||||
name: "SATA_UtilityNode.PromptMachineFrontend",
|
||||
async nodeCreated(node) {
|
||||
if (node.comfyClass !== "Prompt_Machine") return;
|
||||
if (node.comfyClass !== "Prompt_Style_Machine") return;
|
||||
|
||||
// Widgets
|
||||
const csvWidget = node.widgets.find(w => w.name === "csv_file");
|
||||
@@ -19,10 +19,16 @@ app.registerExtension({
|
||||
const index = node.widgets.indexOf(oldNameWidget);
|
||||
node.widgets.splice(index, 1);
|
||||
|
||||
// Add proper dropdown
|
||||
const nameWidget = node.addWidget("combo", "name", "None", () => {}, {
|
||||
// Add proper dropdown (this appends to the end)
|
||||
const nameWidget = node.addWidget("combo", "name", "None", () => { }, {
|
||||
values: ["None"]
|
||||
});
|
||||
|
||||
// Move the new widget back to the original position
|
||||
// Remove from the end (where addWidget put it)
|
||||
node.widgets.splice(node.widgets.indexOf(nameWidget), 1);
|
||||
// Insert at the correct index
|
||||
node.widgets.splice(index, 0, nameWidget);
|
||||
|
||||
// Store available names
|
||||
let namesConfig = [];
|
||||
@@ -34,7 +40,7 @@ app.registerExtension({
|
||||
const resp = await fetch(`/sata/prompt_machine/names?csv=${encodeURIComponent(csvValue)}`);
|
||||
const data = await resp.json();
|
||||
namesConfig = data.names || ["None"];
|
||||
console.log("[PromptMachineFrontend] Loaded names:", namesConfig);
|
||||
|
||||
refreshNames();
|
||||
} catch (err) {
|
||||
console.error("[PromptMachineFrontend] Failed to load names:", err);
|
||||
@@ -50,17 +56,70 @@ app.registerExtension({
|
||||
nameWidget.value = available[0]; // safe fallback
|
||||
}
|
||||
|
||||
// Force update previews for the new name
|
||||
updatePreviews(nameWidget.value);
|
||||
|
||||
app.graph.change();
|
||||
}
|
||||
|
||||
// Hook CSV change
|
||||
const oldCsvCallback = csvWidget.callback;
|
||||
csvWidget.callback = function(value) {
|
||||
csvWidget.callback = function (value) {
|
||||
if (oldCsvCallback) oldCsvCallback(value);
|
||||
loadNames(value); // refresh dynamically
|
||||
};
|
||||
|
||||
// --- Preview Logic ---
|
||||
const previewEl = document.createElement("div");
|
||||
Object.assign(previewEl.style, {
|
||||
marginTop: "10px",
|
||||
padding: "8px",
|
||||
background: "rgba(0,0,0,0.4)",
|
||||
borderRadius: "4px",
|
||||
fontSize: "14px",
|
||||
lineHeight: "1.5",
|
||||
color: "#ddd",
|
||||
wordBreak: "break-word",
|
||||
maxHeight: "400px",
|
||||
overflowY: "auto"
|
||||
});
|
||||
|
||||
node.addDOMWidget("preview_text", "html", previewEl, {
|
||||
getValue: () => previewEl.innerHTML,
|
||||
setValue: (v) => { previewEl.innerHTML = v; }
|
||||
});
|
||||
|
||||
async function updatePreviews(name) {
|
||||
const csv = csvWidget.value;
|
||||
if (!csv || !name || name === "None") return;
|
||||
|
||||
try {
|
||||
const resp = await fetch(`/sata/prompt_machine/get?csv=${encodeURIComponent(csv)}&name=${encodeURIComponent(name)}`);
|
||||
const data = await resp.json();
|
||||
let html = "";
|
||||
if (data.positive) html += `${data.positive}`;
|
||||
|
||||
previewEl.innerHTML = html || "<i>No preview available</i>";
|
||||
|
||||
// Adjust node size to fit content
|
||||
node.setSize(node.computeSize());
|
||||
|
||||
app.graph.change();
|
||||
} catch (err) {
|
||||
console.error("[PromptMachineFrontend] Failed to load preview:", err);
|
||||
}
|
||||
}
|
||||
|
||||
// Hook Name change
|
||||
const oldNameCallback = nameWidget.callback;
|
||||
nameWidget.callback = function (value) {
|
||||
if (oldNameCallback) oldNameCallback(value);
|
||||
updatePreviews(value);
|
||||
};
|
||||
|
||||
// Initial sync
|
||||
loadNames(csvWidget.value);
|
||||
loadNames(csvWidget.value).then(() => {
|
||||
updatePreviews(nameWidget.value);
|
||||
});
|
||||
}
|
||||
});
|
||||
+106
-38
@@ -4,15 +4,16 @@ app.registerExtension({
|
||||
name: "SATA_UtilityNode.Resolution_Machine",
|
||||
|
||||
async nodeCreated(node) {
|
||||
if (node.comfyClass !== "Resolution_Machine") return;
|
||||
if (node.comfyClass !== "Resolution_Machine" && node.comfyClass !== "Latent_Machine") return;
|
||||
|
||||
// Find widgets
|
||||
const modelWidget = node.widgets.find(w => w.name === "model");
|
||||
const dimensionWidget = node.widgets.find(w => w.name === "dimension");
|
||||
const resolutionWidget = node.widgets.find(w => w.name === "resolution");
|
||||
const widthWidget = node.widgets.find(w => w.name === "custom_width");
|
||||
const heightWidget = node.widgets.find(w => w.name === "custom_height");
|
||||
const widthWidget = node.widgets.find(w => w.name === "width") || node.widgets.find(w => w.name === "custom_width");
|
||||
const heightWidget = node.widgets.find(w => w.name === "height") || node.widgets.find(w => w.name === "custom_height");
|
||||
|
||||
if (!modelWidget || !resolutionWidget || !widthWidget || !heightWidget) {
|
||||
if (!modelWidget || !dimensionWidget || !resolutionWidget || !widthWidget || !heightWidget) {
|
||||
console.warn("[Resolution_Machine] Missing widgets, check backend definition.");
|
||||
return;
|
||||
}
|
||||
@@ -25,7 +26,7 @@ app.registerExtension({
|
||||
try {
|
||||
const resp = await fetch("/SATA_UtilityNode/resolutions_config");
|
||||
resolutionsConfig = await resp.json();
|
||||
console.log("[Resolution_Machine] Loaded config:", resolutionsConfig);
|
||||
|
||||
} catch (err) {
|
||||
console.error("[Resolution_Machine] Failed to load config:", err);
|
||||
}
|
||||
@@ -33,11 +34,27 @@ app.registerExtension({
|
||||
|
||||
await loadConfig();
|
||||
|
||||
// --- Utility: refresh resolution dropdown when model changes ---
|
||||
function refreshResolutions(selectedModel) {
|
||||
const available = resolutionsConfig[selectedModel]
|
||||
? Object.keys(resolutionsConfig[selectedModel])
|
||||
: ["Custom (manual)"];
|
||||
// --- Utility: refresh resolution dropdown when model/dimension changes ---
|
||||
function refreshResolutions() {
|
||||
const selectedModel = modelWidget.value;
|
||||
const selectedDimension = dimensionWidget.value;
|
||||
|
||||
let available = [];
|
||||
|
||||
if (resolutionsConfig.models && resolutionsConfig.models[selectedModel]) {
|
||||
const buckets = resolutionsConfig.models[selectedModel];
|
||||
buckets.forEach(bucket => {
|
||||
// Check if bucket exists and has the selected dimension
|
||||
if (resolutionsConfig.resolutions && resolutionsConfig.resolutions[bucket] && resolutionsConfig.resolutions[bucket][selectedDimension]) {
|
||||
available.push(...Object.keys(resolutionsConfig.resolutions[bucket][selectedDimension]));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Always include "Custom" option so that switching model/dimension dropdowns doesn't kick the user out of custom mode
|
||||
if (!available.includes("Custom")) {
|
||||
available.push("Custom");
|
||||
}
|
||||
|
||||
resolutionWidget.options.values = available;
|
||||
|
||||
@@ -46,52 +63,103 @@ app.registerExtension({
|
||||
resolutionWidget.value = available[0];
|
||||
}
|
||||
|
||||
console.log(`[Resolution_Machine] Resolutions for ${selectedModel}:`, available);
|
||||
app.graph.change();
|
||||
applyResolution(); // auto-apply width/height on refresh
|
||||
// If we switched to a preset (not Custom), lock fields
|
||||
// If we defaulted to Custom (e.g. empty available), unlock
|
||||
checkCustomMode();
|
||||
}
|
||||
|
||||
// --- Utility: apply resolution to width/height ---
|
||||
function applyResolution() {
|
||||
const selectedModel = modelWidget.value;
|
||||
const selectedResolution = resolutionWidget.value;
|
||||
|
||||
if (!resolutionsConfig[selectedModel]) return;
|
||||
|
||||
const resolutionData = resolutionsConfig[selectedModel][selectedResolution];
|
||||
|
||||
if (selectedResolution !== "Custom (manual)" && resolutionData) {
|
||||
// Auto-set width/height
|
||||
widthWidget.value = resolutionData.width;
|
||||
heightWidget.value = resolutionData.height;
|
||||
|
||||
// Lock fields
|
||||
widthWidget.disabled = true;
|
||||
heightWidget.disabled = true;
|
||||
} else {
|
||||
// Allow manual editing
|
||||
function checkCustomMode() {
|
||||
if (resolutionWidget.value === "Custom") {
|
||||
widthWidget.type = "INT";
|
||||
heightWidget.type = "INT";
|
||||
delete widthWidget.computeSize;
|
||||
delete heightWidget.computeSize;
|
||||
widthWidget.disabled = false;
|
||||
heightWidget.disabled = false;
|
||||
} else {
|
||||
widthWidget.type = "hidden";
|
||||
heightWidget.type = "hidden";
|
||||
widthWidget.computeSize = () => [0, -4];
|
||||
heightWidget.computeSize = () => [0, -4];
|
||||
applyResolutionPreset();
|
||||
}
|
||||
node.setSize(node.computeSize());
|
||||
app.graph.change();
|
||||
}
|
||||
|
||||
// --- Utility: apply resolution preset to width/height ---
|
||||
function applyResolutionPreset() {
|
||||
const selectedModel = modelWidget.value;
|
||||
const selectedDimension = dimensionWidget.value;
|
||||
const selectedResolution = resolutionWidget.value;
|
||||
|
||||
if (selectedResolution === "Custom") {
|
||||
return;
|
||||
}
|
||||
|
||||
app.graph.change();
|
||||
let resolutionData = null;
|
||||
|
||||
// Lookup
|
||||
if (resolutionsConfig.models && resolutionsConfig.models[selectedModel]) {
|
||||
const buckets = resolutionsConfig.models[selectedModel];
|
||||
for (const bucket of buckets) {
|
||||
if (resolutionsConfig.resolutions[bucket] &&
|
||||
resolutionsConfig.resolutions[bucket][selectedDimension] &&
|
||||
resolutionsConfig.resolutions[bucket][selectedDimension][selectedResolution]) {
|
||||
|
||||
resolutionData = resolutionsConfig.resolutions[bucket][selectedDimension][selectedResolution];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (resolutionData) {
|
||||
widthWidget.value = resolutionData.width;
|
||||
heightWidget.value = resolutionData.height;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Hook model change ---
|
||||
const oldModelCallback = modelWidget.callback;
|
||||
modelWidget.callback = function(value) {
|
||||
modelWidget.callback = function (value) {
|
||||
if (oldModelCallback) oldModelCallback(value);
|
||||
refreshResolutions(value);
|
||||
refreshResolutions();
|
||||
};
|
||||
|
||||
// --- Hook dimension change ---
|
||||
const oldDimensionCallback = dimensionWidget.callback;
|
||||
dimensionWidget.callback = function (value) {
|
||||
if (oldDimensionCallback) oldDimensionCallback(value);
|
||||
refreshResolutions();
|
||||
};
|
||||
|
||||
// --- Hook resolution change ---
|
||||
const oldResolutionCallback = resolutionWidget.callback;
|
||||
resolutionWidget.callback = function(value) {
|
||||
resolutionWidget.callback = function (value) {
|
||||
if (oldResolutionCallback) oldResolutionCallback(value);
|
||||
applyResolution();
|
||||
checkCustomMode();
|
||||
};
|
||||
|
||||
// --- Add Custom Button ---
|
||||
// Rename "Swap Dimensions" -> "Custom"
|
||||
// Note: Node logic adds this button. Previous JS added it. We are replacing previous JS logic.
|
||||
|
||||
node.addWidget("button", "Custom", null, () => {
|
||||
// Unlock widgets
|
||||
widthWidget.disabled = false;
|
||||
heightWidget.disabled = false;
|
||||
|
||||
// Ensure "Custom" option exists and is selected
|
||||
if (!resolutionWidget.options.values.includes("Custom")) {
|
||||
resolutionWidget.options.values.push("Custom");
|
||||
}
|
||||
resolutionWidget.value = "Custom";
|
||||
|
||||
checkCustomMode();
|
||||
app.graph.change();
|
||||
});
|
||||
|
||||
// --- Initial sync ---
|
||||
refreshResolutions(modelWidget.value);
|
||||
refreshResolutions();
|
||||
}
|
||||
});
|
||||
+96
-1
@@ -1,11 +1,106 @@
|
||||
import { app } from "../../../scripts/app.js";
|
||||
|
||||
const SETTING_ID = "SATA_UtilityNode.EnableTouchpadPanZoom";
|
||||
|
||||
app.registerExtension({
|
||||
name: "SATA_UtilityNode.TouchpadPanZoom",
|
||||
settings: [
|
||||
{
|
||||
id: SETTING_ID,
|
||||
name: "Enable Touchpad Pan/Zoom (SATA UtilityNode)",
|
||||
type: "boolean",
|
||||
defaultValue: true,
|
||||
onChange: (value) => {
|
||||
const btn = document.getElementById("sata-touchpad-toggle-btn");
|
||||
if (btn) {
|
||||
btn.textContent = value ? "Touchpad: ON" : "Touchpad: OFF";
|
||||
btn.style.opacity = value ? "1.0" : "0.5";
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
async setup() {
|
||||
// Create a toggle button in the ComfyUI menu
|
||||
const menu = document.querySelector(".comfy-menu");
|
||||
if (menu) {
|
||||
const toggleBtn = document.createElement("button");
|
||||
toggleBtn.id = "sata-touchpad-toggle-btn";
|
||||
|
||||
// Function to get current value securely
|
||||
const getVal = () => {
|
||||
if (app.extensionManager && app.extensionManager.setting) {
|
||||
const val = app.extensionManager.setting.get(SETTING_ID);
|
||||
return val !== undefined ? val : true;
|
||||
} else if (app.ui && app.ui.settings) {
|
||||
return app.ui.settings.getSettingValue(SETTING_ID, true);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
// Function to set value
|
||||
const setVal = (newVal) => {
|
||||
if (app.extensionManager && app.extensionManager.setting) {
|
||||
app.extensionManager.setting.set(SETTING_ID, newVal);
|
||||
} else if (app.ui && app.ui.settings) {
|
||||
app.ui.settings.setSettingValue(SETTING_ID, newVal);
|
||||
}
|
||||
// Update button visuals
|
||||
toggleBtn.textContent = newVal ? "Touchpad: ON" : "Touchpad: OFF";
|
||||
toggleBtn.style.opacity = newVal ? "1.0" : "0.5";
|
||||
};
|
||||
|
||||
const initialVal = getVal();
|
||||
toggleBtn.textContent = initialVal ? "Touchpad: ON" : "Touchpad: OFF";
|
||||
toggleBtn.style.opacity = initialVal ? "1.0" : "0.5";
|
||||
|
||||
// Basic styling to match comfy UI buttons if classes aren't enough
|
||||
toggleBtn.className = "comfy-settings-btn";
|
||||
|
||||
toggleBtn.onclick = () => {
|
||||
const currentVal = getVal();
|
||||
setVal(!currentVal);
|
||||
};
|
||||
|
||||
// Try to place it nicely in the menu
|
||||
const settingsBtn = document.getElementById("comfy-settings-button");
|
||||
if (settingsBtn && settingsBtn.parentNode === menu) {
|
||||
menu.insertBefore(toggleBtn, settingsBtn);
|
||||
} else {
|
||||
menu.appendChild(toggleBtn);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Enhanced smooth scrolling and zooming for touchpad gestures
|
||||
* Overrides LGraphCanvas.prototype.processMouseWheel
|
||||
*/
|
||||
const originalProcessMouseWheel = LGraphCanvas.prototype.processMouseWheel;
|
||||
|
||||
LGraphCanvas.prototype.processMouseWheel = function (/** @type {WheelEvent} */ event) {
|
||||
let isEnabled = true;
|
||||
|
||||
if (app.extensionManager && app.extensionManager.setting) {
|
||||
const val = app.extensionManager.setting.get(SETTING_ID);
|
||||
if (val !== undefined) isEnabled = val;
|
||||
} else if (app.ui && app.ui.settings) {
|
||||
isEnabled = app.ui.settings.getSettingValue(SETTING_ID, true);
|
||||
}
|
||||
|
||||
if (isEnabled === false) {
|
||||
if (originalProcessMouseWheel) {
|
||||
return originalProcessMouseWheel.apply(this, arguments);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!this.graph || !this.allow_dragcanvas) return;
|
||||
|
||||
const { clientX: x, clientY: y, deltaX, deltaY, ctrlKey, metaKey } = event;
|
||||
const rect = this.canvas.getBoundingClientRect();
|
||||
const x = event.clientX - rect.left;
|
||||
const y = event.clientY - rect.top;
|
||||
const { deltaX, deltaY, ctrlKey, metaKey } = event;
|
||||
|
||||
// Check if the event occurred inside the canvas viewport
|
||||
if (this.viewport) {
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
import json
|
||||
import os
|
||||
import torch
|
||||
import torch.fft
|
||||
import random
|
||||
import comfy.model_management
|
||||
|
||||
NODE_NAME = "Latent_Machine"
|
||||
|
||||
# Path to JSON config (root of SATA_UtilityNode folder)
|
||||
CONFIG_PATH = os.path.join(
|
||||
os.path.dirname(os.path.dirname(__file__)), "asset", "resolutions.json"
|
||||
)
|
||||
|
||||
def load_config():
|
||||
if not os.path.exists(CONFIG_PATH):
|
||||
raise FileNotFoundError(f"[{NODE_NAME}] resolutions.json not found at {CONFIG_PATH}")
|
||||
with open(CONFIG_PATH, "r", encoding="utf-8-sig") as f:
|
||||
return json.load(f)
|
||||
|
||||
|
||||
class Latent_Machine:
|
||||
"""
|
||||
Creates an empty latent initialized with Power-Law (1/f) noise, Perlin-like noise, or Plasma noise.
|
||||
Supports 4-channel (SD1.5/SDXL) and 16-channel (Flux/SD3) latents.
|
||||
Supports recommended model resolutions out of the box.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
config = load_config()
|
||||
|
||||
# all models
|
||||
models = list(config["models"].keys())
|
||||
default_model = models[0] if models else "Unknown"
|
||||
|
||||
# Collect ALL possible resolutions to pass validation
|
||||
all_resolutions = set(["Custom"])
|
||||
if "resolutions" in config:
|
||||
for bucket in config["resolutions"].values():
|
||||
for dim in bucket.values():
|
||||
all_resolutions.update(dim.keys())
|
||||
|
||||
resolutions_list = sorted(list(all_resolutions))
|
||||
|
||||
return {
|
||||
"required": {
|
||||
"model": (models, {"default": default_model}),
|
||||
"dimension": (["Square", "Portrait", "Landscape"],),
|
||||
"resolution": (resolutions_list,),
|
||||
"width": ("INT", {"default": 512, "min": 64, "max": 8192, "step": 8}),
|
||||
"height": ("INT", {"default": 512, "min": 64, "max": 8192, "step": 8}),
|
||||
"batch_size": ("INT", {"default": 1, "min": 1, "max": 64}),
|
||||
"noise_type": ([
|
||||
"Gaussian (White): Sharp Architecture, Text, intricate mechanics",
|
||||
"Pink (1/f): Photorealism, Portraits, Nature",
|
||||
"Brown (1/f²): Anime, Digital Art, Bokeh/Backgrounds",
|
||||
"Blue (High-Frequency): High-Detail, Textures, low-step/distilled models",
|
||||
"Perlin : Fantasy landscapes, Fluids, Hair/Fabric",
|
||||
"Plasma : Sci-Fi, Abstract, Alien terrain"
|
||||
],),
|
||||
"intensity": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.1}),
|
||||
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
||||
"high_contrast": ("BOOLEAN", {"default": False}),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("LATENT", "IMAGE")
|
||||
RETURN_NAMES = ("LATENT", "IMAGE")
|
||||
FUNCTION = "generate_noise"
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def get_resolution_dimensions(self, model, dimension, resolution, width, height):
|
||||
try:
|
||||
config = load_config()
|
||||
except Exception:
|
||||
return (width, height)
|
||||
|
||||
if model not in config.get("models", {}):
|
||||
return (width, height)
|
||||
|
||||
if resolution == "Custom":
|
||||
return (width, height)
|
||||
|
||||
buckets = config["models"][model]
|
||||
|
||||
resolution_data = None
|
||||
for bucket in buckets:
|
||||
if bucket in config.get("resolutions", {}):
|
||||
if dimension in config["resolutions"][bucket]:
|
||||
if resolution in config["resolutions"][bucket][dimension]:
|
||||
resolution_data = config["resolutions"][bucket][dimension][resolution]
|
||||
break
|
||||
|
||||
if not resolution_data:
|
||||
return (width, height)
|
||||
|
||||
return (resolution_data["width"], resolution_data["height"])
|
||||
|
||||
def generate_noise(self, model="SD 1.5", dimension="Square", resolution="Custom", width=512, height=512, batch_size=1, noise_type="Gaussian (White): Sharp Architecture, Text, intricate mechanics", intensity=1.0, seed=0, high_contrast=False):
|
||||
# Check if this is an old node layout (shifted arguments due to ComfyUI's positional widget serialization)
|
||||
if isinstance(model, int):
|
||||
actual_width = model
|
||||
actual_height = dimension
|
||||
actual_batch_size = resolution
|
||||
actual_model = width # The 4th argument 'width' holds the old 'model_type' (str)
|
||||
actual_noise_type = height
|
||||
actual_intensity = batch_size
|
||||
actual_seed = noise_type
|
||||
actual_high_contrast = False
|
||||
else:
|
||||
actual_model = model
|
||||
actual_width, actual_height = self.get_resolution_dimensions(model, dimension, resolution, width, height)
|
||||
actual_batch_size = batch_size
|
||||
actual_noise_type = noise_type
|
||||
actual_intensity = intensity
|
||||
actual_seed = seed
|
||||
actual_high_contrast = high_contrast
|
||||
|
||||
self.device = comfy.model_management.get_torch_device()
|
||||
# Set seed for reproducibility
|
||||
torch.manual_seed(actual_seed)
|
||||
random.seed(actual_seed)
|
||||
|
||||
# Determine channels based on model
|
||||
model_lower = actual_model.lower()
|
||||
if any(k in model_lower for k in ["flux", "qwen", "sd3", "lumina", "wan", "auraflow", "z-image", "mochi", "ltx", "hunyuanvideo"]):
|
||||
c = 16
|
||||
else:
|
||||
c = 4
|
||||
|
||||
# Latent dimensions (compressed by 8)
|
||||
h = actual_height // 8
|
||||
w = actual_width // 8
|
||||
|
||||
# Generate base noise
|
||||
if "Gaussian" in actual_noise_type:
|
||||
noise = torch.randn((actual_batch_size, c, h, w), device=self.device)
|
||||
|
||||
elif "Perlin" in actual_noise_type:
|
||||
# Multi-Octave Value Noise Approximation
|
||||
noise = self.generate_perlin_approx(actual_batch_size, c, h, w)
|
||||
|
||||
elif "Blue" in actual_noise_type:
|
||||
# FFT-based Blue Noise (High-Frequency)
|
||||
noise = self.generate_blue_noise(actual_batch_size, c, h, w)
|
||||
|
||||
else:
|
||||
# FFT-based Power Law Noise (Pink, Brown, Plasma)
|
||||
if "Pink" in actual_noise_type:
|
||||
alpha = 1.0
|
||||
elif "Brown" in actual_noise_type:
|
||||
alpha = 2.0
|
||||
elif "Plasma" in actual_noise_type:
|
||||
alpha = 3.0 # Very smooth
|
||||
else:
|
||||
alpha = 0.0 # Fallback to white
|
||||
|
||||
noise = self.generate_power_law_noise(actual_batch_size, c, h, w, alpha)
|
||||
|
||||
# Normalize standard deviation to match expected latent variance (approx 1.0 for standard Gaussian)
|
||||
# This ensures intensity works consistently across different noise types
|
||||
current_std = noise.std()
|
||||
if current_std > 1e-6:
|
||||
noise = noise / current_std
|
||||
|
||||
# Apply offset noise for high contrast
|
||||
if actual_high_contrast:
|
||||
noise = noise + 0.1
|
||||
|
||||
# Apply intensity
|
||||
noise = noise * actual_intensity
|
||||
|
||||
# Prepare Image output for visualization/masking
|
||||
# Slice the first 3 channels and normalize to [0, 1]
|
||||
img_tensor = noise[:, :3, :, :]
|
||||
if img_tensor.shape[1] < 3:
|
||||
# If for some weird reason it's less than 3 channels, pad it
|
||||
padding = torch.zeros((actual_batch_size, 3 - img_tensor.shape[1], h, w), device=self.device)
|
||||
img_tensor = torch.cat([img_tensor, padding], dim=1)
|
||||
|
||||
# Normalize min-max
|
||||
img_min = img_tensor.min()
|
||||
img_max = img_tensor.max()
|
||||
if img_max > img_min:
|
||||
img_tensor = (img_tensor - img_min) / (img_max - img_min)
|
||||
else:
|
||||
img_tensor = torch.zeros_like(img_tensor)
|
||||
|
||||
# Move to (B, H, W, C) for ComfyUI Image format
|
||||
img_tensor = img_tensor.movedim(1, -1)
|
||||
|
||||
return ({"samples": noise}, img_tensor)
|
||||
|
||||
def generate_power_law_noise(self, batch_size, c, h, w, alpha):
|
||||
# Generate White Noise (Standard Gaussian)
|
||||
white_noise = torch.randn((batch_size, c, h, w), device=self.device)
|
||||
|
||||
# Convert to Frequency Domain (FFT)
|
||||
fft_noise = torch.fft.fft2(white_noise)
|
||||
|
||||
# Create Frequency Grid
|
||||
y = torch.fft.fftfreq(h, device=self.device)
|
||||
x = torch.fft.fftfreq(w, device=self.device)
|
||||
dy, dx = torch.meshgrid(y, x, indexing='ij')
|
||||
|
||||
# Calculate distance from center (frequency magnitude)
|
||||
# Add epsilon to avoid division by zero at DC component
|
||||
frequency_magnitude = torch.sqrt(dy**2 + dx**2) + 1e-8
|
||||
|
||||
# Apply Power Law Scaling: Amplitude ~ 1 / f^(alpha/2)
|
||||
scale = 1.0 / (frequency_magnitude ** (alpha / 2.0))
|
||||
|
||||
# Zero out the DC component (mean brightness) to keep it neutral
|
||||
scale[0, 0] = 0
|
||||
|
||||
fft_structured = fft_noise * scale
|
||||
|
||||
# Convert back to Spatial Domain (Inverse FFT)
|
||||
structured_noise = torch.fft.ifft2(fft_structured).real
|
||||
|
||||
return structured_noise
|
||||
|
||||
def generate_perlin_approx(self, batch_size, c, h, w):
|
||||
"""
|
||||
Generates a Perlin-like noise by blending upsampled noise from multiple octaves.
|
||||
This is faster than calculating actual Perlin noise per pixel on the CPU/GPU.
|
||||
"""
|
||||
noise = torch.zeros((batch_size, c, h, w), device=self.device)
|
||||
|
||||
# Octaves: scale down, generate noise, scale up
|
||||
octaves = [2, 4, 8, 16]
|
||||
weights = [0.5, 0.25, 0.125, 0.0625] # 1/f amplitude falloff
|
||||
|
||||
total_weight = 0
|
||||
|
||||
for scale, weight in zip(octaves, weights):
|
||||
# Calculate small dimensions
|
||||
sh, sw = max(1, h // scale), max(1, w // scale)
|
||||
|
||||
# Generate random noise at this scale
|
||||
small_noise = torch.randn((batch_size, c, sh, sw), device=self.device)
|
||||
|
||||
# Upsample to full size using bicubic interpolation for smoothness
|
||||
upsampled = torch.nn.functional.interpolate(
|
||||
small_noise, size=(h, w), mode='bicubic', align_corners=False
|
||||
)
|
||||
|
||||
noise += upsampled * weight
|
||||
total_weight += weight
|
||||
|
||||
# Add a bit of fine-grained white noise for texture
|
||||
noise += torch.randn((batch_size, c, h, w), device=self.device) * 0.05
|
||||
|
||||
return noise
|
||||
|
||||
def generate_blue_noise(self, batch_size, c, h, w, beta=1.5):
|
||||
# Generate White Noise (Standard Gaussian)
|
||||
white_noise = torch.randn((batch_size, c, h, w), device=self.device)
|
||||
|
||||
# Convert to Frequency Domain (FFT)
|
||||
fft_noise = torch.fft.fft2(white_noise)
|
||||
|
||||
# Create Frequency Grid
|
||||
y = torch.fft.fftfreq(h, device=self.device)
|
||||
x = torch.fft.fftfreq(w, device=self.device)
|
||||
dy, dx = torch.meshgrid(y, x, indexing='ij')
|
||||
|
||||
# Calculate distance from center (frequency magnitude)
|
||||
frequency_magnitude = torch.sqrt(dy**2 + dx**2)
|
||||
|
||||
# Apply High-Pass Scaling: Amplitude ~ f^(beta/2)
|
||||
scale = frequency_magnitude ** (beta / 2.0)
|
||||
|
||||
# Zero out DC component
|
||||
scale[0, 0] = 0
|
||||
|
||||
fft_structured = fft_noise * scale
|
||||
|
||||
# Convert back to Spatial Domain (Inverse FFT)
|
||||
blue_noise = torch.fft.ifft2(fft_structured).real
|
||||
|
||||
return blue_noise
|
||||
@@ -0,0 +1,19 @@
|
||||
from nodes import PreviewImage
|
||||
|
||||
class Preview_Machine(PreviewImage):
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"images": ("IMAGE",),
|
||||
},
|
||||
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ()
|
||||
OUTPUT_NODE = True
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
FUNCTION = "save_images"
|
||||
|
||||
def save_images(self, images, prompt=None, extra_pnginfo=None):
|
||||
return super().save_images(images, filename_prefix="Preview_Machine", prompt=prompt, extra_pnginfo=extra_pnginfo)
|
||||
@@ -0,0 +1,97 @@
|
||||
import os
|
||||
import csv
|
||||
import json
|
||||
from server import PromptServer
|
||||
from aiohttp import web
|
||||
|
||||
# Directory for Prompt files
|
||||
PROMPT_DIR = os.path.join(os.path.dirname(__file__), "..", "prompt")
|
||||
|
||||
def list_prompt_files():
|
||||
try:
|
||||
if not os.path.exists(PROMPT_DIR):
|
||||
os.makedirs(PROMPT_DIR, exist_ok=True)
|
||||
return []
|
||||
return sorted([f for f in os.listdir(PROMPT_DIR) if f.endswith(".csv") or f.endswith(".json")])
|
||||
except Exception as e:
|
||||
print(f"[PromptAutocomplete] list_prompt_files error: {e}")
|
||||
return []
|
||||
|
||||
def read_prompt_file(filename):
|
||||
"""Read and parse a CSV or JSON file."""
|
||||
if not filename:
|
||||
return []
|
||||
path = os.path.join(PROMPT_DIR, filename)
|
||||
if not os.path.exists(path):
|
||||
print(f"[PromptAutocomplete] File not found: {path}")
|
||||
return []
|
||||
|
||||
data = []
|
||||
try:
|
||||
if filename.endswith(".csv"):
|
||||
with open(path, "r", encoding="utf-8-sig") as f:
|
||||
reader = csv.reader(f)
|
||||
# Simple CSV parsing: treat first column as the value
|
||||
for row in reader:
|
||||
if row:
|
||||
data.append(row[0].strip())
|
||||
elif filename.endswith(".json"):
|
||||
with open(path, "r", encoding="utf-8-sig") as f:
|
||||
content = json.load(f)
|
||||
# Expecting a list of strings or objects with 'name'/'prompt'
|
||||
if isinstance(content, list):
|
||||
for item in content:
|
||||
if isinstance(item, str):
|
||||
data.append(item)
|
||||
elif isinstance(item, dict):
|
||||
# Try to find a meaningful text field
|
||||
val = item.get("prompt") or item.get("text") or item.get("name") or item.get("value")
|
||||
if val:
|
||||
data.append(str(val))
|
||||
elif isinstance(content, dict):
|
||||
# If it's a dict, maybe keys or values are the prompts?
|
||||
# Let's assume keys are categories or names, and values are prompts if strings
|
||||
for k, v in content.items():
|
||||
if isinstance(v, str):
|
||||
data.append(v)
|
||||
elif isinstance(v, list):
|
||||
# Flatten list values
|
||||
data.extend([str(x) for x in v if isinstance(x, str)])
|
||||
|
||||
except Exception as e:
|
||||
print(f"[PromptAutocomplete] Error reading {filename}: {e}")
|
||||
return []
|
||||
|
||||
return data
|
||||
|
||||
class PromptAutocomplete:
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"text": ("STRING", {"multiline": True, "dynamicPrompts": True}),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("text",)
|
||||
FUNCTION = "do_nothing"
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def do_nothing(self, text):
|
||||
return (text,)
|
||||
|
||||
# ---------------- REST API ----------------
|
||||
|
||||
@PromptServer.instance.routes.get("/sata/autocomplete/list")
|
||||
async def list_files(request):
|
||||
"""Return all available prompt files"""
|
||||
files = list_prompt_files()
|
||||
return web.json_response({"files": files})
|
||||
|
||||
@PromptServer.instance.routes.get("/sata/autocomplete/get")
|
||||
async def get_file_content(request):
|
||||
"""Return content of a specific file"""
|
||||
filename = request.query.get("file")
|
||||
items = read_prompt_file(filename)
|
||||
return web.json_response({"items": items})
|
||||
+56
-8
@@ -49,7 +49,9 @@ def read_names_from_csv(filename):
|
||||
def read_prompt_row(csv_file, name):
|
||||
"""Return (positive, negative, note) for a given csv_file and name.
|
||||
Matching is whitespace-trimmed and exact on content (case-sensitive by default)."""
|
||||
if not csv_file or csv_file == "None" or not name or name == "None":
|
||||
if not csv_file or not isinstance(csv_file, str) or csv_file == "None":
|
||||
return ("", "", "")
|
||||
if not name or not isinstance(name, str) or name == "None":
|
||||
return ("", "", "")
|
||||
path = os.path.join(CSV_DIR, csv_file)
|
||||
if not os.path.exists(path):
|
||||
@@ -85,7 +87,7 @@ def read_prompt_row(csv_file, name):
|
||||
return ("", "", "")
|
||||
|
||||
|
||||
class Prompt_Machine:
|
||||
class Prompt_Style_Machine:
|
||||
"""
|
||||
NOTE: name is a free STRING (not a static dropdown) to avoid 'Value not in list' validation errors.
|
||||
The frontend helper will still provide dropdown-like selection and write the chosen name into this STRING.
|
||||
@@ -107,19 +109,65 @@ class Prompt_Machine:
|
||||
}),
|
||||
# make 'name' a free text field (STRING) — avoids list validation problems
|
||||
"name": ("STRING", {"default": default_name}),
|
||||
}
|
||||
},
|
||||
"optional": {}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("STRING", "STRING", "STRING")
|
||||
RETURN_NAMES = ("positive", "negative", "note")
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("prompt",)
|
||||
FUNCTION = "get_prompts"
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def get_prompts(self, csv_file, name):
|
||||
print(f"[PromptMachine] get_prompts - csv_file={csv_file}, name={name}")
|
||||
|
||||
pos, neg, note = read_prompt_row(csv_file, name)
|
||||
print(f"[PromptMachine] get_prompts -> pos_len={len(pos)}, neg_len={len(neg)}, note_len={len(note)}")
|
||||
return (pos, neg, note)
|
||||
|
||||
return (pos,)
|
||||
|
||||
|
||||
class Prompt_Machine:
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"subject": ("STRING", {"multiline": True, "default": "", "dynamicPrompts": True}),
|
||||
"style": ("STRING", {"multiline": True, "default": "", "dynamicPrompts": True}),
|
||||
"lighting": ("STRING", {"multiline": True, "default": "", "dynamicPrompts": True}),
|
||||
"composition": ("STRING", {"multiline": True, "default": "", "dynamicPrompts": True}),
|
||||
"mood": ("STRING", {"multiline": True, "default": "", "dynamicPrompts": True}),
|
||||
"technical": ("STRING", {"multiline": True, "default": "", "dynamicPrompts": True}),
|
||||
"json_output": ("BOOLEAN", {"default": False}),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("prompt",)
|
||||
FUNCTION = "get_prompt"
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def get_prompt(self, subject, style, lighting, composition, mood, technical, json_output):
|
||||
if json_output:
|
||||
import json
|
||||
data = {
|
||||
"subject": subject.strip(),
|
||||
"style": style.strip(),
|
||||
"lighting": lighting.strip(),
|
||||
"composition": composition.strip(),
|
||||
"mood": mood.strip(),
|
||||
"technical": technical.strip()
|
||||
}
|
||||
# Remove empty fields to keep JSON clean
|
||||
data = {k: v for k, v in data.items() if v}
|
||||
return (json.dumps(data, indent=2),)
|
||||
else:
|
||||
parts = []
|
||||
if subject.strip(): parts.append(subject.strip())
|
||||
if style.strip(): parts.append(style.strip())
|
||||
if lighting.strip(): parts.append(lighting.strip())
|
||||
if composition.strip(): parts.append(composition.strip())
|
||||
if mood.strip(): parts.append(mood.strip())
|
||||
if technical.strip(): parts.append(technical.strip())
|
||||
return (", ".join(parts),)
|
||||
|
||||
|
||||
# ---------------- REST API ----------------
|
||||
|
||||
+59
-26
@@ -13,7 +13,7 @@ CONFIG_PATH = os.path.join(
|
||||
def load_config():
|
||||
if not os.path.exists(CONFIG_PATH):
|
||||
raise FileNotFoundError(f"[{NODE_NAME}] resolutions.json not found at {CONFIG_PATH}")
|
||||
with open(CONFIG_PATH, "r", encoding="utf-8") as f:
|
||||
with open(CONFIG_PATH, "r", encoding="utf-8-sig") as f:
|
||||
return json.load(f)
|
||||
|
||||
|
||||
@@ -23,24 +23,29 @@ class Resolution_Machine:
|
||||
config = load_config()
|
||||
|
||||
# all models
|
||||
models = list(config.keys())
|
||||
models = list(config["models"].keys())
|
||||
default_model = models[0] if models else "Unknown"
|
||||
|
||||
# union of all resolutions across all models
|
||||
all_resolutions = set()
|
||||
for model_res in config.values():
|
||||
all_resolutions.update(model_res.keys())
|
||||
resolutions = sorted(list(all_resolutions))
|
||||
|
||||
default_resolution = list(config[default_model].keys())[0]
|
||||
# Collect ALL possible resolutions to pass validation
|
||||
all_resolutions = set(["Custom"])
|
||||
if "resolutions" in config:
|
||||
for bucket in config["resolutions"].values():
|
||||
for dim in bucket.values():
|
||||
all_resolutions.update(dim.keys())
|
||||
|
||||
# We can't sort mixed types effortlessly if any, but they are strings.
|
||||
# Sorting helps UI consistency if fallback happens, though JS overrides it.
|
||||
resolutions_list = sorted(list(all_resolutions))
|
||||
|
||||
return {
|
||||
"required": {
|
||||
"model": (models, {"default": default_model}),
|
||||
"resolution": (resolutions, {"default": default_resolution}),
|
||||
"dimension": (["Square", "Portrait", "Landscape"],),
|
||||
"resolution": (resolutions_list,),
|
||||
"custom_width": ("INT", {"default": 512, "min": 1, "max": 8192}),
|
||||
"custom_height": ("INT", {"default": 512, "min": 1, "max": 8192}),
|
||||
}
|
||||
"megapixel": (["None", "0.5MP", "1.0MP", "1.5MP", "2.0MP", "4.0MP"], {"default": "None"}),
|
||||
},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("INT", "INT")
|
||||
@@ -48,27 +53,55 @@ class Resolution_Machine:
|
||||
FUNCTION = "get_resolution"
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def get_resolution(self, model, resolution, custom_width, custom_height):
|
||||
def get_resolution(self, model, dimension, resolution, custom_width, custom_height, megapixel="None"):
|
||||
config = load_config()
|
||||
|
||||
if model not in config:
|
||||
if model not in config["models"]:
|
||||
raise ValueError(f"[{NODE_NAME}] Unknown model: {model}")
|
||||
|
||||
resolutions = config[model]
|
||||
|
||||
if resolution not in resolutions:
|
||||
# fallback to first available resolution for safety
|
||||
resolution = list(resolutions.keys())[0]
|
||||
print(f"[{NODE_NAME}] Warning: invalid resolution, defaulting to {resolution}")
|
||||
|
||||
if resolution == "Custom (manual)":
|
||||
width, height = custom_width, custom_height
|
||||
if resolution == "Custom":
|
||||
w, h = custom_width, custom_height
|
||||
else:
|
||||
entry = resolutions[resolution]
|
||||
width, height = entry["width"], entry["height"]
|
||||
# Search for resolution string in the specific bucket/dimension
|
||||
# Iterate over tiers to find the bucket that has this model?
|
||||
# Actually config["models"][model] gives list of buckets.
|
||||
buckets = config["models"][model]
|
||||
|
||||
resolution_data = None
|
||||
for bucket in buckets:
|
||||
# Check if this bucket has the selected dimension
|
||||
if bucket in config["resolutions"]:
|
||||
if dimension in config["resolutions"][bucket]:
|
||||
if resolution in config["resolutions"][bucket][dimension]:
|
||||
resolution_data = config["resolutions"][bucket][dimension][resolution]
|
||||
break
|
||||
|
||||
if not resolution_data:
|
||||
# Fallback: maybe the user switched model and the resolution is now invalid, or it is custom manual
|
||||
# If obscure mismatch, default to custom values provided
|
||||
print(f"[{NODE_NAME}] Warning: resolution '{resolution}' not found for model '{model}' dim '{dimension}', using Custom")
|
||||
w, h = custom_width, custom_height
|
||||
else:
|
||||
w, h = resolution_data["width"], resolution_data["height"]
|
||||
|
||||
print(f"[{NODE_NAME}] Model={model}, Resolution={resolution}, Output=({width}, {height})")
|
||||
return (width, height)
|
||||
if megapixel != "None":
|
||||
mp_map = {
|
||||
"0.5MP": 500000,
|
||||
"1.0MP": 1000000,
|
||||
"1.5MP": 1500000,
|
||||
"2.0MP": 2000000,
|
||||
"4.0MP": 4000000,
|
||||
}
|
||||
if megapixel in mp_map:
|
||||
P = mp_map[megapixel]
|
||||
R = float(w) / float(h)
|
||||
import math
|
||||
w_new = int(round(math.sqrt(P * R) / 8.0) * 8.0)
|
||||
h_new = int(round(math.sqrt(P / R) / 8.0) * 8.0)
|
||||
w = max(8, w_new)
|
||||
h = max(8, h_new)
|
||||
|
||||
return (w, h)
|
||||
|
||||
|
||||
# --- REST endpoint for frontend config fetch ---
|
||||
|
||||
@@ -11,23 +11,8 @@ import folder_paths
|
||||
import re
|
||||
|
||||
|
||||
def parse_name(ckpt_name):
|
||||
path = ckpt_name
|
||||
filename = path.split("/")[-1]
|
||||
filename = filename.split(".")[:-1]
|
||||
filename = ".".join(filename)
|
||||
return filename
|
||||
|
||||
|
||||
def calculate_sha256(file_path):
|
||||
sha256_hash = hashlib.sha256()
|
||||
|
||||
with open(file_path, "rb") as f:
|
||||
for byte_block in iter(lambda: f.read(4096), b""):
|
||||
sha256_hash.update(byte_block)
|
||||
|
||||
return sha256_hash.hexdigest()
|
||||
|
||||
|
||||
def handle_whitespace(string: str):
|
||||
return string.strip().replace("\n", " ").replace("\r", " ").replace("\t", " ")
|
||||
@@ -56,7 +41,7 @@ def make_filename(template: str):
|
||||
return get_timestamp("%Y-%m-%d-%H%M%S") if filename == "" else filename
|
||||
|
||||
|
||||
def resolve_placeholders(template: str, prompt=None) -> str:
|
||||
def resolve_placeholders(template: str, prompt=None, extra_pnginfo=None) -> str:
|
||||
"""Resolve placeholders of the form %node_name/field% by looking into extra_pnginfo and prompt.
|
||||
|
||||
This is a best-effort resolver: it attempts several lookup strategies and falls back to leaving
|
||||
@@ -65,18 +50,58 @@ def resolve_placeholders(template: str, prompt=None) -> str:
|
||||
if not template or '%' not in template:
|
||||
return template
|
||||
|
||||
# Build title/type to node ID mapping from extra_pnginfo
|
||||
node_title_to_id = {}
|
||||
node_type_to_ids = {}
|
||||
if extra_pnginfo and isinstance(extra_pnginfo, dict) and "workflow" in extra_pnginfo:
|
||||
workflow = extra_pnginfo["workflow"]
|
||||
if isinstance(workflow, dict) and "nodes" in workflow:
|
||||
for node in workflow["nodes"]:
|
||||
if isinstance(node, dict):
|
||||
node_id = str(node.get("id"))
|
||||
node_title = node.get("title")
|
||||
node_type = node.get("type")
|
||||
if node_title:
|
||||
node_title_to_id[node_title] = node_id
|
||||
if node_type:
|
||||
if node_type not in node_type_to_ids:
|
||||
node_type_to_ids[node_type] = []
|
||||
node_type_to_ids[node_type].append(node_id)
|
||||
|
||||
def lookup(key: str):
|
||||
# key is like 'node_name/field' or 'field'
|
||||
if not key:
|
||||
return None
|
||||
# Try prompt mapping
|
||||
|
||||
node_ref = None
|
||||
field = key
|
||||
if '/' in key:
|
||||
node_ref, field = key.split('/', 1)
|
||||
|
||||
node_id = None
|
||||
if node_ref:
|
||||
if prompt and node_ref in prompt:
|
||||
node_id = node_ref
|
||||
elif node_ref in node_title_to_id:
|
||||
node_id = node_title_to_id[node_ref]
|
||||
elif node_ref in node_type_to_ids:
|
||||
node_id = node_type_to_ids[node_ref][0]
|
||||
|
||||
if node_id and prompt and node_id in prompt:
|
||||
node_data = prompt[node_id]
|
||||
if isinstance(node_data, dict) and "inputs" in node_data:
|
||||
inputs = node_data["inputs"]
|
||||
if field in inputs:
|
||||
return inputs[field]
|
||||
|
||||
# Fallback: check if the key is directly in prompt or if it is just a field name in some node
|
||||
if prompt and isinstance(prompt, dict):
|
||||
if key in prompt:
|
||||
return prompt[key]
|
||||
if '/' in key:
|
||||
_, field = key.split('/', 1)
|
||||
if field in prompt:
|
||||
return prompt[field]
|
||||
for nid, ndata in prompt.items():
|
||||
if isinstance(ndata, dict) and "inputs" in ndata:
|
||||
inputs = ndata.get("inputs", {})
|
||||
if field in inputs:
|
||||
return inputs[field]
|
||||
|
||||
return None
|
||||
|
||||
@@ -98,7 +123,7 @@ def resolve_placeholders(template: str, prompt=None) -> str:
|
||||
return pattern.sub(repl, template)
|
||||
|
||||
|
||||
class ImageSaveWithMetadata:
|
||||
class Save_Machine:
|
||||
def __init__(self):
|
||||
self.output_dir = folder_paths.output_directory
|
||||
|
||||
@@ -107,29 +132,25 @@ class ImageSaveWithMetadata:
|
||||
return {
|
||||
"required": {
|
||||
"images": ("IMAGE", ),
|
||||
"path_and_filename": ("STRING", {"default": "%time", "multiline": False}),
|
||||
"path_and_filename": ("STRING", {"default": "%time", "tooltip": "Supports %date, %time, and custom prompt %placeholders%"}),
|
||||
"extension": ((['png', 'jpeg', 'webp']),),
|
||||
},
|
||||
"optional": {
|
||||
"custom_string": ("STRING", {"default": '', "multiline": True}),
|
||||
"lossless_webp": ("BOOLEAN", {"default": True}),
|
||||
"quality_jpeg_or_webp": ("INT", {"default": 100, "min": 1, "max": 100}),
|
||||
},
|
||||
"hidden": {
|
||||
"prompt": "PROMPT",
|
||||
"extra_pnginfo": "EXTRA_PNGINFO"
|
||||
},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ()
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("file_path",)
|
||||
FUNCTION = "save_files"
|
||||
OUTPUT_NODE = True
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def save_files(self, images, path_and_filename, extension, custom_string=None,
|
||||
quality_jpeg_or_webp=100, lossless_webp=True, prompt=None):
|
||||
def save_files(self, images, path_and_filename, extension, prompt=None, extra_pnginfo=None):
|
||||
# Resolve placeholders first (uses prompt)
|
||||
try:
|
||||
resolved = resolve_placeholders(str(path_and_filename), prompt)
|
||||
resolved = resolve_placeholders(str(path_and_filename), prompt, extra_pnginfo)
|
||||
except Exception:
|
||||
resolved = str(path_and_filename)
|
||||
|
||||
@@ -152,8 +173,6 @@ class ImageSaveWithMetadata:
|
||||
os.makedirs(output_path, exist_ok=True)
|
||||
|
||||
comment_parts = []
|
||||
if custom_string:
|
||||
comment_parts.append(handle_whitespace(custom_string))
|
||||
if prompt is not None:
|
||||
try:
|
||||
prompt_text = json.dumps(prompt)
|
||||
@@ -165,20 +184,25 @@ class ImageSaveWithMetadata:
|
||||
|
||||
# Resolve any %node/field% placeholders in filename and path using prompt
|
||||
try:
|
||||
filename = resolve_placeholders(filename, prompt)
|
||||
path = resolve_placeholders(path, prompt)
|
||||
filename = resolve_placeholders(filename, prompt, extra_pnginfo)
|
||||
path = resolve_placeholders(path, prompt, extra_pnginfo)
|
||||
except Exception:
|
||||
# Best-effort: if resolution fails, continue with original templates
|
||||
pass
|
||||
|
||||
# We always use quality=100 and lossless_webp=True
|
||||
filenames = self.save_images(images, output_path, filename, comment, extension,
|
||||
quality_jpeg_or_webp, lossless_webp, prompt)
|
||||
100, True, prompt, extra_pnginfo)
|
||||
|
||||
subfolder = os.path.normpath(path)
|
||||
ui_images = [ {"filename": fn, "subfolder": subfolder if subfolder != '.' else '', "type": 'output'} for fn in filenames ]
|
||||
return {"ui": {"images": ui_images}}
|
||||
|
||||
# Return the absolute path of the first saved image (or output directory if none)
|
||||
first_file_path = os.path.join(output_path, filenames[0]) if filenames else output_path
|
||||
|
||||
return {"ui": {"images": ui_images}, "result": (first_file_path,)}
|
||||
|
||||
def save_images(self, images, output_path, filename_prefix, comment, extension, quality_jpeg_or_webp, lossless_webp, prompt=None) -> list:
|
||||
def save_images(self, images, output_path, filename_prefix, comment, extension, quality_jpeg_or_webp, lossless_webp, prompt=None, extra_pnginfo=None) -> list:
|
||||
img_count = 1
|
||||
paths = []
|
||||
|
||||
@@ -238,7 +262,9 @@ class ImageSaveWithMetadata:
|
||||
except Exception:
|
||||
metadata.add_text("prompt", str(prompt))
|
||||
|
||||
# No extra_pnginfo support: only include the prompt (handled above)
|
||||
if extra_pnginfo is not None:
|
||||
for x in extra_pnginfo:
|
||||
metadata.add_text(x, json.dumps(extra_pnginfo[x]))
|
||||
|
||||
outname = find_unique_name(base_name, 'png')
|
||||
img.save(os.path.join(output_path, outname), pnginfo=metadata, optimize=True)
|
||||
@@ -254,11 +280,19 @@ class ImageSaveWithMetadata:
|
||||
img.save(file_path, optimize=True, quality=quality_jpeg_or_webp, lossless=lossless_webp if ext_name=='webp' else False)
|
||||
|
||||
# Insert EXIF user comment with our metadata
|
||||
if comment:
|
||||
if comment or extra_pnginfo or prompt:
|
||||
try:
|
||||
exif_dict = {}
|
||||
if comment:
|
||||
exif_dict["comment"] = comment
|
||||
if prompt:
|
||||
exif_dict["prompt"] = prompt
|
||||
if extra_pnginfo:
|
||||
exif_dict["workflow"] = extra_pnginfo.get("workflow", {})
|
||||
|
||||
exif_bytes = piexif.dump({
|
||||
"Exif": {
|
||||
piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(comment, encoding="unicode")
|
||||
piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(json.dumps(exif_dict), encoding="unicode")
|
||||
},
|
||||
})
|
||||
piexif.insert(exif_bytes, file_path)
|
||||
+267
-122
@@ -1,52 +1,129 @@
|
||||
import os
|
||||
import torch
|
||||
import cv2
|
||||
import numpy as np
|
||||
import torch.nn.functional as F
|
||||
import folder_paths
|
||||
import comfy.utils
|
||||
from comfy import model_management
|
||||
from spandrel import ModelLoader
|
||||
|
||||
|
||||
def resize_tensor_opencv(tensor_chw, target_width, target_height, supersample='true', factor=2.0):
|
||||
def generate_blue_noise(batch_size, c, h, w, device, beta=1.5):
|
||||
# Generate White Noise (Standard Gaussian)
|
||||
white_noise = torch.randn((batch_size, c, h, w), device=device)
|
||||
|
||||
# Convert to Frequency Domain (FFT)
|
||||
fft_noise = torch.fft.fft2(white_noise)
|
||||
|
||||
# Create Frequency Grid
|
||||
y = torch.fft.fftfreq(h, device=device)
|
||||
x = torch.fft.fftfreq(w, device=device)
|
||||
dy, dx = torch.meshgrid(y, x, indexing='ij')
|
||||
|
||||
# Calculate distance from center (frequency magnitude)
|
||||
frequency_magnitude = torch.sqrt(dy**2 + dx**2)
|
||||
|
||||
# Apply High-Pass Scaling: Amplitude ~ f^(beta/2)
|
||||
scale = frequency_magnitude ** (beta / 2.0)
|
||||
|
||||
# Zero out DC component
|
||||
scale[0, 0] = 0
|
||||
|
||||
fft_structured = fft_noise * scale
|
||||
|
||||
# Convert back to Spatial Domain (Inverse FFT)
|
||||
blue_noise = torch.fft.ifft2(fft_structured).real
|
||||
|
||||
# Normalize standard deviation to ~1.0
|
||||
std = blue_noise.std()
|
||||
if std > 1e-6:
|
||||
blue_noise = blue_noise / std
|
||||
|
||||
return blue_noise
|
||||
|
||||
|
||||
def _make_gaussian_kernel(kernel_size, sigma, device):
|
||||
"""Build a separable 2D Gaussian kernel tensor (1,1,k,k) on device."""
|
||||
k = kernel_size
|
||||
coords = torch.arange(k, dtype=torch.float32, device=device) - k // 2
|
||||
gauss_1d = torch.exp(-0.5 * (coords / sigma) ** 2)
|
||||
gauss_1d = gauss_1d / gauss_1d.sum()
|
||||
kernel_2d = gauss_1d[:, None] * gauss_1d[None, :]
|
||||
return kernel_2d.view(1, 1, k, k)
|
||||
|
||||
|
||||
def fast_gaussian_blur_bchw(tensor_bchw, kernel_size=9, sigma=3.0):
|
||||
"""
|
||||
CPU-based resizing using OpenCV for 'rescale' mode.
|
||||
Input: tensor_chw -> torch.FloatTensor (C,H,W) in [0,1]
|
||||
Output: torch.FloatTensor (C,H,W) in [0,1], guaranteed 3-channel RGB
|
||||
Fast per-channel GPU Gaussian blur via depthwise convolution.
|
||||
Input/Output: BCHW float tensor. Kernel is always created on the same device.
|
||||
"""
|
||||
new_width = max(1, int(target_width))
|
||||
new_height = max(1, int(target_height))
|
||||
device = tensor_bchw.device
|
||||
k = kernel_size
|
||||
kernel = _make_gaussian_kernel(k, sigma, device) # on same device
|
||||
C = tensor_bchw.shape[1]
|
||||
kernel_c = kernel.expand(C, 1, k, k).to(device) # guarantee same device
|
||||
pad = k // 2
|
||||
return F.conv2d(tensor_bchw.contiguous(), kernel_c, padding=pad, groups=C)
|
||||
|
||||
interp = cv2.INTER_LANCZOS4 if factor > 1.0 else cv2.INTER_AREA
|
||||
|
||||
np_img = tensor_chw.permute(1, 2, 0).detach().cpu().numpy()
|
||||
np_img = (np.clip(np_img, 0.0, 1.0) * 255.0).astype(np.uint8)
|
||||
def resize_bchw(tensor_bchw, target_h, target_w):
|
||||
"""
|
||||
Fast GPU resize — stays on device, no antialias overhead.
|
||||
Bilinear for downscale (smoother), bicubic for upscale (sharper).
|
||||
"""
|
||||
in_h, in_w = tensor_bchw.shape[2], tensor_bchw.shape[3]
|
||||
if in_h == target_h and in_w == target_w:
|
||||
return tensor_bchw
|
||||
downscaling = (target_h < in_h) or (target_w < in_w)
|
||||
mode = 'bilinear' if downscaling else 'bicubic'
|
||||
return F.interpolate(tensor_bchw, size=(target_h, target_w), mode=mode, align_corners=False)
|
||||
|
||||
if np_img.ndim == 2:
|
||||
np_img = cv2.cvtColor(np_img, cv2.COLOR_GRAY2RGB)
|
||||
elif np_img.shape[2] == 1:
|
||||
np_img = cv2.cvtColor(np_img, cv2.COLOR_GRAY2RGB)
|
||||
elif np_img.shape[2] == 4:
|
||||
np_img = cv2.cvtColor(np_img, cv2.COLOR_RGBA2RGB)
|
||||
elif np_img.shape[2] > 3:
|
||||
np_img = np_img[:, :, :3]
|
||||
|
||||
if np_img.shape[0] == 0 or np_img.shape[1] == 0:
|
||||
raise ValueError("Input image for OpenCV resize has zero width or height.")
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Architecture optimization profiles for spandrel models.
|
||||
# Keys match the inner nn.Module class name (type(model.model).__name__).
|
||||
#
|
||||
# tile : starting tile size for tiled inference (OOM fallback halves it)
|
||||
# fp16_model : cast model weights to FP16 before inference (Tensor Core boost)
|
||||
# compile : torch.compile mode — 'reduce-overhead' for fixed-shape tiling
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
ARCH_PROFILES = {
|
||||
# ── Fast CNN / RRDB models — full FP16 support, large tiles ──────────────
|
||||
"RRDBNet": {"tile": 768, "fp16_model": True, "compile": "reduce-overhead"}, # ESRGAN, Real-ESRGAN
|
||||
"SRVGGNetCompact": {"tile": 896, "fp16_model": True, "compile": "reduce-overhead"}, # Real-ESRGAN Compact
|
||||
"SPAN": {"tile": 896, "fp16_model": True, "compile": "reduce-overhead"}, # Swift, very fast
|
||||
"PLKSR": {"tile": 768, "fp16_model": False, "compile": "reduce-overhead"}, # Lightweight
|
||||
"RealPLKSR": {"tile": 768, "fp16_model": False, "compile": "reduce-overhead"}, # Lightweight photo
|
||||
"RCAN": {"tile": 768, "fp16_model": True, "compile": "reduce-overhead"}, # Residual channel attn
|
||||
"SAFMN": {"tile": 896, "fp16_model": True, "compile": "reduce-overhead"}, # Very fast
|
||||
"DITN": {"tile": 768, "fp16_model": True, "compile": "reduce-overhead"},
|
||||
"CRAFT": {"tile": 768, "fp16_model": True, "compile": "reduce-overhead"},
|
||||
"NAFNet": {"tile": 768, "fp16_model": True, "compile": "reduce-overhead"},
|
||||
"OmniSR": {"tile": 640, "fp16_model": True, "compile": "reduce-overhead"},
|
||||
"RGT": {"tile": 640, "fp16_model": True, "compile": "reduce-overhead"},
|
||||
# ── Transformer / attention models — autocast only, conservative tiles ────
|
||||
"DAT": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"}, # Dual Attention Transformer
|
||||
"DAT_S": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
"HAT": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"}, # Hybrid Attention
|
||||
"HAT_L": {"tile": 480, "fp16_model": False, "compile": "reduce-overhead"}, # HAT Large — very heavy
|
||||
"SwinIR": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"}, # Swin Transformer IR
|
||||
"Swin2SR": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
"SAN": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"}, # Second-order Attn
|
||||
"DRCT": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
"ATD": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
"GRL": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
"FDAT": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
"AuraSR": {"tile": 512, "fp16_model": False, "compile": "reduce-overhead"},
|
||||
}
|
||||
|
||||
if supersample == 'true':
|
||||
ss_width = max(1, new_width * 8)
|
||||
ss_height = max(1, new_height * 8)
|
||||
np_img = cv2.resize(np_img, (ss_width, ss_height), interpolation=interp)
|
||||
if np_img.shape[0] == 0 or np_img.shape[1] == 0:
|
||||
raise ValueError("Image became empty after supersample resize.")
|
||||
|
||||
resized = cv2.resize(np_img, (new_width, new_height), interpolation=interp)
|
||||
tensor_out = torch.from_numpy(resized).float().div(255.0).permute(2, 0, 1)
|
||||
return tensor_out
|
||||
# Fallback profile for any architecture not listed above.
|
||||
# Uses supports_half from spandrel for fp16_model, 512 tile as safe default.
|
||||
_DEFAULT_PROFILE = {"tile": 512, "fp16_model": None, "compile": "reduce-overhead"}
|
||||
|
||||
|
||||
class Upscale_Machine:
|
||||
# Session-level cache: model object id -> torch.compile'd inner module
|
||||
# Avoids recompiling the same model on repeated runs in the same session.
|
||||
_compiled_cache: dict = {}
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
@@ -55,8 +132,7 @@ class Upscale_Machine:
|
||||
"upscale_model": (folder_paths.get_filename_list("upscale_models"), {"default": None}),
|
||||
"chained_model": (["None"] + folder_paths.get_filename_list("upscale_models"), {"default": "None"}),
|
||||
"rescale_factor": ("FLOAT", {"default": 2.0, "min": 0.01, "max": 16.0, "step": 0.01}),
|
||||
"supersample": (["true", "false"],),
|
||||
"rounding_modulus": ("INT", {"default": 8, "min": 1, "max": 1024, "step": 1}),
|
||||
"frequency_split": ("BOOLEAN", {"default": True}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,10 +142,7 @@ class Upscale_Machine:
|
||||
CATEGORY = "SATA_UtilityNode"
|
||||
|
||||
def load_model(self, model_name):
|
||||
"""Load ESRGAN/RealESRGAN/AESRGAN from the project's upscale_models folder.
|
||||
|
||||
Only legacy PyTorch/spandrel models are supported by this simplified node.
|
||||
"""
|
||||
"""Load ESRGAN/RealESRGAN/AESRGAN from the project's upscale_models folder."""
|
||||
if not model_name:
|
||||
raise ValueError("No upscale model selected or provided.")
|
||||
|
||||
@@ -83,44 +156,119 @@ class Upscale_Machine:
|
||||
model.eval()
|
||||
return model
|
||||
|
||||
def upscale_with_model(self, upscale_model, image_bhwc):
|
||||
def _get_arch_profile(self, upscale_model):
|
||||
"""
|
||||
Run tiled upscale with spandrel model.
|
||||
Input: image_bhwc -> (B,H,W,C) float [0,1]
|
||||
Output: (B,C,H',W') float [0,1]
|
||||
Detects the model architecture and returns its optimisation profile.
|
||||
Detection priority:
|
||||
1. Inner nn.Module class name (most specific)
|
||||
2. spandrel supports_half flag (fallback for unknown architectures)
|
||||
"""
|
||||
device = model_management.get_torch_device()
|
||||
upscale_model.to(device)
|
||||
inner_cls = type(upscale_model.model).__name__
|
||||
profile = ARCH_PROFILES.get(inner_cls)
|
||||
if profile is None:
|
||||
# Unknown architecture — use spandrel flag for fp16 decision
|
||||
fp16_ok = getattr(upscale_model, "supports_half", False)
|
||||
profile = {**_DEFAULT_PROFILE, "fp16_model": fp16_ok}
|
||||
return inner_cls, profile
|
||||
|
||||
in_img = image_bhwc.movedim(-1, -3).to(device)
|
||||
|
||||
tile = 512
|
||||
overlap = 32
|
||||
oom = True
|
||||
while oom:
|
||||
def _get_compiled_model(self, upscale_model, compile_mode):
|
||||
"""
|
||||
Returns a torch.compile()'d version of the model's inner nn.Module.
|
||||
Cached by object id — compiles once per session per loaded model.
|
||||
Falls back silently to eager mode if compile fails or Triton is missing.
|
||||
"""
|
||||
inner = upscale_model.model
|
||||
cache_key = id(inner)
|
||||
if cache_key not in Upscale_Machine._compiled_cache:
|
||||
# Check for triton before attempting compile, as torch.compile is lazy
|
||||
# and will otherwise crash on the first tile execution on Windows.
|
||||
try:
|
||||
steps = in_img.shape[0] * comfy.utils.get_tiled_scale_steps(
|
||||
in_img.shape[3], in_img.shape[2], tile_x=tile, tile_y=tile, overlap=overlap
|
||||
)
|
||||
pbar = comfy.utils.ProgressBar(steps)
|
||||
s = comfy.utils.tiled_scale(
|
||||
in_img,
|
||||
lambda a: upscale_model(a),
|
||||
tile_x=tile,
|
||||
tile_y=tile,
|
||||
overlap=overlap,
|
||||
upscale_amount=getattr(upscale_model, "scale", 4),
|
||||
pbar=pbar
|
||||
)
|
||||
oom = False
|
||||
except model_management.OOM_EXCEPTION as e:
|
||||
tile //= 2
|
||||
if tile < 128:
|
||||
raise e
|
||||
import triton
|
||||
has_triton = True
|
||||
except ImportError:
|
||||
has_triton = False
|
||||
|
||||
upscale_model.cpu()
|
||||
s = torch.clamp(s, min=0.0, max=1.0)
|
||||
return s
|
||||
if has_triton:
|
||||
try:
|
||||
compiled = torch.compile(inner, mode=compile_mode, dynamic=False)
|
||||
Upscale_Machine._compiled_cache[cache_key] = compiled
|
||||
except Exception as ex:
|
||||
print(f"[Upscale_Machine] torch.compile unavailable ({ex}), using eager mode.")
|
||||
Upscale_Machine._compiled_cache[cache_key] = inner
|
||||
else:
|
||||
print("[Upscale_Machine] Triton not installed (Windows), skipping torch.compile.")
|
||||
Upscale_Machine._compiled_cache[cache_key] = inner
|
||||
|
||||
return Upscale_Machine._compiled_cache[cache_key]
|
||||
|
||||
def upscale_with_model(self, upscale_model, image_bchw, device, pbar=None):
|
||||
"""
|
||||
Architecture-aware tiled upscale:
|
||||
- Detects model type and loads optimisation profile
|
||||
- FP16 weights (Tensor Cores) for CNN models that support it
|
||||
- torch.autocast for mixed-precision on every tile (all architectures)
|
||||
- torch.compile fused graph (cached per session, falls back safely)
|
||||
Input: image_bchw -> (B,C,H,W) float32 [0,1]
|
||||
Output: (B,C,H',W') float32 [0,1]
|
||||
"""
|
||||
arch_name, profile = self._get_arch_profile(upscale_model)
|
||||
spandrel_supports_half = getattr(upscale_model, "supports_half", False)
|
||||
use_fp16 = profile["fp16_model"] and spandrel_supports_half
|
||||
tile = profile["tile"]
|
||||
comp_mode = profile["compile"]
|
||||
device_type = device.type if hasattr(device, "type") else str(device).split(":")[0]
|
||||
|
||||
print(f"[Upscale_Machine] {arch_name} | "
|
||||
f"tile={tile} | fp16={'yes' if use_fp16 else 'no'} | compile={comp_mode}")
|
||||
|
||||
upscale_model.to(device)
|
||||
if use_fp16:
|
||||
upscale_model.half()
|
||||
in_tensor = image_bchw.to(device).half()
|
||||
else:
|
||||
in_tensor = image_bchw.to(device).float()
|
||||
|
||||
# Compile inner nn.Module once per session
|
||||
compiled_fn = self._get_compiled_model(upscale_model, comp_mode)
|
||||
|
||||
try:
|
||||
overlap = 32
|
||||
oom = True
|
||||
while oom:
|
||||
try:
|
||||
if not pbar:
|
||||
steps = in_tensor.shape[0] * comfy.utils.get_tiled_scale_steps(
|
||||
in_tensor.shape[3], in_tensor.shape[2], tile_x=tile, tile_y=tile, overlap=overlap
|
||||
)
|
||||
local_pbar = comfy.utils.ProgressBar(steps)
|
||||
else:
|
||||
local_pbar = pbar
|
||||
|
||||
import contextlib
|
||||
# If model doesn't support fp16 (like DAT/HAT), autocast to fp16 will also cause NaNs.
|
||||
# We only autocast if use_fp16 is True to be perfectly safe.
|
||||
ctx = torch.autocast(device_type=device_type, dtype=torch.float16) if use_fp16 else contextlib.nullcontext()
|
||||
|
||||
with ctx:
|
||||
s = comfy.utils.tiled_scale(
|
||||
in_tensor,
|
||||
lambda a: compiled_fn(a),
|
||||
tile_x=tile,
|
||||
tile_y=tile,
|
||||
overlap=overlap,
|
||||
upscale_amount=getattr(upscale_model, "scale", 4),
|
||||
pbar=local_pbar
|
||||
)
|
||||
oom = False
|
||||
except model_management.OOM_EXCEPTION as e:
|
||||
model_management.soft_empty_cache()
|
||||
tile //= 2
|
||||
if tile < 128:
|
||||
raise e
|
||||
finally:
|
||||
upscale_model.cpu().float() # Always restore to FP32 on CPU
|
||||
|
||||
return torch.clamp(s.float(), min=0.0, max=1.0)
|
||||
|
||||
def _round_to_modulus(self, value, modulus):
|
||||
if modulus is None or modulus <= 1:
|
||||
@@ -128,68 +276,65 @@ class Upscale_Machine:
|
||||
return max(modulus, int(round(value / modulus)) * modulus)
|
||||
|
||||
def upscale(self, image, upscale_model, chained_model="None", rounding_modulus=8, supersample='true',
|
||||
rescale_factor=2.0):
|
||||
rescale_factor=2.0, frequency_split=True):
|
||||
|
||||
if image.ndim != 4:
|
||||
raise ValueError("Expected IMAGE tensor with 4 dims (B,H,W,C).")
|
||||
|
||||
device = model_management.get_torch_device()
|
||||
|
||||
original_height = int(image.shape[1])
|
||||
original_width = int(image.shape[2])
|
||||
target_width = self._round_to_modulus(original_width * rescale_factor, rounding_modulus)
|
||||
target_height = self._round_to_modulus(original_height * rescale_factor, rounding_modulus)
|
||||
target_w = self._round_to_modulus(original_width * rescale_factor, rounding_modulus)
|
||||
target_h = self._round_to_modulus(original_height * rescale_factor, rounding_modulus)
|
||||
|
||||
current_bhwc = image
|
||||
# Move to GPU once as BCHW — stay there the entire pipeline
|
||||
current_bchw = image.movedim(-1, 1).to(device)
|
||||
if current_bchw.shape[1] == 1:
|
||||
current_bchw = current_bchw.repeat(1, 3, 1, 1)
|
||||
elif current_bchw.shape[1] > 3:
|
||||
current_bchw = current_bchw[:, :3, :, :]
|
||||
|
||||
# First upscale
|
||||
# Keep a clean GPU copy of original for frequency split baseline
|
||||
original_bchw = current_bchw.clone()
|
||||
|
||||
# ── First upscale model ───────────────────────────────────────────────
|
||||
if upscale_model:
|
||||
up_model = self.load_model(upscale_model)
|
||||
up_bchw = self.upscale_with_model(up_model, current_bhwc)
|
||||
current_bhwc = up_bchw.movedim(1, -1).contiguous()
|
||||
current_bchw = self.upscale_with_model(up_model, current_bchw, device)
|
||||
# tiled_scale may return CPU tensor — pin back to GPU
|
||||
current_bchw = current_bchw.to(device)
|
||||
current_bchw = resize_bchw(current_bchw, target_h, target_w)
|
||||
|
||||
# Downscale to target size before chaining
|
||||
batch_downscaled = []
|
||||
for i in range(current_bhwc.shape[0]):
|
||||
chw = current_bhwc[i].movedim(-1, 0) # (H,W,C) -> (C,H,W)
|
||||
chw = torch.clamp(chw, 0.0, 1.0)
|
||||
resized_chw = resize_tensor_opencv(
|
||||
chw, target_width=target_width, target_height=target_height,
|
||||
supersample=supersample, factor=rescale_factor
|
||||
)
|
||||
if resized_chw.shape[0] == 1:
|
||||
resized_chw = resized_chw.repeat(3, 1, 1)
|
||||
elif resized_chw.shape[0] > 3:
|
||||
resized_chw = resized_chw[:3, :, :]
|
||||
batch_downscaled.append(resized_chw.unsqueeze(0))
|
||||
current_bhwc = torch.cat(batch_downscaled, dim=0)
|
||||
current_bhwc = current_bhwc.movedim(1, -1).contiguous()
|
||||
|
||||
# Second upscale (chained model) if selected
|
||||
if chained_model and chained_model != "None":
|
||||
# chained model is a model name
|
||||
# ── Chained model ─────────────────────────────────────────────────────
|
||||
has_chain = chained_model and chained_model != "None"
|
||||
if has_chain:
|
||||
chain_model = self.load_model(chained_model)
|
||||
chain_bchw = self.upscale_with_model(chain_model, current_bhwc)
|
||||
current_bhwc = chain_bchw.movedim(1, -1).contiguous()
|
||||
current_bchw = self.upscale_with_model(chain_model, current_bchw, device)
|
||||
# tiled_scale may return CPU tensor — pin back to GPU
|
||||
current_bchw = current_bchw.to(device)
|
||||
current_bchw = resize_bchw(current_bchw, target_h, target_w)
|
||||
|
||||
# If no chained model, ensure output is at target size
|
||||
if not (chained_model and chained_model != "None"):
|
||||
# Already downscaled after first upscale, so just output
|
||||
images_out = current_bhwc
|
||||
else:
|
||||
# After chained model, do a final resize to target size
|
||||
batch_out = []
|
||||
for i in range(current_bhwc.shape[0]):
|
||||
chw = current_bhwc[i].movedim(-1, 0)
|
||||
chw = torch.clamp(chw, 0.0, 1.0)
|
||||
resized_chw = resize_tensor_opencv(
|
||||
chw, target_width=target_width, target_height=target_height,
|
||||
supersample=supersample, factor=rescale_factor
|
||||
)
|
||||
if resized_chw.shape[0] == 1:
|
||||
resized_chw = resized_chw.repeat(3, 1, 1)
|
||||
elif resized_chw.shape[0] > 3:
|
||||
resized_chw = resized_chw[:3, :, :]
|
||||
batch_out.append(resized_chw.unsqueeze(0))
|
||||
out_bchw = torch.cat(batch_out, dim=0)
|
||||
images_out = out_bchw.movedim(1, -1).contiguous()
|
||||
images_out = current_bchw
|
||||
|
||||
return (images_out,)
|
||||
# ── Frequency-Split SR ────────────────────────────────────────────────
|
||||
if frequency_split and upscale_model:
|
||||
# Ensure both tensors are on the same device before any arithmetic
|
||||
bicubic_bchw = resize_bchw(original_bchw.to(device), target_h, target_w)
|
||||
images_out = images_out.to(device)
|
||||
|
||||
sr_low = fast_gaussian_blur_bchw(images_out)
|
||||
sr_high = images_out - sr_low
|
||||
|
||||
bic_low = fast_gaussian_blur_bchw(bicubic_bchw)
|
||||
images_out = torch.clamp(bic_low + sr_high, 0.0, 1.0)
|
||||
|
||||
# ── Blue Noise realism (chained only) ─────────────────────────────────
|
||||
if has_chain:
|
||||
images_out = images_out.to(device)
|
||||
B, C, H, W = images_out.shape
|
||||
noise = generate_blue_noise(B, C, H, W, device)
|
||||
images_out = torch.clamp(images_out + noise * 0.15, 0.0, 1.0)
|
||||
|
||||
# Convert back to BHWC for ComfyUI
|
||||
return (images_out.movedim(1, -1).contiguous(),)
|
||||
@@ -0,0 +1,243 @@
|
||||
{
|
||||
"Toon": "cartoon, toon",
|
||||
"Real": "photorealistic, realistic, 3d, photography, professional digital photography",
|
||||
"Anime": "anime, anime screenshot, anime coloring, anime-art",
|
||||
"3D": "3D render, 3d, cgi, realistic",
|
||||
"3d render style": "3d render style",
|
||||
"abstract art style": "abstract art style",
|
||||
"abstract expressionism style": "abstract expressionism style",
|
||||
"abstract figurative style": "abstract figurative style",
|
||||
"abstract landscapes style": "abstract landscapes style",
|
||||
"abstract portraiture style": "abstract portraiture style",
|
||||
"abstract still life style": "abstract still life style",
|
||||
"abstractionism style": "abstractionism style",
|
||||
"acrylic painting style": "acrylic painting style",
|
||||
"action painting style": "action painting style",
|
||||
"american impressionism style": "american impressionism style",
|
||||
"american propaganda poster style": "american propaganda poster style",
|
||||
"american scene painting style": "american scene painting style",
|
||||
"analytical cubism style": "analytical cubism style",
|
||||
"anime style": "anime style",
|
||||
"anime watercolor style": "anime watercolor style",
|
||||
"architectural design style": "architectural design style",
|
||||
"architectural rendering style": "architectural rendering style",
|
||||
"art brut style": "art brut style",
|
||||
"art deco style": "art deco style",
|
||||
"art nouveau ornamental style": "art nouveau ornamental style",
|
||||
"art nouveau style": "art nouveau style",
|
||||
"ashcan school style": "ashcan school style",
|
||||
"assemblage art style": "assemblage art style",
|
||||
"augmented reality art style": "augmented reality art style",
|
||||
"baroque ornate style": "baroque ornate style",
|
||||
"baroque style": "baroque style",
|
||||
"batik style": "batik style, batik art style",
|
||||
"bauhaus style": "bauhaus style",
|
||||
"bengal school of art style": "bengal school of art style",
|
||||
"bio art style": "bio art style",
|
||||
"blind box toy style": "blind box toy style",
|
||||
"block print style": "block print style",
|
||||
"body painting style": "body painting style",
|
||||
"botanical art style": "botanical art style",
|
||||
"botanical illustration style": "botanical illustration style",
|
||||
"bronze casting style": "bronze casting style",
|
||||
"brutalist style": "brutalist style",
|
||||
"by alfons mucha style": "by alfons mucha style",
|
||||
"byzantine art style": "byzantine art style",
|
||||
"carl larsson style": "carl larsson style",
|
||||
"cel shaded anime style": "cel shaded anime style",
|
||||
"celtic art style": "celtic art style",
|
||||
"ceramic pottery style": "ceramic pottery style",
|
||||
"charcoal drawing style": "charcoal drawing style",
|
||||
"chiaroscuro style": "chiaroscuro style",
|
||||
"chibi art style": "chibi art style",
|
||||
"children's book style": "children's book style",
|
||||
"classicism style": "classicism style",
|
||||
"cobra style": "cobra style",
|
||||
"collage style": "collage style",
|
||||
"color field painting style": "color field painting style",
|
||||
"colored pencil drawing style": "colored pencil drawing style",
|
||||
"comic book style": "comic book style",
|
||||
"computer art style": "computer art style",
|
||||
"concept art style": "concept art style",
|
||||
"conceptual art style": "conceptual art style",
|
||||
"constructivism style": "constructivism style",
|
||||
"contemporary style": "contemporary style, contemporary art style",
|
||||
"cubism style": "cubism style, cubist art style",
|
||||
"cubist futurism style": "cubist futurism style",
|
||||
"cyberpunk style": "cyberpunk style",
|
||||
"dada style": "dada style",
|
||||
"dadaism style": "dadaism style",
|
||||
"data visualization style": "data visualization style",
|
||||
"de stijl style": "de stijl style",
|
||||
"digital art style": "digital art style",
|
||||
"digital illustration style": "digital illustration style",
|
||||
"digital painting style": "digital painting style",
|
||||
"digital sculpture style": "digital sculpture style",
|
||||
"dutch golden age style": "dutch golden age style",
|
||||
"eco art style": "eco art style",
|
||||
"editorial illustration style": "editorial illustration style",
|
||||
"embroidery style": "embroidery style",
|
||||
"en plein air style": "en plein air style",
|
||||
"engraving style": "engraving style",
|
||||
"environmental art style": "environmental art style",
|
||||
"environmental sculpture style": "environmental sculpture style",
|
||||
"etching style": "etching style",
|
||||
"expressionism style": "expressionism style",
|
||||
"fashion design style": "fashion design style",
|
||||
"fashion illustration style": "fashion illustration style",
|
||||
"fauvism style": "fauvism style",
|
||||
"fiber art style": "fiber art style",
|
||||
"figurative art style": "figurative art style",
|
||||
"filigree style": "filigree style",
|
||||
"film and video art style": "film and video art style",
|
||||
"flat design style": "flat design style",
|
||||
"flemish baroque style": "flemish baroque style",
|
||||
"folk art style": "folk art style",
|
||||
"found object art style": "found object art style",
|
||||
"fresco painting style": "fresco painting style",
|
||||
"futurism style": "futurism style",
|
||||
"game art style": "game art style",
|
||||
"generative art style": "generative art style",
|
||||
"genre painting style": "genre painting style",
|
||||
"geometric style": "geometric style",
|
||||
"ghibli anime style": "ghibli anime style",
|
||||
"ghibli-like colors style": "ghibli-like colors style",
|
||||
"glassblowing style": "glassblowing style",
|
||||
"glitch art style": "glitch art style",
|
||||
"gothic art style": "gothic art style",
|
||||
"gothic revival style": "gothic revival style",
|
||||
"gothic style": "gothic style",
|
||||
"gouache painting style": "gouache painting style",
|
||||
"graffiti style": "graffiti style, graffiti art style",
|
||||
"graphite drawing style": "graphite drawing style",
|
||||
"hard-edge painting style": "hard-edge painting style",
|
||||
"hellenistic art style": "hellenistic art style",
|
||||
"high detail style": "high detail style",
|
||||
"hindu art style": "hindu art style",
|
||||
"holographic style": "holographic style",
|
||||
"hudson river school style": "hudson river school style",
|
||||
"hyperrealism style": "hyperrealism style",
|
||||
"impressionism style": "impressionism style",
|
||||
"industrial design style": "industrial design style",
|
||||
"ink painting style": "ink painting style",
|
||||
"installation art style": "installation art style",
|
||||
"interactive art style": "interactive art style",
|
||||
"interior architecture style": "interior architecture style",
|
||||
"interior design style": "interior design style",
|
||||
"islamic art style": "islamic art style",
|
||||
"islamic geometric style": "islamic geometric style",
|
||||
"isometric style": "isometric style",
|
||||
"jewelry design style": "jewelry design style",
|
||||
"kawaii art style": "kawaii art style",
|
||||
"kinetic art style": "kinetic art style",
|
||||
"land art style": "land art style",
|
||||
"landscapes style": "landscapes style",
|
||||
"les nabis style": "les nabis style",
|
||||
"letterpress style": "letterpress style",
|
||||
"light art style": "light art style",
|
||||
"linocut style": "linocut style",
|
||||
"lithograph style": "lithograph style",
|
||||
"lithography style": "lithography style",
|
||||
"low poly art style": "low poly art style",
|
||||
"luminism style": "luminism style",
|
||||
"magic realism style": "magic realism style",
|
||||
"mail art style": "mail art style",
|
||||
"manga style": "manga style",
|
||||
"mannerism style": "mannerism style",
|
||||
"mecha anime style": "mecha anime style",
|
||||
"medieval art style": "medieval art style",
|
||||
"metalworking style": "metalworking style",
|
||||
"metaphysical art style": "metaphysical art style",
|
||||
"minimalism style": "minimalism style, minimalist art style",
|
||||
"mixed media style": "mixed media style",
|
||||
"modern style": "modern style",
|
||||
"modernist style": "modernist style",
|
||||
"monet style": "monet style",
|
||||
"monotype style": "monotype style",
|
||||
"mosaic style": "mosaic style",
|
||||
"mughal art style": "mughal art style",
|
||||
"naive art style": "naive art style",
|
||||
"neo-expressionism style": "neo-expressionism style",
|
||||
"neo-impressionism style": "neo-impressionism style",
|
||||
"neoclassicism style": "neoclassicism style",
|
||||
"neon art style": "neon art style",
|
||||
"new media style": "new media style",
|
||||
"new objectivity style": "new objectivity style",
|
||||
"northern renaissance style": "northern renaissance style",
|
||||
"oil painting style": "oil painting style",
|
||||
"op art style": "op art style",
|
||||
"orphism style": "orphism style",
|
||||
"pastel drawing style": "pastel drawing style",
|
||||
"pastel painting style": "pastel painting style",
|
||||
"pen and ink drawing style": "pen and ink drawing style",
|
||||
"pencil sketch style": "pencil sketch style",
|
||||
"performance art style": "performance art style",
|
||||
"performance painting style": "performance painting style",
|
||||
"photography style": "photography style",
|
||||
"photorealism style": "photorealism style",
|
||||
"photorealistic render style": "photorealistic render style",
|
||||
"pixar style": "pixar style",
|
||||
"pixel art style": "pixel art style",
|
||||
"pointillism style": "pointillism style",
|
||||
"pop art style": "pop art style",
|
||||
"portraiture style": "portraiture style",
|
||||
"post-impressionism style": "post-impressionism style",
|
||||
"post-minimalism style": "post-minimalism style",
|
||||
"postmodernism style": "postmodernism style",
|
||||
"pre-raphaelite brotherhood style": "pre-raphaelite brotherhood style",
|
||||
"precisionism style": "precisionism style",
|
||||
"primitivism style": "primitivism style",
|
||||
"printmaking style": "printmaking style",
|
||||
"proto-renaissance style": "proto-renaissance style",
|
||||
"raised fist style": "raised fist style",
|
||||
"realism style": "realism style",
|
||||
"renaissance style": "renaissance style, renaissance art style",
|
||||
"retro digital style": "retro digital style",
|
||||
"risograph style": "risograph style",
|
||||
"rococo style": "rococo style, rococo decorative style",
|
||||
"romanticism style": "romanticism style",
|
||||
"scientific illustration style": "scientific illustration style",
|
||||
"screen print style": "screen print style",
|
||||
"screen printing style": "screen printing style",
|
||||
"sculpture style": "sculpture style",
|
||||
"seascape style": "seascape style",
|
||||
"seinen manga style": "seinen manga style",
|
||||
"sgraffito style": "sgraffito style",
|
||||
"shoujo manga style": "shoujo manga style",
|
||||
"sienese school style": "sienese school style",
|
||||
"social realism style": "social realism style",
|
||||
"socialist realism style": "socialist realism style",
|
||||
"southern renaissance style": "southern renaissance style",
|
||||
"stained glass style": "stained glass style",
|
||||
"still life style": "still life style",
|
||||
"stone carving style": "stone carving style",
|
||||
"storybook style": "storybook style",
|
||||
"street art style": "street art style",
|
||||
"superflat style": "superflat style",
|
||||
"suprematism style": "suprematism style",
|
||||
"surrealism style": "surrealism style",
|
||||
"symbolism style": "symbolism style",
|
||||
"synthetic cubism style": "synthetic cubism style",
|
||||
"synthwave style": "synthwave style",
|
||||
"tapestry style": "tapestry style",
|
||||
"technical illustration style": "technical illustration style",
|
||||
"tempera painting style": "tempera painting style",
|
||||
"textile design style": "textile design style",
|
||||
"textile sculpture style": "textile sculpture style",
|
||||
"tonalism style": "tonalism style",
|
||||
"trompe-l'oeil style": "trompe-l'oeil style",
|
||||
"ukiyo-e style": "ukiyo-e style, ukiyo-e",
|
||||
"urban art style": "urban art style",
|
||||
"urban sketching style": "urban sketching style",
|
||||
"vaporwave style": "vaporwave style",
|
||||
"vector art style": "vector art style",
|
||||
"verism style": "verism style",
|
||||
"victorian art style": "victorian art style",
|
||||
"video art style": "video art style",
|
||||
"virtual reality art style": "virtual reality art style",
|
||||
"watercolor style": "watercolor style, watercolor_\\(medium\\)",
|
||||
"weaving style": "weaving style",
|
||||
"wildlife art style": "wildlife art style",
|
||||
"wood carving style": "wood carving style",
|
||||
"woodcut style": "woodcut style"
|
||||
}
|
||||
+14999
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,60 @@
|
||||
Joyful atmosphere
|
||||
Melancholic atmosphere
|
||||
Peaceful atmosphere
|
||||
Tense atmosphere
|
||||
Mysterious atmosphere
|
||||
Romantic atmosphere
|
||||
Nostalgic atmosphere
|
||||
Contemplative atmosphere
|
||||
Energetic atmosphere
|
||||
Serene atmosphere
|
||||
Epic atmosphere
|
||||
Haunting atmosphere
|
||||
Dramatic atmosphere
|
||||
Intense atmosphere
|
||||
Chaotic atmosphere
|
||||
Dark atmosphere
|
||||
Ethereal atmosphere
|
||||
Mythical atmosphere
|
||||
Surreal atmosphere
|
||||
Dystopian atmosphere
|
||||
Misty atmosphere
|
||||
Stormy atmosphere
|
||||
Foggy atmosphere
|
||||
Sunny atmosphere
|
||||
Rainy atmosphere
|
||||
Snowy atmosphere
|
||||
Desert atmosphere
|
||||
Tropical atmosphere
|
||||
Forest atmosphere
|
||||
Ocean atmosphere
|
||||
Dawn atmosphere
|
||||
Twilight atmosphere
|
||||
Night atmosphere
|
||||
Golden hour atmosphere
|
||||
Winter atmosphere
|
||||
Summer atmosphere
|
||||
Spring atmosphere
|
||||
Autumn atmosphere
|
||||
Dusk atmosphere
|
||||
Midnight atmosphere
|
||||
Minimalist atmosphere
|
||||
Cyberpunk atmosphere
|
||||
Steampunk atmosphere
|
||||
Retro atmosphere
|
||||
Vintage atmosphere
|
||||
Art deco atmosphere
|
||||
Gothic atmosphere
|
||||
Industrial atmosphere
|
||||
Futuristic atmosphere
|
||||
Classical atmosphere
|
||||
Cozy atmosphere
|
||||
Eerie atmosphere
|
||||
Whimsical atmosphere
|
||||
Dreamy atmosphere
|
||||
Magical atmosphere
|
||||
Sacred atmosphere
|
||||
Festive atmosphere
|
||||
Meditative atmosphere
|
||||
Abandoned atmosphere
|
||||
Wild atmosphere
|
||||
|
@@ -0,0 +1,558 @@
|
||||
balaclava
|
||||
coif
|
||||
crown
|
||||
diadem
|
||||
hair bow
|
||||
hair ribbon
|
||||
hair tie
|
||||
hairband
|
||||
hat
|
||||
headband
|
||||
forehead protector
|
||||
sweatband
|
||||
hachimaki
|
||||
mongkhon
|
||||
headdress
|
||||
maid headdress
|
||||
headscarf
|
||||
hijab
|
||||
tiara
|
||||
veil
|
||||
honggaitou
|
||||
wimple
|
||||
blouse
|
||||
frilled shirt
|
||||
sleeveless shirt
|
||||
bustier
|
||||
crop top
|
||||
camisole
|
||||
cardigan
|
||||
cardigan vest
|
||||
coat
|
||||
duffel coat
|
||||
fur coat
|
||||
fur-trimmed coat
|
||||
long coat
|
||||
overcoat
|
||||
peacoat
|
||||
raincoat
|
||||
yellow raincoat
|
||||
see-through raincoat
|
||||
trench coat
|
||||
winter coat
|
||||
compression shirt
|
||||
corset
|
||||
deel
|
||||
dress
|
||||
halterneck
|
||||
criss-cross halter
|
||||
halterneck
|
||||
hoodie
|
||||
jacket
|
||||
blazer
|
||||
cropped jacket
|
||||
letterman jacket
|
||||
safari jacket
|
||||
suit jacket
|
||||
sukajan
|
||||
trench coat
|
||||
nightgown
|
||||
muneate
|
||||
poncho
|
||||
raglan sleeves
|
||||
robe
|
||||
thobe
|
||||
stole
|
||||
scapular
|
||||
shirt
|
||||
collared shirt
|
||||
dress shirt
|
||||
off-shoulder shirt
|
||||
sleeveless shirt
|
||||
striped shirt
|
||||
t-shirt
|
||||
shrug
|
||||
surcoat
|
||||
sweater
|
||||
turtleneck sweater
|
||||
sleeveless turtleneck
|
||||
sweater dress
|
||||
ribbed sweater
|
||||
aran sweater
|
||||
tabard
|
||||
tailcoat
|
||||
tank top
|
||||
stringer
|
||||
tube top
|
||||
bandeau
|
||||
underbust
|
||||
vest
|
||||
sweater vest
|
||||
waistcoat
|
||||
bloomers
|
||||
buruma
|
||||
chaps
|
||||
kilt
|
||||
pants
|
||||
bell-bottoms
|
||||
capri pants
|
||||
detached pants
|
||||
jeans
|
||||
cutoff jeans
|
||||
lowleg pants
|
||||
pants rolled up
|
||||
yoga pants
|
||||
pelvic curtain
|
||||
petticoat
|
||||
sarong
|
||||
shorts
|
||||
bike shorts
|
||||
denim shorts
|
||||
dolphin shorts
|
||||
gym shorts
|
||||
lowleg shorts
|
||||
micro shorts
|
||||
pleated shorts
|
||||
short shorts
|
||||
shorts under skirt
|
||||
skirt
|
||||
bubble skirt
|
||||
high-waist skirt
|
||||
high-low skirt
|
||||
long skirt
|
||||
lowleg skirt
|
||||
microskirt
|
||||
miniskirt
|
||||
overall skirt
|
||||
overskirt
|
||||
plaid skirt
|
||||
pleated skirt
|
||||
showgirl skirt
|
||||
suspender skirt
|
||||
tutu
|
||||
kneehighs
|
||||
leggings
|
||||
leg warmers
|
||||
over-kneehighs
|
||||
pantyhose
|
||||
thighband pantyhose
|
||||
socks
|
||||
ankle socks
|
||||
bobby socks
|
||||
loose socks
|
||||
tabi
|
||||
toe socks
|
||||
tube socks
|
||||
thighhighs
|
||||
shoes
|
||||
boots
|
||||
ankle boots
|
||||
armored boots
|
||||
cowboy boots
|
||||
spurs
|
||||
high heel boots
|
||||
knee boots
|
||||
lace-up boots
|
||||
rubber boots
|
||||
thigh boots
|
||||
work boots
|
||||
ankle lace-up
|
||||
cross-laced sandals
|
||||
cross-laced shoes
|
||||
cross-laced slit
|
||||
lace-up boots
|
||||
sneakers
|
||||
high tops
|
||||
converse
|
||||
dress shoes
|
||||
loafers
|
||||
kiltie loafers
|
||||
oxfords
|
||||
saddle shoes
|
||||
flats
|
||||
footwear ribbon
|
||||
high heels
|
||||
pumps
|
||||
stiletto heels
|
||||
wedge heels
|
||||
mary janes
|
||||
okobo
|
||||
platform boots
|
||||
platform heels
|
||||
platform sandals
|
||||
platform shoes
|
||||
pointy boots
|
||||
pointy shoes
|
||||
sandals
|
||||
cross-laced sandals
|
||||
flip-flops
|
||||
gladiator sandals
|
||||
geta
|
||||
okobo
|
||||
sports sandals
|
||||
waraji
|
||||
zouri
|
||||
monk shoes
|
||||
open-toe boots
|
||||
open-toe shoes
|
||||
slippers
|
||||
animal slippers
|
||||
ballet slippers
|
||||
crocs
|
||||
uwabaki
|
||||
spats
|
||||
uwabaki
|
||||
winged boots
|
||||
winged sandals
|
||||
winged shoes
|
||||
winged slippers
|
||||
apron
|
||||
armor
|
||||
armored dress
|
||||
bikini armor
|
||||
band uniform
|
||||
cape
|
||||
capelet
|
||||
hood
|
||||
side cape
|
||||
cassock
|
||||
cheerleader
|
||||
costume
|
||||
ghost costume
|
||||
formal clothes
|
||||
suit
|
||||
business suit
|
||||
pant suit
|
||||
skirt suit
|
||||
tuxedo
|
||||
g-suit
|
||||
gym uniform
|
||||
buruma
|
||||
harem outfit
|
||||
loincloth
|
||||
hazmat suit
|
||||
hev suit
|
||||
kigurumi
|
||||
animal costume
|
||||
bear costume
|
||||
boar costume
|
||||
cat costume
|
||||
cow costume
|
||||
dog costume
|
||||
monkey costume
|
||||
mouse costume
|
||||
panda costume
|
||||
penguin costume
|
||||
pig costume
|
||||
rabbit costume
|
||||
reindeer costume
|
||||
seal costume
|
||||
sheep costume
|
||||
tiger costume
|
||||
maid
|
||||
jersey maid
|
||||
mecha pilot suit
|
||||
miko
|
||||
nontraditional miko
|
||||
military uniform
|
||||
nun
|
||||
traditional nun
|
||||
overalls
|
||||
pajamas
|
||||
plugsuit
|
||||
priest
|
||||
sailor
|
||||
santa costume
|
||||
school uniform
|
||||
serafuku
|
||||
sailor dress
|
||||
gakuran
|
||||
meiji schoolgirl uniform
|
||||
shosei
|
||||
track suit
|
||||
sweatpants
|
||||
sweater
|
||||
tutu
|
||||
waitress
|
||||
cowboy western
|
||||
bikesuit
|
||||
racing suit
|
||||
bodystocking
|
||||
bodysuit
|
||||
jumpsuit
|
||||
short jumpsuit
|
||||
leotard
|
||||
see-through leotard
|
||||
strapless leotard
|
||||
playboy bunny
|
||||
swimsuit
|
||||
competition swimsuit
|
||||
slingshot swimsuit
|
||||
school swimsuit
|
||||
bikini
|
||||
leaf bikini
|
||||
string bikini
|
||||
micro bikini
|
||||
side-tie bikini bottom
|
||||
lowleg bikini
|
||||
thong bikini
|
||||
venus bikini
|
||||
sports bikini
|
||||
tankini
|
||||
criss-cross halter
|
||||
swim briefs
|
||||
jammers
|
||||
legskin
|
||||
rash guard
|
||||
robe
|
||||
bathrobe
|
||||
open robe
|
||||
kesa
|
||||
romper
|
||||
tunic
|
||||
unitard
|
||||
chinese clothes
|
||||
changpao
|
||||
china dress
|
||||
fengguan
|
||||
hanfu
|
||||
longpao
|
||||
tangzhuang
|
||||
dirndl
|
||||
japanese clothes
|
||||
fundoshi
|
||||
mizu happi
|
||||
geta
|
||||
hakama
|
||||
hakama skirt
|
||||
hakama short skirt
|
||||
hakama pants
|
||||
kimono
|
||||
furisode
|
||||
layered kimono
|
||||
short kimono
|
||||
uchikake
|
||||
yukata
|
||||
haori
|
||||
happi
|
||||
chanchanko
|
||||
dotera
|
||||
hanten
|
||||
kimono skirt
|
||||
miko
|
||||
nontraditional miko
|
||||
sarashi
|
||||
Midriff sarashi
|
||||
Chest sarashi
|
||||
Budget sarashi
|
||||
Undone sarashi
|
||||
straw cape
|
||||
mino boushi
|
||||
tabi
|
||||
tasuki
|
||||
korean clothes
|
||||
hanbok
|
||||
ao dai
|
||||
circlet
|
||||
ear covers
|
||||
ear cuffs
|
||||
earrings
|
||||
hoop earrings
|
||||
stud earrings
|
||||
earclip
|
||||
ear chain
|
||||
face chain
|
||||
glasses
|
||||
monocle
|
||||
hair ornament
|
||||
dianzi
|
||||
hair beads
|
||||
hair bobbles
|
||||
hairclip
|
||||
hairpin
|
||||
hair scrunchie
|
||||
hair stick
|
||||
kanzashi
|
||||
head chain
|
||||
headphones
|
||||
earphones
|
||||
earpiece
|
||||
headset
|
||||
laurel crown
|
||||
mask
|
||||
plague doctor mask
|
||||
surgical mask
|
||||
ascot
|
||||
bowtie
|
||||
choker
|
||||
collar
|
||||
cross tie
|
||||
epaulettes
|
||||
feather boa
|
||||
guimpe
|
||||
lapels
|
||||
lapel pin
|
||||
neck ruff
|
||||
neckerchief
|
||||
necklace
|
||||
necktie
|
||||
tie clip
|
||||
neck ribbon
|
||||
scarf
|
||||
scarf choker
|
||||
shawl
|
||||
stole
|
||||
usekh collar
|
||||
ankle strap
|
||||
anklet
|
||||
arm belt
|
||||
arm guards
|
||||
armband
|
||||
armlet
|
||||
bracer
|
||||
bracelet
|
||||
bangle
|
||||
spiked bracelet
|
||||
detached sleeves
|
||||
arm warmers
|
||||
elbow sleeve
|
||||
fingernails
|
||||
garter straps
|
||||
gloves
|
||||
boxing gloves
|
||||
elbow gloves
|
||||
fingerless gloves
|
||||
bridal gauntlets
|
||||
spiked gloves
|
||||
yugake
|
||||
mittens
|
||||
hand chains
|
||||
leg belt
|
||||
legwear garter
|
||||
ring
|
||||
claw ring
|
||||
wedding ring
|
||||
shin guards
|
||||
shin strap
|
||||
thighlet
|
||||
thigh strap
|
||||
frilled thigh strap
|
||||
wide sleeves
|
||||
wristband
|
||||
wrist cuffs
|
||||
wrist ruff
|
||||
wrist scrunchie
|
||||
aiguillette
|
||||
badge
|
||||
belly chain
|
||||
belt
|
||||
buckle
|
||||
wallet chain
|
||||
sam browne belt
|
||||
shoulder belt
|
||||
cingulum militare
|
||||
boutonniere
|
||||
brooch
|
||||
buttons
|
||||
large buttons
|
||||
button badge
|
||||
buttoned cuffs
|
||||
collar chain
|
||||
sweater guard
|
||||
corsage
|
||||
crinoline
|
||||
cuff links
|
||||
double-breasted
|
||||
fanny pack
|
||||
garter belt
|
||||
harness
|
||||
pentacle
|
||||
piercing
|
||||
sash
|
||||
shoulder sash
|
||||
waist sash
|
||||
shendyt
|
||||
suspenders
|
||||
tassel
|
||||
watch
|
||||
pocket watch
|
||||
yaopei
|
||||
zipper
|
||||
argyle
|
||||
camouflage
|
||||
checkered
|
||||
floral print
|
||||
gingham
|
||||
houndstooth
|
||||
pinstripe pattern
|
||||
plaid
|
||||
polka dot
|
||||
striped
|
||||
multicolored stripes
|
||||
double vertical stripe
|
||||
animal print
|
||||
bat print
|
||||
bear print
|
||||
butterfly print
|
||||
cow print
|
||||
leopard print
|
||||
tiger print
|
||||
snake print
|
||||
bone print
|
||||
clover print
|
||||
crescent print
|
||||
floral print
|
||||
rose print
|
||||
camellia print
|
||||
cherry blossom print
|
||||
chrysanthemum print
|
||||
lily print
|
||||
morning glory print
|
||||
peony print
|
||||
plum blossom print
|
||||
spider lily print
|
||||
sunflower print
|
||||
food print
|
||||
fruit pattern
|
||||
apple print
|
||||
blueberry print
|
||||
cherry print
|
||||
kiwi print
|
||||
lemon print
|
||||
pineapple print
|
||||
orange print
|
||||
strawberry print
|
||||
watermelon print
|
||||
leaf print
|
||||
maple leaf print
|
||||
moon print
|
||||
musical note print
|
||||
paw print
|
||||
petal print
|
||||
piano print
|
||||
sparkle print
|
||||
triangle print
|
||||
space print
|
||||
starry sky print
|
||||
star print
|
||||
wave print
|
||||
wing print
|
||||
buckle
|
||||
chinese knot
|
||||
criss-cross straps
|
||||
criss-cross back-straps
|
||||
clothing cutout
|
||||
dress flower
|
||||
flower trim
|
||||
frills
|
||||
fur trim
|
||||
gathers
|
||||
gold trim
|
||||
lace trim
|
||||
pom pom
|
||||
ribbon trim
|
||||
see-through clothes
|
||||
silver trim
|
||||
taut shirt
|
||||
torn clothes
|
||||
white trim
|
||||
|
@@ -0,0 +1,63 @@
|
||||
Extreme close-up
|
||||
Cut-In
|
||||
Close-up shot
|
||||
Medium shot
|
||||
Cowboy Shot
|
||||
Long shot
|
||||
Wide shot
|
||||
Extreme wide shot
|
||||
Establishing shot
|
||||
Bird's eye view
|
||||
Overhead shot
|
||||
Top-down shot
|
||||
High angle shot
|
||||
From Above
|
||||
Eye level shot
|
||||
Low angle shot
|
||||
From Below
|
||||
Worm's eye view
|
||||
Straight-on shot
|
||||
Three-quarter shot
|
||||
Three Sided View
|
||||
Profile shot
|
||||
From Side
|
||||
Sideways
|
||||
From Behind
|
||||
POV (Point of View)
|
||||
First person perspective
|
||||
First-Person View
|
||||
Over-the-shoulder shot
|
||||
Reverse angle shot
|
||||
Dutch angle shot
|
||||
Canted angle shot
|
||||
Dramatic tilt
|
||||
Rotated
|
||||
Upside-Down
|
||||
Aerial perspective
|
||||
Drone shot
|
||||
Helicopter view
|
||||
Panoramic view
|
||||
Perspective
|
||||
Vanishing point perspective
|
||||
Forced perspective
|
||||
Atmospheric Perspective
|
||||
Fisheye perspective
|
||||
Blurry Foreground
|
||||
Motion blur perspective
|
||||
Isometric view
|
||||
Tracking perspective
|
||||
Dynamic follow shot
|
||||
Dolly zoom effect
|
||||
Sweeping shot
|
||||
Action sequence shot
|
||||
Symmetrical shot
|
||||
Mirror shot
|
||||
Split perspective
|
||||
Multiple Views
|
||||
Multiple exposure view
|
||||
From Outside
|
||||
Hatching (Texture)
|
||||
downblouse
|
||||
downpants
|
||||
pantyshot
|
||||
upskirt
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,50 @@
|
||||
vibrant neon cyberpunk colors
|
||||
pastel watercolor tones color theme
|
||||
dark gothic monochrome color theme
|
||||
warm autumn earth tones color theme
|
||||
cool winter blues and whites color theme
|
||||
vintage sepia and amber color theme
|
||||
iridescent pearl colors
|
||||
rainbow holographic spectrum color theme
|
||||
retro vaporwave pink and teal color theme
|
||||
minimalist black and white color theme
|
||||
rich jewel tones color theme
|
||||
soft dusty desert palette color theme
|
||||
deep ocean blues and greens color theme
|
||||
moody film noir contrast color theme
|
||||
tropical sunset colors
|
||||
ethereal misty pastels color theme
|
||||
bold primary colors
|
||||
metallic gold and copper color theme
|
||||
frosted winter crystal tones color theme
|
||||
dark academia browns and greens color theme
|
||||
synthwave purple and orange color theme
|
||||
natural forest greens color theme
|
||||
milky way galaxy colors color theme
|
||||
art deco gold and black color theme
|
||||
cotton candy pastels color theme
|
||||
dramatic chiaroscuro contrast color theme
|
||||
impressionist light colors
|
||||
stained glass jewel tones color theme
|
||||
zen garden neutrals color theme
|
||||
electric ultraviolet glow color theme
|
||||
antique parchment tones color theme
|
||||
botanical garden greens color theme
|
||||
moroccan spice market colors
|
||||
northern lights aurora color theme
|
||||
cherry blossom pink and white color theme
|
||||
stormy sea grays and blues color theme
|
||||
golden hour amber glow color theme
|
||||
moonlit night blues color theme
|
||||
sunbleached coastal colors
|
||||
fairy tale fantasy pastels color theme
|
||||
volcanic reds and blacks color theme
|
||||
japanese ink painting tones color theme
|
||||
renaissance oil painting colors
|
||||
crystalline gemstone hues color theme
|
||||
neon city nightlife color theme
|
||||
prehistoric cave painting earth tones color theme
|
||||
egyptian gold and lapis color theme
|
||||
medieval illuminated manuscript colors
|
||||
abstract expressionist bold colors
|
||||
art nouveau muted naturals color theme
|
||||
|
@@ -0,0 +1,42 @@
|
||||
Infinite depth of field
|
||||
Ultra deep depth of field
|
||||
Deep depth of field
|
||||
Medium depth of field
|
||||
Shallow depth of field
|
||||
Ultra shallow depth of field
|
||||
Tilt-shift depth of field
|
||||
Portrait depth of field
|
||||
Full body depth of field
|
||||
Group photo depth of field
|
||||
Product photography depth of field
|
||||
Macro photography depth of field
|
||||
Wildlife photography depth of field
|
||||
Food photography depth of field
|
||||
Landscape depth of field
|
||||
Cityscape depth of field
|
||||
Interior depth of field
|
||||
Street photography depth of field
|
||||
Architecture depth of field
|
||||
Nature depth of field
|
||||
Documentary depth of field
|
||||
Bokeh depth of field
|
||||
Swirly bokeh depth of field
|
||||
Selective focus depth of field
|
||||
Double exposure depth of field
|
||||
Motion blur depth of field
|
||||
Radial blur depth of field
|
||||
Lens blur depth of field
|
||||
Focus stacking depth
|
||||
Hyperfocal depth of field
|
||||
Zone focusing depth
|
||||
Split focus depth of field
|
||||
Cinematic depth of field
|
||||
Panoramic depth of field
|
||||
360-degree depth of field
|
||||
Misty depth of field
|
||||
Dreamy depth of field
|
||||
Hazy depth of field
|
||||
Atmospheric perspective depth
|
||||
Light rays depth of field
|
||||
Underwater depth of field
|
||||
Night photography depth
|
||||
|
+394
@@ -0,0 +1,394 @@
|
||||
angry
|
||||
anger vein
|
||||
annoyed
|
||||
clenched teeth
|
||||
scowl
|
||||
annoyed
|
||||
blush
|
||||
blush stickers
|
||||
embarrassed
|
||||
full-face blush
|
||||
nose blush
|
||||
bored
|
||||
closed eyes
|
||||
confused
|
||||
crazy
|
||||
despair
|
||||
determined
|
||||
disappointed
|
||||
disdain
|
||||
disgust
|
||||
drunk
|
||||
envy
|
||||
excited
|
||||
exhausted
|
||||
expressionless
|
||||
facepalm
|
||||
flustered
|
||||
frustrated
|
||||
furrowed brow
|
||||
grimace
|
||||
guilt
|
||||
happy
|
||||
kubrick stare
|
||||
lonely
|
||||
nervous
|
||||
nosebleed
|
||||
one eye closed
|
||||
round mouth
|
||||
open mouth
|
||||
parted lips
|
||||
pain
|
||||
pout
|
||||
raised eyebrow
|
||||
raised inner eyebrows
|
||||
rape face
|
||||
rolling eyes
|
||||
sad
|
||||
depressed
|
||||
frown
|
||||
gloom \(expression\)
|
||||
tears
|
||||
scared
|
||||
panicking
|
||||
worried
|
||||
serious
|
||||
sigh
|
||||
sleepy
|
||||
sulking
|
||||
surprised
|
||||
thinking
|
||||
pensive
|
||||
v-shaped eyebrows
|
||||
wince
|
||||
afterglow
|
||||
ahegao
|
||||
aroused
|
||||
fucked silly
|
||||
in heat
|
||||
naughty face
|
||||
ohhoai
|
||||
torogao
|
||||
crazy smile
|
||||
evil smile
|
||||
fingersmile
|
||||
forced smile
|
||||
glasgow smile
|
||||
grin
|
||||
evil grin
|
||||
light smile
|
||||
sad smile
|
||||
seductive smile
|
||||
smile
|
||||
stifled laugh
|
||||
doyagao
|
||||
smirk
|
||||
smug
|
||||
troll face
|
||||
surprised
|
||||
scared
|
||||
sad
|
||||
^^^
|
||||
color drain
|
||||
depressed
|
||||
despair
|
||||
gloom \(expression\)
|
||||
horrified
|
||||
screaming
|
||||
sobbing
|
||||
traumatized
|
||||
turn pale
|
||||
wavy mouth
|
||||
;\)
|
||||
:D
|
||||
;D
|
||||
XD
|
||||
DX
|
||||
D:
|
||||
:3
|
||||
;3
|
||||
x3
|
||||
3:
|
||||
0w0
|
||||
uwu
|
||||
:p
|
||||
;p
|
||||
:q
|
||||
;q
|
||||
>:\)
|
||||
>:\(
|
||||
:T
|
||||
:I
|
||||
:/
|
||||
:|
|
||||
x mouth
|
||||
:c
|
||||
c:
|
||||
:<
|
||||
;<
|
||||
diamond mouth
|
||||
:>
|
||||
:>=
|
||||
:o
|
||||
;o
|
||||
o3o
|
||||
>3<
|
||||
3_3
|
||||
6_9
|
||||
o_o
|
||||
0_0
|
||||
|_|
|
||||
._.
|
||||
solid circle eyes
|
||||
heart-shaped eyes
|
||||
^_^
|
||||
\\(^o^\)/
|
||||
^q^
|
||||
>_<
|
||||
>o<
|
||||
@_@
|
||||
>_@
|
||||
+_+
|
||||
+_-
|
||||
=_=
|
||||
T_T
|
||||
<o>_<o>
|
||||
<|>_<|>
|
||||
eyebrows hidden by hair
|
||||
mismatched eyebrows
|
||||
cross-eyed
|
||||
wide-eyed
|
||||
dot nose
|
||||
no nose
|
||||
chestnut mouth
|
||||
dot mouth
|
||||
mouth drool
|
||||
no mouth
|
||||
peanut mouth
|
||||
rectangular mouth
|
||||
sideways mouth
|
||||
split mouth
|
||||
Yurie mouth
|
||||
wavy mouth
|
||||
mob face
|
||||
angry dog noises
|
||||
awesome face
|
||||
essex face
|
||||
excalibur face
|
||||
face of the people who sank all their money into the fx
|
||||
gyate gyate
|
||||
henohenomoheji
|
||||
nonowa
|
||||
smiley face
|
||||
troll face
|
||||
uso da
|
||||
foodgasm
|
||||
breast awe
|
||||
food awe
|
||||
muscle awe
|
||||
penis awe
|
||||
staring
|
||||
heterochromia
|
||||
multicolored eyes
|
||||
gradient eyes
|
||||
two-tone eyes
|
||||
rainbow eyes
|
||||
mismatched irises
|
||||
dashed eyes
|
||||
Pac-man eyes
|
||||
ringed eyes
|
||||
squiggle eyes
|
||||
constricted pupils
|
||||
dilated pupils
|
||||
extra pupils
|
||||
horizontal pupils
|
||||
no pupils
|
||||
slit pupils
|
||||
symbol-shaped pupils
|
||||
diamond-shaped pupils
|
||||
flower-shaped pupils
|
||||
heart-shaped pupils
|
||||
star-shaped pupils
|
||||
solid circle pupils
|
||||
cross-shaped pupils
|
||||
x-shaped pupils
|
||||
snowflakes-shaped_pupils
|
||||
moon-shaped pupils
|
||||
power symbol-shaped pupils
|
||||
crosshair pupils
|
||||
mismatched pupils
|
||||
blue sclera
|
||||
black sclera
|
||||
blank eyes
|
||||
bloodshot eyes
|
||||
green sclera
|
||||
mismatched sclera
|
||||
no sclera
|
||||
orange sclera
|
||||
red sclera
|
||||
yellow sclera
|
||||
bags under eyes
|
||||
aegyo sal
|
||||
bruised eye
|
||||
electric eyes
|
||||
flaming eyes
|
||||
glowing eyes
|
||||
glowing eye
|
||||
button eyes
|
||||
cephalopod eyes
|
||||
compound eyes
|
||||
lens eye
|
||||
pixel eyes
|
||||
bulging eyes
|
||||
eye pop
|
||||
crazy eyes
|
||||
empty eyes
|
||||
Nonowa
|
||||
solid circle eyes
|
||||
solid oval eyes
|
||||
spiral-only eyes
|
||||
jitome
|
||||
tareme
|
||||
tsurime
|
||||
sanpaku
|
||||
sparkling eyes
|
||||
geass
|
||||
Sharingan
|
||||
Mangekyou Sharingan
|
||||
Rinnegan
|
||||
Byakugan
|
||||
eye reflection
|
||||
text in eyes
|
||||
missing eye
|
||||
one-eyed
|
||||
third eye
|
||||
extra eyes
|
||||
no eyes
|
||||
covering own eyes
|
||||
hair over eyes
|
||||
hair over one eye
|
||||
bandage over one eye
|
||||
blindfold
|
||||
hat over eyes
|
||||
eyepatch
|
||||
eyelashes
|
||||
colored eyelashes
|
||||
fake eyelashes
|
||||
eyes visible through hair
|
||||
glasses
|
||||
makeup
|
||||
eyeliner
|
||||
eyeshadow
|
||||
mascara
|
||||
eye contact
|
||||
looking afar
|
||||
looking around
|
||||
looking at another
|
||||
looking at breasts
|
||||
looking at hand
|
||||
looking at hands
|
||||
looking at mirror
|
||||
looking at phone
|
||||
looking at self
|
||||
looking at viewer
|
||||
looking at penis
|
||||
looking at pussy
|
||||
looking at crotch
|
||||
looking afar
|
||||
looking back
|
||||
looking down
|
||||
looking outside
|
||||
looking over eyewear
|
||||
looking through own legs
|
||||
looking to the side
|
||||
looking up
|
||||
akanbe
|
||||
artificial eye
|
||||
glass eye
|
||||
mechanical eye
|
||||
asymmetrical eyes
|
||||
averting eyes
|
||||
big eyes
|
||||
blind
|
||||
partially blind
|
||||
drawn on eyes
|
||||
eyeball
|
||||
eye beam
|
||||
eye poke
|
||||
eye pop
|
||||
eye trail
|
||||
googly eyes
|
||||
half-closed eyes
|
||||
narrowed eyes
|
||||
lazy eye
|
||||
persona eyes
|
||||
pleading eyes
|
||||
rolling eyes
|
||||
shading eyes
|
||||
sideways glance
|
||||
squinting
|
||||
staring
|
||||
uneven eyes
|
||||
unusually open eyes
|
||||
upturned eyes
|
||||
wall-eyed
|
||||
joyful face expression
|
||||
happy face expression
|
||||
excited face expression
|
||||
proud face expression
|
||||
amused face expression
|
||||
relaxed face expression
|
||||
hopeful face expression
|
||||
content face expression
|
||||
serene face expression
|
||||
blissful face expression
|
||||
angry face expression
|
||||
sad face expression
|
||||
disgusted face expression
|
||||
fearful face expression
|
||||
disappointed face expression
|
||||
frustrated face expression
|
||||
hurt face expression
|
||||
jealous face expression
|
||||
troubled face expression
|
||||
worried face expression
|
||||
pensive face expression
|
||||
thoughtful face expression
|
||||
contemplative face expression
|
||||
curious face expression
|
||||
focused face expression
|
||||
determined face expression
|
||||
introspective face expression
|
||||
calculating face expression
|
||||
analytical face expression
|
||||
studious face expression
|
||||
confused face expression
|
||||
uncertain face expression
|
||||
suspicious face expression
|
||||
wary face expression
|
||||
puzzled face expression
|
||||
skeptical face expression
|
||||
hesitant face expression
|
||||
doubtful face expression
|
||||
perplexed face expression
|
||||
bewildered face expression
|
||||
tired face expression
|
||||
sleepy face expression
|
||||
stressed face expression
|
||||
exhausted face expression
|
||||
energetic face expression
|
||||
alert face expression
|
||||
relaxed face expression
|
||||
tense face expression
|
||||
calm face expression
|
||||
restless face expression
|
||||
smug face expression
|
||||
flustered face expression
|
||||
guilty face expression
|
||||
nervous face expression
|
||||
shy face expression
|
||||
mischievous face expression
|
||||
sarcastic face expression
|
||||
confident face expression
|
||||
nostalgic face expression
|
||||
whimsical face expression
|
||||
|
@@ -0,0 +1,82 @@
|
||||
1950s fashion
|
||||
1960s fashion
|
||||
1970s fashion
|
||||
1980s fashion
|
||||
1990s fashion
|
||||
Aristocratic clothes
|
||||
Casual
|
||||
Formal clothes
|
||||
Goth fashion
|
||||
Pastel Goth
|
||||
Perky Goth
|
||||
Punk
|
||||
Raver
|
||||
Sportswear
|
||||
Streetwear
|
||||
Hip Hop
|
||||
Techwear
|
||||
Y2K fashion
|
||||
McBling
|
||||
Bodycon
|
||||
Cyber fashion
|
||||
Decora
|
||||
Shinora
|
||||
French Girly
|
||||
Gothic Punk
|
||||
Gurokawa
|
||||
Gyaru
|
||||
Agejo Gyaru
|
||||
Amekaji Gyaru
|
||||
Amesuku Gyaru
|
||||
Ganguro
|
||||
Gyaruo
|
||||
Hime Gyaru
|
||||
Kogal
|
||||
Manba Gyaru
|
||||
Onee Gyaru
|
||||
Hadeko
|
||||
Heisei Retro
|
||||
Jojifuku
|
||||
Himekaji
|
||||
Japanese clothes
|
||||
Jersey Maid
|
||||
Jirai Kei
|
||||
Lolita fashion
|
||||
Classic Lolita
|
||||
Country Lolita
|
||||
Gothic Lolita
|
||||
Hime Lolita
|
||||
Jo Lolita
|
||||
Military Lolita
|
||||
Punk Lolita
|
||||
Qi Lolita
|
||||
Sweet Lolita
|
||||
Viet Lolita
|
||||
Wa Lolita
|
||||
Mori Kei
|
||||
Ouji fashion
|
||||
Tenshi Kaiwai
|
||||
Visual Kei
|
||||
Yami Kawaii
|
||||
Yume Kawaii
|
||||
Fairy Kei
|
||||
Balletcore
|
||||
Beatnik
|
||||
Cybergoth
|
||||
E-Kid fashion
|
||||
Emo fashion
|
||||
Flapper Girl
|
||||
Greaser fashion
|
||||
Grunge
|
||||
Hipster
|
||||
Mod fashion
|
||||
Office Siren
|
||||
Renaissance clothes
|
||||
Rockabilly
|
||||
Rococo movement
|
||||
Scene fashion
|
||||
Victorian
|
||||
Steampunk
|
||||
Chinese clothes
|
||||
Dunhuang style
|
||||
Yabi fashion
|
||||
|
@@ -0,0 +1,51 @@
|
||||
BlackAndWhite filter
|
||||
Contrast filter
|
||||
Cool filter
|
||||
HDR filter
|
||||
Monochrome filter
|
||||
Saturated filter
|
||||
Sepia filter
|
||||
Vignette filter
|
||||
Vintage filter
|
||||
Warm filter
|
||||
Analog film filter
|
||||
Cinematic filter
|
||||
Cyberpunk neon filter
|
||||
Dreamlike filter
|
||||
Film grain filter
|
||||
Glitch art filter
|
||||
Lomography filter
|
||||
Matte filter
|
||||
Moody filter
|
||||
Noir filter
|
||||
Pastel filter
|
||||
Polaroid filter
|
||||
Retro gaming filter
|
||||
Synthwave filter
|
||||
Tilt-shift filter
|
||||
Watercolor filter
|
||||
Anime style filter
|
||||
Cel shading filter
|
||||
Comic book style filter
|
||||
Cross-process filter
|
||||
Double exposure filter
|
||||
Duotone filter
|
||||
Ethereal glow filter
|
||||
Grunge texture filter
|
||||
Impressionist filter
|
||||
Instagram-like filter
|
||||
Oil painting filter
|
||||
Pencil sketch filter
|
||||
Pixelated filter
|
||||
Pop art filter
|
||||
Street photography filter
|
||||
Bleach bypass filter
|
||||
Bokeh effect filter
|
||||
Chromatic aberration filter
|
||||
Color grading filter
|
||||
Cyanotype filter
|
||||
Exposure adjustment filter
|
||||
Gaussian blur filter
|
||||
Lens flare filter
|
||||
Light leak filter
|
||||
Split toning filter
|
||||
|
@@ -0,0 +1,120 @@
|
||||
air quotes
|
||||
carry me
|
||||
circle hands
|
||||
clenched hands
|
||||
cupping hands
|
||||
double finger gun
|
||||
double thumbs down
|
||||
double thumbs up
|
||||
double v
|
||||
fidgeting
|
||||
finger counting
|
||||
finger frame
|
||||
fist bump
|
||||
fist in hand
|
||||
groping motion
|
||||
hand glasses
|
||||
hand gesture duo
|
||||
heart arms
|
||||
heart hands
|
||||
heart hands duo
|
||||
heart hands trio
|
||||
heart hands quartet
|
||||
high five
|
||||
horns pose
|
||||
kitsune no mado
|
||||
noogie
|
||||
own hands clasped
|
||||
palm-fist greeting
|
||||
palm-fist tap
|
||||
penetration gesture
|
||||
pinky swear
|
||||
rabbit pose
|
||||
shadow puppet
|
||||
steepled fingers
|
||||
tsuki ni kawatte oshioki yo
|
||||
x arms
|
||||
x fingers
|
||||
akanbe
|
||||
beckoning
|
||||
twirling hair
|
||||
index finger raised
|
||||
middle finger
|
||||
pinky out
|
||||
pointing
|
||||
pointing at another
|
||||
pointing at self
|
||||
pointing at viewer
|
||||
pointing spider-man \(meme\)
|
||||
pointing down
|
||||
pointing forward
|
||||
pointing up
|
||||
kamina pose
|
||||
saturday night fever
|
||||
shushing
|
||||
slit throat \(gesture\)
|
||||
thumbs down
|
||||
thumbs up
|
||||
\n/
|
||||
crossed fingers
|
||||
finger gun
|
||||
finger heart
|
||||
fox shadow puppet
|
||||
kuji-in
|
||||
shaka sign
|
||||
two-finger salute
|
||||
l hand
|
||||
v
|
||||
gyaru v
|
||||
inward v
|
||||
v over eye
|
||||
v over mouth
|
||||
\m/
|
||||
middle w
|
||||
money gesture
|
||||
ok sign
|
||||
pinching gesture
|
||||
w
|
||||
number four \(asl\)
|
||||
\||/
|
||||
\|||/
|
||||
claw pose
|
||||
facepalm
|
||||
ohikaenasutte
|
||||
open hand
|
||||
reaching
|
||||
salute
|
||||
spread fingers
|
||||
stop \(gesture\)
|
||||
straight-arm salute
|
||||
vulcan salute
|
||||
waving
|
||||
clenched hand
|
||||
curled fingers
|
||||
dojikko pose
|
||||
fig sign
|
||||
paw pose
|
||||
power fist
|
||||
raised fist
|
||||
che vuoi? \(italian gesture\)
|
||||
beckoning
|
||||
cunnilingus gesture
|
||||
fellatio gesture
|
||||
handjob gesture
|
||||
hat tip
|
||||
oral invitation
|
||||
oral simulation
|
||||
shocker \(gesture\)
|
||||
stroking own chin
|
||||
air guitar
|
||||
bowing
|
||||
curtsey
|
||||
distress hand signal
|
||||
heart tail
|
||||
heart tail duo
|
||||
holding with gesture
|
||||
kuji-in
|
||||
orchid fingers
|
||||
shrugging
|
||||
star hands
|
||||
victory pose
|
||||
|
@@ -0,0 +1,65 @@
|
||||
Ambient lighting
|
||||
Artificial lighting
|
||||
Backlit lighting
|
||||
Diffused lighting
|
||||
Flash lighting
|
||||
Harsh lighting
|
||||
Natural lighting
|
||||
SideLit lighting
|
||||
Soft lighting
|
||||
Spotlight lighting
|
||||
Golden hour lighting
|
||||
Blue hour lighting
|
||||
Moonlight lighting
|
||||
Twilight lighting
|
||||
Sunrise lighting
|
||||
Sunset lighting
|
||||
Overcast lighting
|
||||
Dappled sunlight
|
||||
Morning light
|
||||
Evening light
|
||||
Rembrandt lighting
|
||||
Butterfly lighting
|
||||
Loop lighting
|
||||
Split lighting
|
||||
Broad lighting
|
||||
Short lighting
|
||||
Clamshell lighting
|
||||
Beauty dish lighting
|
||||
Ring light
|
||||
Three-point lighting
|
||||
Key light
|
||||
Fill light
|
||||
Rim lighting
|
||||
Hair light
|
||||
Chiaroscuro lighting
|
||||
Low-key lighting
|
||||
High-key lighting
|
||||
Silhouette lighting
|
||||
Cinematic lighting
|
||||
Moody lighting
|
||||
Noir lighting
|
||||
Dramatic shadows
|
||||
Volumetric lighting
|
||||
God rays
|
||||
Neon lighting
|
||||
Blacklight lighting
|
||||
LED lighting
|
||||
Strobe lighting
|
||||
Glowing lighting
|
||||
Fire lighting
|
||||
Candlelight
|
||||
Light painting
|
||||
Crystal lighting
|
||||
Prism lighting
|
||||
Rainbow lighting
|
||||
Indoor lighting
|
||||
Outdoor lighting
|
||||
Studio lighting
|
||||
Street lighting
|
||||
Stage lighting
|
||||
Concert lighting
|
||||
Museum lighting
|
||||
Gallery lighting
|
||||
Underwater lighting
|
||||
Forest canopy lighting
|
||||
|
@@ -0,0 +1,60 @@
|
||||
location - bustling city street with skyscrapers
|
||||
location - neon-lit cyberpunk alley
|
||||
location - historic district with cobblestone streets
|
||||
location - rooftop garden overlooking cityscape
|
||||
location - underground subway station
|
||||
location - vintage cafe with outdoor seating
|
||||
location - modern glass office building lobby
|
||||
location - urban park with fountain
|
||||
location - night market with lanterns
|
||||
location - abandoned warehouse district
|
||||
location - misty mountain peak
|
||||
location - tropical beach at sunset
|
||||
location - dense rainforest clearing
|
||||
location - desert oasis with palm trees
|
||||
location - rolling hills with wildflowers
|
||||
location - ancient redwood forest
|
||||
location - crystalline ice cave
|
||||
location - rocky coastline with lighthouse
|
||||
location - autumn forest with fallen leaves
|
||||
location - zen garden with koi pond
|
||||
location - luxury penthouse living room
|
||||
location - antique library with spiral staircase
|
||||
location - artist's loft studio
|
||||
location - grand ballroom with chandeliers
|
||||
location - cozy cottage kitchen
|
||||
location - futuristic space station interior
|
||||
location - steampunk workshop
|
||||
location - greenhouse conservatory
|
||||
location - underground speakeasy
|
||||
location - medieval tavern
|
||||
location - floating islands in the sky
|
||||
location - crystal palace throne room
|
||||
location - enchanted forest clearing
|
||||
location - dragon's mountain lair
|
||||
location - underwater mermaid city
|
||||
location - magical wizard's tower
|
||||
location - ancient ruins with glowing runes
|
||||
location - steampunk airship deck
|
||||
location - fairy tale cottage
|
||||
location - mystical portal chamber
|
||||
location - high-tech research laboratory
|
||||
location - spacecraft launch pad
|
||||
location - solar panel field
|
||||
location - modern art museum gallery
|
||||
location - robot assembly factory
|
||||
location - luxury yacht deck
|
||||
location - wind turbine farm
|
||||
location - data center server room
|
||||
location - architectural marvel building
|
||||
location - hydroelectric dam overlook
|
||||
location - foggy cemetery at midnight
|
||||
location - rainy cyberpunk street
|
||||
location - snow-covered mountain lodge
|
||||
location - desert ruins in sandstorm
|
||||
location - cherry blossom garden
|
||||
location - volcanic crater edge
|
||||
location - northern lights viewpoint
|
||||
location - starlit desert oasis
|
||||
location - misty bamboo forest
|
||||
location - thunderstorm over cityscape
|
||||
|
@@ -0,0 +1,239 @@
|
||||
Cameltoe
|
||||
Spread pussy under clothes
|
||||
Wedgie
|
||||
presenting
|
||||
presenting anus
|
||||
presenting armpit
|
||||
presenting ass
|
||||
presenting breasts
|
||||
presenting foot
|
||||
presenting penis
|
||||
presenting pussy
|
||||
presenting tanlines
|
||||
flashing
|
||||
presenting another
|
||||
come hither
|
||||
bed invitation
|
||||
sexual coaching
|
||||
take your pick
|
||||
69
|
||||
sex from behind
|
||||
doggystyle
|
||||
bent over
|
||||
prone bone
|
||||
standing sex
|
||||
top-down bottom-up
|
||||
spitroast
|
||||
reverse spitroast
|
||||
spooning
|
||||
on side
|
||||
girl on top
|
||||
amazon position
|
||||
cowgirl position
|
||||
squatting cowgirl position
|
||||
reverse cowgirl position
|
||||
reverse upright straddle
|
||||
upright straddle
|
||||
boy on top
|
||||
anvil position
|
||||
folded
|
||||
knees to chest
|
||||
legs over head
|
||||
legs up
|
||||
missionary
|
||||
mating press
|
||||
suspended congress
|
||||
reverse suspended congress
|
||||
full nelson
|
||||
piledriver
|
||||
mounting
|
||||
standing missionary
|
||||
footjob
|
||||
double footjob
|
||||
implied footjob
|
||||
cooperative footjob
|
||||
shoejob
|
||||
bootjob
|
||||
feet
|
||||
licking foot
|
||||
foot worship
|
||||
smelling feet
|
||||
frottage
|
||||
armpit sex
|
||||
grinding
|
||||
backjob
|
||||
buttjob
|
||||
cooperative grinding
|
||||
kneepit sex
|
||||
paizuri
|
||||
autopaizuri
|
||||
cooperative paizuri
|
||||
handsfree paizuri
|
||||
naizuri
|
||||
paizuri over clothes
|
||||
paizuri on lap
|
||||
paizuri under clothes
|
||||
pecjob
|
||||
perpendicular paizuri
|
||||
stealth paizuri
|
||||
straddling paizuri
|
||||
thigh sex
|
||||
glansjob
|
||||
cloth glansjob
|
||||
groping
|
||||
grabbing another's ass
|
||||
grabbing another's breast
|
||||
guided breast grab
|
||||
pectoral grab
|
||||
guided pectoral grab
|
||||
nipple tweak
|
||||
crotch grab
|
||||
guided crotch grab
|
||||
grabbing own breast
|
||||
torso grab
|
||||
hairjob
|
||||
handjob
|
||||
caressing testicles
|
||||
double handjob
|
||||
cooperative handjob
|
||||
nursing handjob
|
||||
cuddling handjob
|
||||
reverse nursing handjob
|
||||
reach-around
|
||||
two-handed handjob
|
||||
masturbation
|
||||
clothed masturbation
|
||||
crotch rub
|
||||
building sex
|
||||
pillow humping
|
||||
teddy bear sex
|
||||
table humping
|
||||
female masturbation
|
||||
futanari masturbation
|
||||
implied masturbation
|
||||
male masturbation
|
||||
mutual masturbation
|
||||
stealth masturbation
|
||||
tail masturbation
|
||||
tail
|
||||
tail insertion
|
||||
tail masturbation
|
||||
tailjob
|
||||
oral
|
||||
anilingus
|
||||
rusty trombone
|
||||
breast sucking
|
||||
cunnilingus
|
||||
autocunnilingus
|
||||
implied cunnilingus
|
||||
fellatio
|
||||
autofellatio
|
||||
cum swap
|
||||
deepthroat
|
||||
implied fellatio
|
||||
irrumatio
|
||||
cooperative fellatio
|
||||
multiple penis fellatio
|
||||
hug and suck
|
||||
licking testicle
|
||||
sitting on face
|
||||
testicle sucking
|
||||
group sex
|
||||
bisexual female
|
||||
bisexual male
|
||||
oral sandwich
|
||||
daisy chain
|
||||
gangbang
|
||||
double penetration
|
||||
triple penetration
|
||||
love train
|
||||
cooperative fellatio
|
||||
cooperative footjob
|
||||
cooperative breast smother
|
||||
orgy
|
||||
reverse spitroast
|
||||
spitroast
|
||||
teamwork
|
||||
threesome
|
||||
MMF threesome
|
||||
FFM threesome
|
||||
MMM threesome
|
||||
FFF threesome
|
||||
hetero
|
||||
animal insertion
|
||||
cervical penetration
|
||||
covered penetration
|
||||
deep penetration
|
||||
food insertion
|
||||
inflation
|
||||
cum inflation
|
||||
big belly
|
||||
enema
|
||||
large insertion
|
||||
stomach bulge
|
||||
male penetrated
|
||||
multiple insertions
|
||||
nipple penetration
|
||||
nosejob
|
||||
object insertion
|
||||
vaginal object insertion
|
||||
anal object insertion
|
||||
urethral insertion
|
||||
sounding
|
||||
fingering
|
||||
anal fingering
|
||||
prostate milking
|
||||
fingering through clothes
|
||||
fingering through panties
|
||||
implied fingering
|
||||
fisting
|
||||
anal fisting
|
||||
self fisting
|
||||
sex
|
||||
after sex
|
||||
after anal
|
||||
after buttjob
|
||||
after fellatio
|
||||
after fingering
|
||||
after frottage
|
||||
after insertion
|
||||
after masturbation
|
||||
after oral
|
||||
after paizuri
|
||||
after rape
|
||||
after urethral
|
||||
after vaginal
|
||||
afterglow
|
||||
clothed after sex
|
||||
anal
|
||||
double anal
|
||||
imminent anal
|
||||
pegging
|
||||
triple anal
|
||||
clothed sex
|
||||
guided penetration
|
||||
happy sex
|
||||
imminent penetration
|
||||
implied sex
|
||||
navel sex
|
||||
rough sex
|
||||
sex from behind
|
||||
skull fucking
|
||||
ear sex
|
||||
penis in eye
|
||||
tentacle sex
|
||||
underwater sex
|
||||
vaginal
|
||||
after vaginal
|
||||
double vaginal
|
||||
imminent vaginal
|
||||
triple vaginal
|
||||
yaoi
|
||||
bara
|
||||
implied yaoi
|
||||
bulges touching
|
||||
penises touching
|
||||
testicles touching
|
||||
yuri
|
||||
implied yuri
|
||||
tribadism
|
||||
|
@@ -0,0 +1,203 @@
|
||||
lingerie
|
||||
babydoll
|
||||
bodystocking
|
||||
bra
|
||||
bustier
|
||||
camisole
|
||||
chemise
|
||||
corset
|
||||
fishnets
|
||||
garter straps
|
||||
garter belt
|
||||
lace
|
||||
nightgown
|
||||
panties
|
||||
boyshort panties
|
||||
strapless bottom
|
||||
teddy
|
||||
thighhighs
|
||||
thong
|
||||
g-string
|
||||
pearl thong
|
||||
male underwear
|
||||
boxers
|
||||
briefs
|
||||
boxer briefs
|
||||
bikini briefs
|
||||
jockstrap
|
||||
ball bra
|
||||
penis sheath
|
||||
armbinder
|
||||
blindfold
|
||||
bitchsuit
|
||||
bodysuit
|
||||
bondage mittens
|
||||
bondage outfit
|
||||
chastity belt
|
||||
chastity cage
|
||||
collar
|
||||
cuffs
|
||||
handcuffs
|
||||
shackles
|
||||
gag
|
||||
gimp mask
|
||||
gimp suit
|
||||
latex
|
||||
nose hook
|
||||
crotchless
|
||||
crotchless panties
|
||||
crotchless pants
|
||||
crotchless swimsuit
|
||||
crotchless pantyhose
|
||||
crotchless leotard
|
||||
crotchless bloomers
|
||||
crotchless buruma
|
||||
ass cutout
|
||||
assless swimsuit
|
||||
backless panties
|
||||
backless pants
|
||||
breasts
|
||||
breastless clothes
|
||||
nippleless clothes
|
||||
cupless bikini
|
||||
cupless bra
|
||||
revealing clothes
|
||||
reverse outfit
|
||||
reverse bikini armor
|
||||
reverse bunnysuit
|
||||
anal ball wear
|
||||
maebari
|
||||
pasties
|
||||
panties
|
||||
multiple panties
|
||||
no panties
|
||||
aqua panties
|
||||
black panties
|
||||
blue panties
|
||||
brown panties
|
||||
green panties
|
||||
grey panties
|
||||
orange panties
|
||||
pink panties
|
||||
purple panties
|
||||
red panties
|
||||
white panties
|
||||
yellow panties
|
||||
multicolored panties
|
||||
bear panties
|
||||
rabbit panties
|
||||
cat panties
|
||||
checkered panties
|
||||
lace panties
|
||||
lace-trimmed panties
|
||||
plaid panties
|
||||
polka dot panties
|
||||
print panties
|
||||
strawberry panties
|
||||
striped panties
|
||||
vertical-striped panties
|
||||
latex panties
|
||||
leaf panties
|
||||
pearl thong
|
||||
backless panties
|
||||
c-string
|
||||
crotchless panties
|
||||
strapless bottom
|
||||
loose panties
|
||||
micro panties
|
||||
high-waist panties
|
||||
highleg panties
|
||||
lowleg panties
|
||||
bow panties
|
||||
crotch seam
|
||||
frilled panties
|
||||
fundoshi
|
||||
multi-strapped panties
|
||||
side-tie panties
|
||||
sports panties
|
||||
string panties
|
||||
panties over bike shorts
|
||||
panties under bike shorts
|
||||
panties over pantyhose
|
||||
panties under pantyhose
|
||||
panties under buruma
|
||||
pantylines
|
||||
pantyshot
|
||||
implied pantyshot
|
||||
upskirt
|
||||
adjusting panties
|
||||
hand in panties
|
||||
holding panties
|
||||
panties around ankles
|
||||
panties around one leg
|
||||
panty pull
|
||||
panties on breasts
|
||||
panties on penis
|
||||
penis in panties
|
||||
panties in mouth
|
||||
panties on head
|
||||
panty gag
|
||||
licking panties
|
||||
panties around tail
|
||||
panties aside
|
||||
panty lift
|
||||
smelling underwear
|
||||
trefoil
|
||||
unworn panties
|
||||
blood on panties
|
||||
cum in panties
|
||||
cumdrip onto panties
|
||||
stained panties
|
||||
wet panties
|
||||
vibrator under panties
|
||||
they're not panties
|
||||
bra
|
||||
aqua bra
|
||||
black bra
|
||||
blue bra
|
||||
brown bra
|
||||
green bra
|
||||
grey bra
|
||||
orange bra
|
||||
pink bra
|
||||
purple bra
|
||||
red bra
|
||||
white bra
|
||||
yellow bra
|
||||
multicolored bra
|
||||
checkered bra
|
||||
lace bra
|
||||
lace-trimmed bra
|
||||
plaid bra
|
||||
polka dot bra
|
||||
print bra
|
||||
strawberry bra
|
||||
striped bra
|
||||
vertical-striped bra
|
||||
adhesive bra
|
||||
belt bra
|
||||
bow bra
|
||||
bridgeless bra
|
||||
cupless bra
|
||||
frilled bra
|
||||
front-hook bra
|
||||
front-tie bra
|
||||
nursing bra
|
||||
shelf bra
|
||||
sports bra
|
||||
strapless bra
|
||||
training bra
|
||||
adjusting bra
|
||||
bra lift
|
||||
bra on ass
|
||||
bra on head
|
||||
bra peek
|
||||
bra pull
|
||||
bra strap
|
||||
hand in bra
|
||||
holding bra
|
||||
no bra
|
||||
open bra
|
||||
presenting bra
|
||||
torn bra
|
||||
unworn bra
|
||||
|
@@ -0,0 +1,212 @@
|
||||
breasts
|
||||
flat chest
|
||||
small breasts
|
||||
medium breasts
|
||||
large breasts
|
||||
huge breasts
|
||||
gigantic breasts
|
||||
a flat chest is a status symbol
|
||||
breast conscious
|
||||
breast envy
|
||||
breast awe
|
||||
flat envy
|
||||
breast expansion
|
||||
breast punch
|
||||
breast reduction
|
||||
breast padding
|
||||
breast size switch
|
||||
bust chart
|
||||
bust measuring
|
||||
compressed breasts
|
||||
flying button
|
||||
looking at breasts
|
||||
convenient breasts
|
||||
inconvenient breasts
|
||||
oversized breast cup
|
||||
slapping breasts
|
||||
slapping with breasts
|
||||
undersized breast cup
|
||||
weighing breasts
|
||||
areolae
|
||||
areola slip
|
||||
dark areolae
|
||||
glands of montgomery
|
||||
large areolae
|
||||
light areolae
|
||||
backboob
|
||||
bursting breasts
|
||||
cleavage
|
||||
nipples
|
||||
dark nipples
|
||||
covered nipples
|
||||
gaping nipples
|
||||
huge nipples
|
||||
nipple indents
|
||||
inverted nipples
|
||||
long nipples
|
||||
nipple slip
|
||||
no nipples
|
||||
puffy nipples
|
||||
small nipples
|
||||
nipple hair
|
||||
sideboob
|
||||
underboob
|
||||
breast slip
|
||||
breastless clothes
|
||||
breasts out
|
||||
impossible shirt
|
||||
one breast out
|
||||
asymmetrical breasts
|
||||
bouncing breasts
|
||||
breasts apart
|
||||
floating breasts
|
||||
hanging breasts
|
||||
perky breasts
|
||||
sagging breasts
|
||||
unaligned breasts
|
||||
veiny breasts
|
||||
pointy breasts
|
||||
bandeau
|
||||
bikini
|
||||
bikini bottom only
|
||||
cupless bikini
|
||||
bra
|
||||
cupless bra
|
||||
hand in bra
|
||||
no bra
|
||||
nursing bra
|
||||
shelf bra
|
||||
belt bra
|
||||
breastless clothes
|
||||
breast curtain
|
||||
bustier
|
||||
center opening
|
||||
chest binder
|
||||
Cinderella bust
|
||||
cleavage cutout
|
||||
corset
|
||||
framed breasts
|
||||
nipple cutout
|
||||
nippleless clothes
|
||||
panties on breasts
|
||||
plunging neckline
|
||||
rei no himo
|
||||
sarashi
|
||||
taut shirt
|
||||
underbust
|
||||
paizuri
|
||||
autopaizuri
|
||||
cooperative paizuri
|
||||
handsfree paizuri
|
||||
paizuri on lap
|
||||
paizuri over clothes
|
||||
paizuri under clothes
|
||||
perpendicular paizuri
|
||||
reverse paizuri
|
||||
straddling paizuri
|
||||
naizuri
|
||||
cooperative naizuri
|
||||
penis to breast
|
||||
penis under breasts
|
||||
nipple penetration
|
||||
breast smother
|
||||
breast pillow
|
||||
breasts on head
|
||||
face to breasts
|
||||
face to pecs
|
||||
head between breasts
|
||||
face between breasts
|
||||
breast biting
|
||||
breastfeeding
|
||||
breast sucking
|
||||
sucking own breasts
|
||||
mutual breast sucking
|
||||
nursing handjob
|
||||
biting nipple
|
||||
licking nipple
|
||||
breast hold
|
||||
grabbing own breast
|
||||
grabbing another's breast
|
||||
flat chest grab
|
||||
guided breast grab
|
||||
breast lift
|
||||
breast press
|
||||
breast pull
|
||||
breast punch
|
||||
slapping breasts
|
||||
breasts squeezed together
|
||||
breast suppress
|
||||
groping
|
||||
arm between breasts
|
||||
nipple flick
|
||||
nipple press
|
||||
nipple push
|
||||
nipple pull
|
||||
nipple rub
|
||||
nipple tweak
|
||||
poking another's breast
|
||||
poking own breast
|
||||
foot on breast
|
||||
nipple clamps
|
||||
nipple leash
|
||||
nipple piercing
|
||||
areola piercing
|
||||
nipple bar
|
||||
nipple bells
|
||||
nipple chain
|
||||
nipple lock
|
||||
nipple rings
|
||||
nipple stretcher
|
||||
nipple tag
|
||||
nipple plug
|
||||
nipple sleeves
|
||||
nipple torture
|
||||
tied nipples
|
||||
nipple ribbon
|
||||
vibrator on nipple
|
||||
asymmetrical docking
|
||||
symmetrical docking
|
||||
nipple-to-nipple
|
||||
alternate breast size
|
||||
alternate breast size \(larger\)
|
||||
alternate breast size \(smaller\)
|
||||
between breasts
|
||||
card between breasts
|
||||
arm between breasts
|
||||
head between breasts
|
||||
necktie between breasts
|
||||
person between breasts
|
||||
breast bondage
|
||||
tied breast
|
||||
breast mousepad
|
||||
breast implants
|
||||
breast rest
|
||||
carried breast rest
|
||||
breasts on table
|
||||
breasts on head
|
||||
slapping with breasts
|
||||
breast crush
|
||||
breasts on glass
|
||||
bust cup
|
||||
covering breasts
|
||||
cum on breasts
|
||||
extra breasts
|
||||
food on breasts
|
||||
chocolate on breasts
|
||||
lactation
|
||||
breast milk in container
|
||||
breast pump
|
||||
forced lactation
|
||||
lactating into container
|
||||
lactation through clothes
|
||||
milking machine
|
||||
projectile lactation
|
||||
male with breasts
|
||||
mole on breast
|
||||
nipple injection
|
||||
object on breast
|
||||
bubble tea challenge
|
||||
headphones on breasts
|
||||
Tawawa challenge
|
||||
object on pectorals
|
||||
oppai challenge
|
||||
|
@@ -0,0 +1,52 @@
|
||||
pussy focus
|
||||
Clitoris
|
||||
Erect clitoris
|
||||
Cleft of venus
|
||||
Labia
|
||||
Dark labia
|
||||
Long labia
|
||||
Mons Pubis
|
||||
Fat mons
|
||||
Pubic hair
|
||||
Pussy
|
||||
No pussy
|
||||
Colored pussy
|
||||
Cameltoe
|
||||
Spread pussy under clothes
|
||||
Wedgie
|
||||
Covering crotch
|
||||
Hand between legs
|
||||
Spread pussy
|
||||
Clitoris slip
|
||||
Partially visible vulva
|
||||
Pussy peek
|
||||
clitoral hood
|
||||
Cum in pussy
|
||||
Cum on pussy
|
||||
Pussy juice
|
||||
Pussy juice puddle
|
||||
Pussy juice trail
|
||||
Clitoris piercing
|
||||
Clitoris ring
|
||||
huge clitoris
|
||||
clitoral hood insertion
|
||||
clitoral penetration
|
||||
clitoral stimulation
|
||||
clitoral stimulation through clothing
|
||||
clitoris pull
|
||||
clitoris tweak
|
||||
vibrator on clitoris
|
||||
clitorises touching
|
||||
clitoris injection
|
||||
clitoris torture
|
||||
clitoris expansion
|
||||
clitoris cutout
|
||||
clitoris piercing
|
||||
clitoris ring
|
||||
clitoris tied
|
||||
clitoris chain
|
||||
clitoris leash
|
||||
clitoris ribbon
|
||||
covered clitoris
|
||||
clitoris clamp
|
||||
clitoris pump
|
||||
|
@@ -0,0 +1,233 @@
|
||||
mature female
|
||||
leash pull
|
||||
pet play
|
||||
human dog
|
||||
pony play
|
||||
giant
|
||||
giantess
|
||||
miniboy
|
||||
minigirl
|
||||
muscular
|
||||
muscular female
|
||||
plump
|
||||
curvy
|
||||
fat
|
||||
skinny
|
||||
breast expansion
|
||||
breast smother
|
||||
cooperative breast smother
|
||||
lactation
|
||||
breastfeeding
|
||||
lactation through clothes
|
||||
milking machine
|
||||
breast pump
|
||||
bdsm
|
||||
asphyxiation
|
||||
strangling
|
||||
bondage
|
||||
bound together
|
||||
breast bondage
|
||||
human dog
|
||||
predicament bondage
|
||||
public bondage
|
||||
self bondage
|
||||
shibari
|
||||
shibari over clothes
|
||||
shibari under clothes
|
||||
spreader bar
|
||||
suspension
|
||||
dominator \(bdsm\)
|
||||
femdom
|
||||
assertive female
|
||||
clothed female nude male
|
||||
dominatrix
|
||||
sitting on face
|
||||
humiliation
|
||||
body writing
|
||||
masochism
|
||||
neglect play
|
||||
public use
|
||||
tally
|
||||
rope walking
|
||||
sadism
|
||||
slave
|
||||
spanked
|
||||
torture
|
||||
clitoris torture
|
||||
nipple torture
|
||||
nipple clamps
|
||||
nipple pull
|
||||
ball busting
|
||||
tickle torture
|
||||
temperature play
|
||||
wax play
|
||||
ice play
|
||||
cum
|
||||
bukkake
|
||||
cumdump
|
||||
cum bath
|
||||
cumdrip
|
||||
cum pool
|
||||
cum inflation
|
||||
cum in ass
|
||||
cum in clothes
|
||||
cum in cup
|
||||
cum in mouth
|
||||
cum in throat
|
||||
cum on tongue
|
||||
cum in pussy
|
||||
cum in urethra
|
||||
cum on body
|
||||
cum on armpits
|
||||
cum on ass
|
||||
cum on back
|
||||
cum on breasts
|
||||
cum on chest
|
||||
cum on feet
|
||||
cum on fingers
|
||||
cum on hair
|
||||
cum on pectorals
|
||||
cum on pussy
|
||||
cum on stomach
|
||||
cum in navel
|
||||
cum on clothes
|
||||
cum on eyewear
|
||||
cum on food
|
||||
ejaculation
|
||||
ejaculating while penetrated
|
||||
pull out
|
||||
facial
|
||||
autofacial
|
||||
felching
|
||||
gokkun
|
||||
exhibitionism
|
||||
clothed sex
|
||||
public indecency
|
||||
public nudity
|
||||
zenra
|
||||
public vibrator
|
||||
stealth bondage
|
||||
stealth masturbation
|
||||
stealth paizuri
|
||||
stealth sex
|
||||
cheating
|
||||
netorare
|
||||
reverse netorare
|
||||
prostitution
|
||||
public use
|
||||
voyeurism
|
||||
caught
|
||||
peeking
|
||||
walk-in
|
||||
glory wall
|
||||
public indecency
|
||||
stationary restraints
|
||||
through wall
|
||||
public masturbation
|
||||
naked school attendance
|
||||
nudist
|
||||
sex battle
|
||||
competitive sex
|
||||
mixed-sex combat
|
||||
nude beach
|
||||
crossdressing
|
||||
trap
|
||||
reverse trap
|
||||
cuntboy
|
||||
cuntboy with cuntboy
|
||||
cuntboy with female
|
||||
cuntboy with male
|
||||
futanari
|
||||
implied futanari
|
||||
full-package futanari
|
||||
futa with cuntboy
|
||||
futa with female
|
||||
futa with futa
|
||||
futa with male
|
||||
futa on male
|
||||
male on futa
|
||||
futa without pussy
|
||||
futa with newhalf
|
||||
newhalf with female
|
||||
newhalf with male
|
||||
newhalf with newhalf
|
||||
no testicles
|
||||
male futanari
|
||||
incest
|
||||
twincest
|
||||
rape
|
||||
assisted rape
|
||||
femdom rape
|
||||
imminent rape
|
||||
molestation
|
||||
chikan
|
||||
compensated molestation
|
||||
smother
|
||||
asphyxiation
|
||||
breast smother
|
||||
sitting on face
|
||||
cross-section
|
||||
internal cumshot
|
||||
x-ray
|
||||
power bottom
|
||||
futasub
|
||||
anatomy
|
||||
conjoined
|
||||
extra arms
|
||||
extra breasts
|
||||
extra penises
|
||||
bestiality
|
||||
Knotting
|
||||
condom
|
||||
used condom on penis
|
||||
condom left inside
|
||||
used condom
|
||||
defloration
|
||||
dirty talk
|
||||
nantaimori
|
||||
nyotaimori
|
||||
wakamezake
|
||||
bust cup
|
||||
female ejaculation
|
||||
Pussy juice
|
||||
glory hole
|
||||
glory wall
|
||||
human furniture
|
||||
forniphilia
|
||||
human toilet
|
||||
Mating \(animal\)
|
||||
Mecha on girl
|
||||
pregnant
|
||||
giving birth
|
||||
impregnation
|
||||
unbirthing
|
||||
selfcest
|
||||
smelling
|
||||
smelling feet
|
||||
smelling clothes
|
||||
smelling underwear
|
||||
smelling pantyhose
|
||||
tentacles
|
||||
consensual tentacles
|
||||
mechanical tentacles
|
||||
penis tentacle
|
||||
pussy tentacle
|
||||
tentacle clothes
|
||||
tentacle gagged
|
||||
tentaclejob
|
||||
tentacle pit
|
||||
kankaku shadan
|
||||
tentacle sex
|
||||
tentacles in thighhighs
|
||||
tentacles under clothes
|
||||
tentacles on male
|
||||
too many tentacles
|
||||
vore
|
||||
scat
|
||||
enema
|
||||
peeing
|
||||
drinking pee
|
||||
golden shower
|
||||
peeing on viewer
|
||||
have to pee
|
||||
peeing self
|
||||
|
@@ -0,0 +1,72 @@
|
||||
penis
|
||||
foreskin
|
||||
phimosis
|
||||
testicles
|
||||
animal penis
|
||||
dog penis
|
||||
dolphin penis
|
||||
horse penis
|
||||
pig penis
|
||||
dark penis
|
||||
erection
|
||||
flaccid
|
||||
half-erect
|
||||
girthy penis
|
||||
glowing penis
|
||||
knotted penis
|
||||
mole on penis
|
||||
penis piercing
|
||||
penis tentacle
|
||||
small penis
|
||||
large penis
|
||||
huge penis
|
||||
gigantic penis
|
||||
spiked penis
|
||||
veiny penis
|
||||
tucked penis
|
||||
bouncing penis
|
||||
twitching penis
|
||||
fellatio
|
||||
licking penis
|
||||
cooperative fellatio
|
||||
kissing penis
|
||||
glansjob
|
||||
looking at penis
|
||||
penis on ass
|
||||
penis on face
|
||||
penis over eyes
|
||||
penis over one eye
|
||||
penis on head
|
||||
penis on pussy
|
||||
penis on shoulder
|
||||
penis on stomach
|
||||
penis to breast
|
||||
penis grab
|
||||
penis measuring
|
||||
penis milking
|
||||
penises touching
|
||||
penis and testicles touching
|
||||
poking with penis
|
||||
slapping with penis
|
||||
small penis humiliation
|
||||
penis hot dog
|
||||
bulge
|
||||
bulges touching
|
||||
covered penis
|
||||
penis and bulge touching
|
||||
penis in panties
|
||||
penis in pantyhose
|
||||
penis in swimsuit
|
||||
penis in thighhigh
|
||||
penis sheath
|
||||
penis under another's clothes
|
||||
erection under clothes
|
||||
erection under shirt
|
||||
erection under blanket
|
||||
condom on penis
|
||||
towel on penis
|
||||
disembodied penis
|
||||
invisible penis
|
||||
penis awe
|
||||
penis shadow
|
||||
extra penises
|
||||
|
@@ -0,0 +1,227 @@
|
||||
completely nude
|
||||
nude
|
||||
naked towel
|
||||
nude cover
|
||||
nearly naked towel
|
||||
impossible towel
|
||||
open towel
|
||||
nearly naked towel
|
||||
towel around waist
|
||||
clothed female nude female
|
||||
clothed female nude male
|
||||
clothed male nude female
|
||||
clothed male nude male
|
||||
pulling own clothes
|
||||
pulling another's clothes
|
||||
lifting own clothes
|
||||
lifting another's clothes
|
||||
opened by self
|
||||
opening another's clothes
|
||||
undressing another
|
||||
forced exposure
|
||||
pantsing
|
||||
clothing aside
|
||||
clothes down
|
||||
open clothes
|
||||
revealing clothes
|
||||
see-through clothes
|
||||
unbuttoned
|
||||
undressing
|
||||
unfastened
|
||||
untied
|
||||
untying
|
||||
unzipped
|
||||
unzipping
|
||||
bikini bottom aside
|
||||
buruma aside
|
||||
dress aside
|
||||
leotard aside
|
||||
panties aside
|
||||
shorts aside
|
||||
swimsuit aside
|
||||
assisted exposure
|
||||
wardrobe malfunction
|
||||
unworn clothes
|
||||
bikini pull
|
||||
cape lift
|
||||
lifting covers
|
||||
Untied bikini top
|
||||
Untied bikini bottom
|
||||
untied bikini
|
||||
front-hook bra
|
||||
nursing bra
|
||||
cupless bra
|
||||
unworn bra
|
||||
undone bra
|
||||
open kimono
|
||||
naked kimono
|
||||
robe slip
|
||||
strap lift
|
||||
strap pull
|
||||
strap slip
|
||||
one-piece swimsuit pull
|
||||
towel slip
|
||||
male underwear pull
|
||||
pelvic curtain aside
|
||||
fundoshi aside
|
||||
armpits
|
||||
armpit cutout
|
||||
bare arms
|
||||
arm cutout
|
||||
bare shoulders
|
||||
off shoulder
|
||||
shoulder cutout
|
||||
sleeves rolled up
|
||||
sleeveless
|
||||
low-cut armhole
|
||||
sleeves pushed up
|
||||
sleeves rolled up
|
||||
hood down
|
||||
center opening
|
||||
open coat
|
||||
open collar
|
||||
dress pull
|
||||
open hoodie
|
||||
open jacket
|
||||
naked jacket may
|
||||
leotard pull
|
||||
kimono down
|
||||
kimono pull
|
||||
pajamas pull
|
||||
open robe
|
||||
shirt aside
|
||||
topless male
|
||||
no shirt
|
||||
open shirt
|
||||
naked shirt
|
||||
shirt lift
|
||||
shirt pull
|
||||
shirt slip
|
||||
sweater lift
|
||||
top pull
|
||||
open vest
|
||||
breastless clothes
|
||||
one breast out
|
||||
breast slip
|
||||
breasts out
|
||||
bra lift
|
||||
no bra
|
||||
bra pull
|
||||
topless female
|
||||
backboob
|
||||
cleavage
|
||||
cleavage cutout
|
||||
sideboob
|
||||
underboob
|
||||
underboob cutout
|
||||
areola slip
|
||||
nipple slip
|
||||
nippleless clothes
|
||||
nipples
|
||||
back cutout
|
||||
backless outfit
|
||||
bare back
|
||||
frontless outfit
|
||||
midriff
|
||||
navel cutout
|
||||
side cutout
|
||||
sideless outfit
|
||||
stomach cutout
|
||||
barefoot
|
||||
bare legs
|
||||
dress lift
|
||||
hip vent
|
||||
leg cutout
|
||||
thigh cutout
|
||||
side slit
|
||||
no pants
|
||||
shoe pull
|
||||
sock pull
|
||||
zettai ryouiki
|
||||
ass cutout
|
||||
bottomless
|
||||
buruma pull
|
||||
buruma aside
|
||||
clitoris slip
|
||||
crotch cutout
|
||||
hakama pull
|
||||
kimono lift
|
||||
yukata lift
|
||||
no panties
|
||||
bottomless
|
||||
pants pull
|
||||
open pants
|
||||
pants pull
|
||||
panty lift
|
||||
panty pull
|
||||
penis peek
|
||||
pussy peek
|
||||
pantyhose pull
|
||||
shorts aside
|
||||
open shorts
|
||||
shorts pull
|
||||
skirt around one leg
|
||||
skirt around ankles
|
||||
open skirt
|
||||
skirt pull
|
||||
skirt lift
|
||||
naked apron
|
||||
nearly naked apron
|
||||
naked bandage
|
||||
naked cape
|
||||
naked capelet
|
||||
naked chocolate
|
||||
naked cloak
|
||||
naked coat
|
||||
naked hoodie
|
||||
naked jacket
|
||||
naked overalls
|
||||
naked ribbon
|
||||
naked robe
|
||||
naked scarf
|
||||
naked sheet
|
||||
naked shirt
|
||||
naked suspenders
|
||||
naked tabard
|
||||
underwear only
|
||||
downblouse
|
||||
downpants
|
||||
pantyshot
|
||||
upskirt
|
||||
covering privates
|
||||
covering anus
|
||||
covering ass
|
||||
covering breasts
|
||||
covering crotch
|
||||
covering head
|
||||
covering own ears
|
||||
covering one eye
|
||||
covering own eyes
|
||||
covering face
|
||||
covering own mouth
|
||||
nude cover
|
||||
adjusting clothes
|
||||
clothes grab
|
||||
apron grab
|
||||
collar grab
|
||||
necktie grab
|
||||
skirt grab
|
||||
collar tug
|
||||
dress tug
|
||||
shirt tug
|
||||
skirt tug
|
||||
wringing clothes
|
||||
nude modeling
|
||||
accessory tan
|
||||
bikini tan
|
||||
double tanline
|
||||
farmer's tan
|
||||
one-piece tan
|
||||
pasties tan
|
||||
shibari tan
|
||||
shirt tan
|
||||
shorts tan
|
||||
slingshot tan
|
||||
tan tattoo
|
||||
revealing tanlines
|
||||
presenting tanlines
|
||||
|
@@ -0,0 +1,43 @@
|
||||
ass
|
||||
ass expansion
|
||||
bad ass
|
||||
flat ass
|
||||
huge ass
|
||||
spread ass
|
||||
butt crack
|
||||
underbutt
|
||||
wedgie
|
||||
anal hair
|
||||
anus
|
||||
no anus
|
||||
puckered anus
|
||||
spread anus
|
||||
tiny anus
|
||||
anal fingering
|
||||
anal fisting
|
||||
ass smack
|
||||
covering anus
|
||||
covering ass
|
||||
grabbing another's ass
|
||||
grabbing own ass
|
||||
groping
|
||||
hand on another's ass
|
||||
hand on own ass
|
||||
hands on another's ass
|
||||
hands on own ass
|
||||
biting ass
|
||||
smelling ass
|
||||
head on ass
|
||||
cum in ass
|
||||
cum on ass
|
||||
anal
|
||||
anal hook
|
||||
ass-to-ass
|
||||
ass cutout
|
||||
ass on glass
|
||||
ass ache
|
||||
ass focus
|
||||
ass shake
|
||||
ass visible through thighs
|
||||
bouncing ass
|
||||
x anus
|
||||
|
@@ -0,0 +1,660 @@
|
||||
{
|
||||
"sex": "1girl,1boy,sex",
|
||||
"anal sex": "1girl,1boy,anal sex",
|
||||
"doggy style": "1girl,1boy,doggy style,sex",
|
||||
"fellatio": "1girl,1boy,fellatio",
|
||||
"foot job": "1girl,1boy,foot job,penis",
|
||||
"hand job": "1girl,1boy,hand job,penis",
|
||||
"girl on top": "1girl,1boy,girl on top,sex from behind",
|
||||
"masturbation": "1girl,masturbation",
|
||||
"paizuri": "1girl,1boy,paizuri,penis,cleavage++,cum,lying on boy,breasts press",
|
||||
"rape": "1girl,2boys,gangbang,sex",
|
||||
"after anal sex 1": "1girl,leaning forward,ass,after anal,cum,sundress,white dress,gaping,spread auns,thighhighs,table,window,small breasts,frills,lace trim,layered dress,",
|
||||
"after anal sex 2": "<lora:cuminass-000015:1>,asscum,cum in ass,after anal,from behind,full-face blush,huge ass,(standing:1.2),hands on ass,hand on own ass,spread ass,smug,naughty face",
|
||||
"after anal sex 3": "1girl,gaped after anal,gaping,anal,cum in anus,ass",
|
||||
"after sex 1": "(bottomless, lying:2),pussy juice,cum in pussy,ahegao,rolling eyes,ultra high res,ultra-detailed,professional lighting,((full body)),facing front,(looking at viewer:1.2),1 girl,(curvy),narrow waist,(real skin, oiled Skin, pale skin),(arms behind:1.3),nipples,(spread legs:1.3),(cameltoe:1.3,perfect pussy),cleavage,(perfect female body, narrow waist),uncensored,(spread pussy,spread ass:1.5)",
|
||||
"after sex 2": "after sex,cum,lying,cumdrip,ass,on stomach,on back,fucked silly,sweat,cum pool,bukkake,trembling,anus,ass gaping,",
|
||||
"after sex 3": "after sex,lying,on back",
|
||||
"after sex 4": "wide spread legs,after sex,lying,on back,hetero,open mouth,",
|
||||
"after sex 5": "after sex,lying,on back,wide spread legs,cleaning fellatio,1boy,penis,hetero,",
|
||||
"after sex 6": "after sex,lying,on back,on stomach,wide spread legs,empty eyes,",
|
||||
"after sex 7": "1girl,against wall,full body,pov,bangs,after sex,cum on body,spread legs,pussy,pubic hair,nude,AHEGAO,ROLLING EYES,BLUSH,TONGUE OUT,DROOLING,bukkake,cum,bukkake,excessive cum,facial,cum on body,cum on breasts,liquid,suggestive fluid,cumdrip,cum string,cum everywhere,cumshot,cum pool",
|
||||
"after sex 8": "1girl,after sex,cum on body,condom wrapper,used condom,pointless condom,(v sign,realistic)",
|
||||
"after sex 9": "thumbs up,1girl,bangs,lying,on ground,from_above,after sex,cum on body,spread legs,pussy,pubic hair,sleeping,AHEGAO,ROLLING EYES,BLUSH,TONGUE OUT,DROOLING,SALIVA,BLUSH",
|
||||
"after sex 10": "1girl,lying on back,<lora:Broken-15:0.7>,used condom,after sex,nsfw,nude,cum on body,from above",
|
||||
"Guy tired after Sex": "guy tired afther sex,1girl,breasts,blush,solo focus,expressionless,looking at viewer, solo focus, breasts,1boy,cleavage,closed mouth and very tired,collarbone,green eyes,hetero,lying,indoors,on back,pillow,bed,on bed,boy_sleeping_closed_eyes_tired,towel,drooling,naked towel,(V peace sign)",
|
||||
"after rape 1": "1girl,sitting on closestool,large windows,indoors,close up,drooling,large breasts,nipples,ass,anus,pussy,after sex,sweat,steam,heavy breathing,thick thighs,bondage,spread legs,arms behind head,(cum, cumdrip, facial, bukkake:1.2),cum in pussy,cum in anus,(cum on hair, cum on breasts:1.2),toilet,public use,uncensored,realspreadpussy,hypnoLora,empty eyes,nude",
|
||||
"after rape 2": "1girl,sitting,close up,drooling,large breasts,nipples,ass,anus,pussy,after sex,sweat,steam,heavy breathing--,thick thighs,bondage,spread legs,arms behind head,(cum, cumdrip, facial, bukkake:1.2),cum in pussy,cum in anus,(cum on hair, cum on breasts:1.2),public use,uncensored,realspreadpussy,hypnoLora,empty eyes",
|
||||
"anal beads 1": "anal beads:1.2,anal beads inside,anal beads in anus,anal beads dangling from anus,anal object insertion:1.3",
|
||||
"anal beads 2": "Anal beads,dangling anal beads,anus,real vaginal,best pussy",
|
||||
"anal beads 3": "analball,anal,anal object insertion",
|
||||
"butt plug 1": "solo,1girl,pussy,anal object insertion,butt plug",
|
||||
"butt plug 2": "full photo,girl,on a bed,touching her pussy,looking at the camera,with a (pink buttplug) in her ass,",
|
||||
"anal sex 1": "a photo of a woman with her legs spread being fucked by man,penis being inserted into a woman's anus,anal sex",
|
||||
"anal sex 2": "a woman with her legs spread being fucked by two men,two penises being inserted into a woman's anus,anal sex,",
|
||||
"anal sex 3": "anal_hold,legs_together,legs_up,anal,hetero,penis,sex,pussy,open mouth,testicles,ass,solo focus,1girl,1boy",
|
||||
"anal sex 4": "1girl,HDA_AnalHold,HDA_Masterpiece",
|
||||
"anal sex 5": "solo folded anal,1girl,pubic hair,thighhighs,pussy juice,object insertion,anus,sex toy,anal object insertion,skirt,pussy,clitoris,ass,urethra,folded,female pubic hair,lying,knees to chest,long hair,anal,open mouth,solo,blush,legs up",
|
||||
"anal sex 6": "folded anal sex,feet,large breasts,open mouth,soles,sex,1girl,uncensored,pussy,penis,nude,1boy,blush,hetero,sex from behind,folded,toes,thighhighs,full nelson,toeless legwear,ass,nipples,tiara,anal,testicles,reverse suspended congress",
|
||||
"anal sex 7": "on side,anal,penis,lying,1girl,breasts,pussy,hetero,looking at viewer,testicles,ass,(1boy,blackedscene,nipples,handsome)",
|
||||
"anal sex 8": "photo of enjoying orgasm shocked woman (wearing stockings:1.1) getting missionary anal fucked by huge penis laying on bed,legs up,professional photoshoot,perfect face,eye contact,beautiful eyes,(creampie:1.2),from above",
|
||||
"anal sex 9": "1girl,1boy,(squatting anal),full body,squatting over man,on couch,knees bent,leaning back,gray bedding,fireplace,lamp on bedside table,anal object insertion",
|
||||
"anal sex 10": "1girl,1boy,(squatting anal),full body,squatting over man,on couch,knees bent,leaning back,man's hands supporting her ass,anal object insertion",
|
||||
"anal sex 11": "1girl,1boy,standing anal,close up,photo of woman getting fucked from behind by man",
|
||||
"anal sex 12": "standing anal,1girl,1boy,penis,anal,sex,sex from behind,anus",
|
||||
"anal fist": "1girl,solo,anal fist,anal object insertion",
|
||||
"ass up sex 1": "1girl,1boy,HDA_piledriver,HDA_Masterpiece,up side down lying,spread legs,sex",
|
||||
"back sex 1": "1girl,sole,nude,lying on table,one leg up,from behind,looking back,matured,spread legs,anal,ass,((detailed dilated gaping_vaginal)),(huge penis, huge penis as wide as arms),(pov),sex from behind,grabbing ass,detailed hands,spread anus,uncensored,orgasm,(mating call),detailed leg,large breasts,opened cloth,leaning forward,gaping,open mouth,tongue,requesting sex,showing off anus,detail ass hole,(red_choker),(femdom),enchanting expressionless,enjoying,((zettai ryouiki)),scowling,happiness,(detailed face description),(detailed eyes description),pet girl,nothing happened,legs up shot,lying,focus ass,advanced cg,amazing quality,octane rendering,(detailed pussy),cummings,cumed,suggestive fluid,seductive,alluring,(vomcum),focus ass hole,",
|
||||
"back sex 2": "1girl,1boy,solo focus,large male,girl being crushed,looking at viewer,facing viewer,male out of frame,male suppress from over,sex from over,prone bone,on stomach,face down,face on bed,mount over press sex",
|
||||
"back sex 3": "woman,horns,sex,men,(horns grab from behind)",
|
||||
"back sex 4": "pose arm_held_back,1girl,hetero,1boy,sex,huge breasts,sex from behind,arm grab,doggystyle,bent over,penis,school uniform,cleavage",
|
||||
"back sex 5": "1girl,1boy,sex,bent over,creampie,anal,vaginal",
|
||||
"back sex 6": "1girl,1boy,prone bone,sex from behind",
|
||||
"carrying sex 1": "1girl,1boy,nsfw,sex from behind,testicles,legs grab,completely nude,carrying under arm,facing viewer,faceless male",
|
||||
"carrying sex 2": "gigantic penis,testicles,pussy,sex from behind,reverse upright straddle,",
|
||||
"carrying sex 3": "Full nelson,penis,sex,1boy,1girl,reverse suspended congress",
|
||||
"carrying sex 4": "1girl,1boy,reverse upright straddle,breasts,penis,pussy,sex,vaginal,spread legs,testicles,sex from behind,standing",
|
||||
"carrying sex 5": "1girl,1boy,suspended congress,sex,kiss,carrying sex",
|
||||
"carrying sex 6": "1girl,(completely nude:1.2),(huge breasts),<lora:reverse suspended congress_Redim:1>,(reverse suspended congress:1.2),pussy,vaginal,sex from behind,solo focus,testicles,penis,sex",
|
||||
"carrying sex 7": "reverse suspended congress,1girl,1boy,sex from behind,penis,anal,bangs,front view,carrying sex",
|
||||
"carrying sex 8": "(1girl,hands behind body),1boy,carrying from behind,<lora:RSCongress:0.2>,penis,reverse suspended congress,anal,spread legs",
|
||||
"carrying sex 9": "sex,hetero,1girl,1boy,penis,suspended congress,standing,vaginal,ass,hands under legs,ass focus,nude",
|
||||
"cheststand sex": "1girl,1boy,cheststand:1.2,sex,penetration,penis,cum,top-down_bottom-up,spread legs",
|
||||
"doggy style 1": "1girl,HDA_Doggystyle,HDA_Masterpiece",
|
||||
"doggy style 2": "arm_grab,doggystyle,",
|
||||
"doggy style 3": "1girl,1man,sex from behind++",
|
||||
"doggy style 4": "1girl,1man,top-down bottom-up,doggystyle+++,from behind,sex,penis,ass",
|
||||
"doggy style 5": "1girl,1man,doggystyle,pov,sex from behind,1boy,1girl,sex,ass",
|
||||
"doggy style 6": "1girl,doggystyle,standing,sex,sex from behind",
|
||||
"doggy style 7": "doggystyle,from behind,sex from behind,a photo of a woman being fucked by a man,a man's penis is being inserted into a woman's vagina,hetero,a man,all fours,ass,penis,sex,vaginal,solo focus,anus,pussy",
|
||||
"doggy style 8": "FBD,1girl,hetero,nipples,uncensored,1boy,sex,penis,pubic hair,vaginal,torso grab,doggystyle,pussy,pussy up,sex from behind,all fours",
|
||||
"doggy style 9": ",1girl,1boy,piledriver doggystyle,top-down bottom-up,vaginal,testicles,",
|
||||
"doggy style 10": "a photo of a woman,sex from behind,doggystyle,1boy,man,penis,testicles,anal,side view perspective,looking back,looking at viewer,Auburn hair",
|
||||
"doggy style 11": "1girl,1boy,doggystyle,top-down bottom-up,sex from behind,hold arms down,hold head down,grabbing,pressing,",
|
||||
"doggy style 12": "1girl,solo focus,1boy,nude,hetero,large breasts,ass,sex,bed sheet,sexfb,tongue out,open mouth,sweat",
|
||||
"doggy style 13": "1girl,1boy,ass,hetero,penis,sex,solo focus,pussy,anus,sex from behind,pov,doggystyle,all fours,back,from behind",
|
||||
"doggy style 14": "1girl,breasts,hetero,1boy,sex,nipples,penis,large breasts,vaginal,navel,hanging breasts,sweat,pussy,blush,open mouth,solo focus,all fours,sex from behind,looking at viewer,clothes lift,indoors,sweater,bangs,doggystyle",
|
||||
"doggy style 15": "1girl,1boy,pose sexfrombehind,sex from behind,all fours",
|
||||
"doggy style 16": "1boy,1girl,pov,from behind,sex,cum,anal,on all fours,solo focus,on bed,butt,moaning,(raver style:1.3),no panties,anal,pussy",
|
||||
"doggy style 17": "1girl,1boy,doggystyle anal,close up,from above,creampie,looking back",
|
||||
"doggy style 18": "1girl,1boy,prnemx,blackedscene,sex from behind,on stomach,lying,prone bone,penis,handsome,abs",
|
||||
"doggy style 19": "1girl,1boy,sex,nude,hetero,tongue out,sweat,bed sheet",
|
||||
"Doggy and kitty": "1boy,2 girls,group sex,brigitte,anita and charlie having sex together,Side view,insanely cute girl fucked by a man while licking the pussy of another girl (Doggy and pussy pose),variation,hd,ultra cute,desirable woman",
|
||||
"doggy choking": "choking,(doggystyle),big tits,ahegao,((heart)),(1boy),1girl,",
|
||||
"double sex 1": "1girl,HDA_DeepPenetration,HDA_Masterpiece",
|
||||
"double sex 2": "1girl,2boys,double penetration,multiple penises,from behind",
|
||||
"double sex 3": "double penetration,multiple penises,from behind,anal",
|
||||
"double sex 4": "1girl,2boys,double penetration,multiple penises",
|
||||
"double sex 5": "double penetration 1girl,mmf threesome,multiple boys,penis,sex,pubic hair,group sex,threesome,2boys,hetero,nude,vaginal,nipples,male pubic hair,multiple penises,uncensored,double penetration,pussy,anal,long hair,testicles,open mouth,completely nude,lips,female pubic hair,grabbing,navel,spread legs,solo focus,realistic,breasts,indoors,small breasts,brown hair,flat chest",
|
||||
"double sex 6": "1girl,1boys,double penetration,double sex,pussy object insertion,penis in anal,overflow,tearing up,mmf threesome",
|
||||
"fellatio 1": "1girl,squatting,(1boy, nude),penis,hetero,oral,ass,fellatio",
|
||||
"fellatio 3": "deepthroat:1.3",
|
||||
"fellatio 4": "fellatio:1.3",
|
||||
"fellatio 5": "sucking man's penis",
|
||||
"fellatio 6": "Blowjob,1boy,1girl,penis,fellatio",
|
||||
"fellatio 7": "cockbiting,vampirebiting",
|
||||
"fellatio 8": "fellatio,all fours,full body",
|
||||
"fellatio 9": "large breasts,thick thighs,blush,humiliation,blowjobselfies,penis,saliva,testicles,fellatio",
|
||||
"fellatio 10": "cheek bulge,from side,fellatio,cum on mouth",
|
||||
"fellatio 11": "1girl,fellatio,pov,cheek poking fellatio,(cheek bulge:1.2),solo focus",
|
||||
"fellatio 12": "1girl,1boy,nsfw,deepthroat,corneo_side_deepthroat,(veiny penis),corneo_yoruichi,cum in mouth,hand on another's head,(detailed background)",
|
||||
"fellatio 13": "fellatio,pov,huge penis,all fours",
|
||||
"fellatio 14": "1girl,1boy,kneeling,blowjob",
|
||||
"fellatio 15": "full sideview woman blonde open eyes blue eyes eha posturecollar exposed nipples very large breast uwe (armbinder:1) corset garter lingerie stockings high heels,man really close to her mouth ballsdeep (1man:1) (deep:1),facefuck,(deepthroat:1),helpless,sucking dick,forced,cock,penis,man standing fucking her mouth,ring gag,tied uwe wol ropes kneeling,",
|
||||
"fellatio 16": "1girl,1boy,penis,pov,nipples,nude,simple background,white background,",
|
||||
"fellatio 17": "1girl,1boy,licking penis,big breast,under the sheet,holding the penis with her hand,only the face and chest are visible",
|
||||
"fellatio 18": "1boy,penis,pov,1girl,deepthroat,headgrab,motion lines,closed eyes,tears,cum,cum in mouth,facial,cum in hair",
|
||||
"fellatio 19": "fellajob,1girl,penis,breasts,hetero,paizuri,1boy,nipples,oral,uncensored,fellatio,looking at viewer,pov,large breasts,blush,bangs,nude,erection,breasts squeezed together",
|
||||
"fellatio 20": "fellatio gesture,fingers around tongue",
|
||||
"fellatio 21": "fellatio under table,1girl,1boy,fellatio,under table,penis",
|
||||
"fellatio 22": "fellatio,squatting",
|
||||
"fellatio 23": "1girl,deepthroat,cum,pov,head grab",
|
||||
"fellatio 24": "1girl,solo,(grab_fellatio, 1boy, hetero, penis, pov, oral, fellatio, hand on another's head, irrumatio, trembling, cum, saliva:1.1),(background wall:1.1),(tears,one eye closed:1.1),(from above:1.2)",
|
||||
"fellatio 25": "1girl,1boy,hetero,penis,solo focus,oral,fellatio,grabbing another's hair,irrumatio,twintail,hairholdingblowjob,<lora:hairholdingblowjob:0.8>,<lora:add_detail:1>,((pov)),((front view, look at viewer)),cum in mouth,big breasts",
|
||||
"fellatio 26": "1girl,1boy,<lora:hhbjbbc:0.8>,hhbjbbc,hetero,solo focus,pubic hair,uncensored,cum,male pubic hair,hand on girl's head,",
|
||||
"fellatio 27": "hofrnpete,penis,woman,fellatio,heart-shaped pupils,demon horns,pov,",
|
||||
"fellatio 28": "1girl,(1boy,sitting),implied_fellatio,implied fellatio,solo focus,hetero,back,from behind,huge ass",
|
||||
"fellatio 29": "1girl,kissing penis",
|
||||
"fellatio 30": "1girl,huge_breasts,,kissing penis paizuri",
|
||||
"fellatio 31": "1girl,1boy,A photo of a woman sticking out her tongue to lick a man's glans",
|
||||
"fellatio 32": "1girl,1boy,(mature female:1.5),pov,oral,hetero,cum,facial,licking,tongue out,big penis",
|
||||
"fellatio 33": "1girl,1boy,penis,erection,nude,interracial,looking at viewer,sex,hetero,full lips,penis on face,cum,facial,lying,on back,after fellatio",
|
||||
"fellatio 34": "1girl,accurate anatomy,1boy,deepthroat,fellatio,looking up,looking at viewer,seductive eyes,sloppy,saliva,cum,all the way to the base,beautiful,stunning,pov,pov crotch,cute,petite,exposed breasts,struggling",
|
||||
"fellatio 35": "woman,blackedscene,1girl,1boy,penis,solo focus,lips,male pubic hair,oral,fellatio,erection,breasts,nipples,looking up,from side",
|
||||
"fellatio 36": "1girl,hetero,1boy,fellatio++,masturbation++,full body",
|
||||
"fellatio 37": "1girl,breasts,penis,1boy,tongue out,cum string,oral,pov",
|
||||
"fellatio 38": "1girl,hetero,cum,cum in pussy,penis,1boy,oral,after sex,fellatio",
|
||||
"fellatio 39": "1girl,breasts,hetero,1boy,penis,nipples,blonde hair,fellatio,paizuri,oral,looking at viewer,large breasts,blush,hairclip,indoors,solo focus,bangs,navel,pov,off shoulder,collarbone,bare shoulders,male pubic hair,pubic hair,breasts squeezed together,trembling",
|
||||
"fellatio 40": "1girl,penis,hetero,1boy,tiles,cum,breasts,tile floor,blush,from side,large breasts,denim,oral,fellatio,facial,solo focus,cum in mouth,white footwear,full body,sweat,erection,profile,sitting,stray pubic hair,brown belt,tile wall,kneeling,after fellatio,cum on hair,off shoulder,streaked hair",
|
||||
"fellatio 41": "pov crotch desk,1girl,hetero,1boy,pov,penis,oral,fellatio,red hair,looking at viewer,breasts,male pubic hair,blush,under table,ringed eyes,pubic hair,:>=,sidelocks,phone screen,table,bangs,nude,sweat,solo focus,pov crotch,medium breasts,desk,erection",
|
||||
"fellatio 42": "1girl,1boy,solo focus,hetero,large breasts,mature female,simple background,fellatio",
|
||||
"fellatio 43": "1girl,blackedscene 1girl,lying,on stomach,oral,penis,1boy,ass,hetero,nude,prnorl,fellatio,lips,uncensored",
|
||||
"fellatio 44": "1girl,1boy,(realistic),(Cowboy-shot),ethereal,SittingBlowjobQuiron pose,(bloom:0.5),shallow depth of field,hetero,penis,lips,uncensored,oral,fellatio,forehead pimples,full wet lips",
|
||||
"fellatio 45": "1girl,1boy,solo focus,hetero,nude,deepthroat,irrumatio,tears,half-closed eyes,cum,",
|
||||
"Slit tongue fellatio": "1girl,slittongue,open mouth,tongue,upper body,teeth,fangs,lgtg,tongue,wavy tongue,long tongue,LNGTNG,fellatio,1boy,huge penis,NSFW,girl use long to licking my long penis,POV",
|
||||
"fellatio under mask": "1girl,1boy,Velo,fellatio under mask",
|
||||
"fellatio reverse 1": "real,photoshoot,realistic,luminescent,atmospheric scene,masterpiece,best quality,(detailed beautiful face, detail skin texture, ultra-detailed body:1.1),cinematic light,inversemouthfuck,hetero,1boy,oral,penis,fellatio,nude,closed eyes,realistic,uncensored,solo focus,close-up,testicles,solo focus,pubic hair,facial,anus",
|
||||
"vacuum fellatio 1": "(anteaterface:1.2),pov,1girl,solo,penis,oral,fellatio,long eyelashes,thick eyelashes,eyeshadow,(risekujikawa:1.1),office,indoors,<lora:vacuum fellatio 2_1:0.9>,",
|
||||
"vacuum fellatio 2": "<lora:vacuumfera2:0.7>,fellatio,penis,pov",
|
||||
"kneeling blowjob 1" : "1girl,blowjob,fellatio,kneeling,1fatman standing,fatman have fullbody,long penis,from side,sweat,absurdres,highres,4k,ray tracing,intricate details,highly detailed,(1girl:perfect face, cute, petite),solo focus,(2 male:-1)",
|
||||
"kneeling blowjob 2" : "Fellatio,Blowjob,hand on girl's head,(1 nude man:1.3) (masterpiece:1.2),(best quality,:1.2),full body shot,1girl,penis,large breasts,abs,fit and petite body,view from side, eyes closed,frown,girl wears black waitress outfit,girl wears black stockings,semen dripping down from mouth,kneeling on the floor,breasts out,in the restaurant,food on the bar counter,shelves",
|
||||
"foot job 1": "1girl,HDA_two-footed footjob,1man,HDA_Masterpiece",
|
||||
"foot job 2": "1boy,hetero,pov,nude male,1girl,penis++,sitting,foot focus,foot on penis,close-up,femdom,testicles,cum",
|
||||
"foot job 3": "1boy,1girl,footjob,two-footed_footjob,penis,hetero",
|
||||
"foot job 4": "(1girl giving a footjob with her soles:1.3),man standing pov,from above,(smirk:1),",
|
||||
"foot job 5": "footjob(sex position),two-footed footjob,solo focus,1girl,[1boy:erection,large penis,:0.1],cum in feet,ejaculation,handsfree ejaculation",
|
||||
"foot job 6": "1girl,reverse footjob,1boy,pov,penis",
|
||||
"foot job 7": "1boy,pov,male_pubic_hair,penis,1girl,looking_at_viewer,solo_focus,standing_footjob",
|
||||
"hand job 1": "double_handjob,handjob,1girl,multiple_penises,real penis++,penis,hetero,solo_focus,group_sex,multiple_boys,mmf_threesome,male_pubic_hair,2boys,ejaculation,facial,testicles,",
|
||||
"hand job 2": "1girl,handjob,1man,1man lying on bed,male focus+++,large perfect penis dripping cum,cum covered,",
|
||||
"hand job 3": "1boy,1girl,male focus,handjob,fondling,(reach-around:1.3),reacharound,woman behind man",
|
||||
"hand job 4": "licking-nipple handjob",
|
||||
"hand job 5": "uncensored,1girl,MilkingHandjob,handjob,penis,ejaculation,cum in bucket,dress,looking at penis",
|
||||
"hand job 6": "panty job,panties on penis,1boy,1girl",
|
||||
"hand job 7": "holding a big dick in her hand giving a man's dick a handjob,penis",
|
||||
"girl on top 1": "amazon position,1girl,1boy,hetero,assertive female,penis,pov,vaginal,girl on top,folded,ankle grab",
|
||||
"girl on top 2": "amazon position,ankle grab,holding another's leg,holding leg,leg grab,1boy,1girl,sex,pov",
|
||||
"girl on top 3": "amazon position,1girl,sex,pov",
|
||||
"girl on top 4": "Amazon position,1girl,breasts,nipples,completely nude,penis,nude,navel,magical girl,blue eyes,pussy,short hair,sweat,blue hair,cure white,",
|
||||
"girl on top 5": "Amazon position,1girl,breasts,nipples,completely nude,penis,nude,navel,blue eyes,pussy,short hair,sweat,blonde hair",
|
||||
"girl on top 6": "1girl,hetero,sex,cowgirl position,pov,girl on top,straddling,(1boy,breast grab),pov hands,perfect hands,pussy,long penis,full body,closed eyes,aroused,bra,",
|
||||
"girl on top 7": "1girl,(1boy:1.1),sex,(hetero:1.3),sitting,girl on top,(straddling, upright straddle, vaginal, penis),pussy,pussy juice,hug,from behind,leg lock",
|
||||
"girl on top 8": "1girl,(1boy),sex,(hetero:1.3),straddling,(girl on top, upright straddle),pussy juice,from side,hug",
|
||||
"girl on top 9": "1girl,1man,HDA_Cowgirl position,HDA_Masterpiece",
|
||||
"girl on top 10": "1girl,1man,HDA_Cowgirl positionV2.0,HDA_Masterpiece",
|
||||
"girl on top 11": "cowgirl position,straddling,1boy,1girl,sex,penis",
|
||||
"girl on top 12": "1boy,penis,testicles,1girl,ass,hetero,sex,vaginal,straddling,girl on top,feet,barefoot,soles,pussy,anus,cowgirl position,",
|
||||
"girl on top 13": "straddling,cowgirl_position,girl_on_top,sex,(1girl,1boy),full body",
|
||||
"girl on top 14": "1girl,sex,cowgirl positon,girl on top,straddling,1boy,hetero,nude,(penis),pussy,vaginal",
|
||||
"girl on top 15": "1boy,1girl,ass,bangs,blush,breasts,bed,curtains,girl on top,hetero,medium breasts,penis,pussy,sex,straddling,( testicles),vaginal sex,lace bra,",
|
||||
"girl on top 16": "1girl,1boy,girl on top,pov,straddling,assertive female,hetero,guided penetration,gp1,cowgirl position,1girl,penis,vaginal",
|
||||
"girl on top 17": "a photo of a woman being fucked by a man and a man's penis is being inserted into a woman's anus and anal sex and reverse cowgirl position and woman on top",
|
||||
"girl on top 18": "reverse cowgirl position,straddling,sex from behind,ass,1boy,1girl,sex,penis",
|
||||
"girl on top 19": "1girl,1boy,reverse cowgirl,close up photo of (handsome man sitting:1.3) on chair,beautiful brunette undercut ( caucasian :1) woman supermodel sitting on his lap,getting fucked by man with perfect penis",
|
||||
"girl on top 20": "1girl,nipples,((1boy, penis)),sex,girl_on_top,squqtting,cowgirl_position,straddling,vaginal,squatting cowgirl position,hetero",
|
||||
"girl on top 21": "upright straddle,1girl,1boy,hug,vaginal,heavy breathing,french kiss,sweat,steam",
|
||||
"girl on top 22": "1girl,nipples,(1boy),sex,(hetero),(upright straddle),straddling,vaginal,<lora:upright_front_above_50:1>,eye contact,looking at another,(open mouth),teeth,sweat,(blush:1.3),chair,hug",
|
||||
"girl on top 23": "1girl,(1boy),sex,(hetero:1.2),looking at another,sitting,girl on top,(straddling, upright straddle),pussy juice,hug,leg lock,<lora:upright_front_leg_lock_2:0.7>,(blush:1.3),(sweat),steam,chair,sitting",
|
||||
"girl on top 24": "1girl,bottomless,(1boy),sex,(hetero:1.2),looking at another,sitting,girl on top,(straddling, upright straddle, vaginal, penis, pussy),hug,pussy juice,(blush:1.3),(sweat),steam,bed,used tissue,tissue box,used condom,parted lips,",
|
||||
"group sex 1": "(mans, rough sex, hetero, vaginal penis, fellatio, missionary, girl on top, straddling, intercourse with a mans, boys who pounces, gangbang, group sex:1.4)",
|
||||
"group sex 2": "shackles,crying,group sex,intercourse with men,a captured women,getting,raped,rape,crying open eyes,gangbang,surrounded by men,Hands bound,handcuffs,teary eyes,SEX Dungeon",
|
||||
"group sex 3": "spitroast,mmf threesome,doggystyle,sex from behind,fellatio,oral,penis,multiple boys,nude,hetero,looking at viewer,lips,2boys,multiple penises,all fours",
|
||||
"group sex 4": "group sex,orgy,missionary,on the back,arm grabbing,long hair,school sweater vest,sweater,short sleeves,1girl,shiny skin,big breasts nipples,stomach,navel,open legs,perfect anatomy,1 guy,cowgirl position,girl on top,penis in vaginal,cum in vagina,big penis,saliva,blush all over the face,lips parted,inside,dynamic angle,looking_down viewer,dynamic lighting,close-up,focus only,ahegao,blushing,sweat,open mouth,rolling eyes,tears,tongue out,direct,best quality,masterpiece,ultra high resolution,ceiling,bukkake,saliva bridge,saliva trail,3+boys penis details",
|
||||
"group sex 5": "2girls,missionary,sex,lying,spread legs,pov,1boy,penis,pussy,multiple girls,from above,harem,lineup,",
|
||||
"group sex 6": "missionary,group sex,spread legs,lying,multiple boys,multiple penises,pov,2girl,",
|
||||
"group sex 7": "blackedscene,1girl,breasts,ass,hetero,multiple boys,penis,pussy,dark skin,2boys,sex,lips,testicles,straddling,girl on top,group sex,anal,multiple penises,cowgirl position,ass grab,threesome,realistic,interracial,mmf threesome,double penetration,enchantingly attractive looking,",
|
||||
"group sex 8": "1girl,6+boys,on stomach,face,gangbang,group sex,orgy,from above",
|
||||
"group sex 9": "(3girls,multiple girls:1),sex,1boy,pov,cowgirl position,smile,blush,large breasts,looking at viewer,nipples,pussy,pussy juice,penis,thighhighs,garter belt,mature female,school,teacher,glasses,straddling,high heels",
|
||||
"group sex 10": "pov spitroast blowjob photo of beautiful blonde woman supermodel getting fucked,masterpiece,perfect lighting,perfect face,eye contact,brown eyes,in bed,hand holding head,creampie",
|
||||
"group sex 11": "(sandwiched:1.2),double penetration,group sex,1girl,2boys,mmf threesome,hetero,ass,veiny penis,blush,completely nude,vaginal,anal,leg lift,leg up,shoulder to shoulder",
|
||||
"group sex 12": "1girl,gangbang,group sex,orgy,multiple boys,penis",
|
||||
"masturbation 1": "1girl,HDA_female masturbation1girl,HDA_Masterpiece",
|
||||
"masturbation 2": "1girl,HDA_female masturbationV1.2,1girl,HDA_Masterpiece",
|
||||
"masturbation 3": "female ejaculation,front view,spread legs,pussy",
|
||||
"masturbation 4": "masturbation",
|
||||
"masturbation 5": "fingering,schlick,masturbation",
|
||||
"masturbation 6": "1girl,female masturbation,spread legs,pussy,thighhighs,",
|
||||
"masturbation 12": "(female masturbation:1.5),closed eyes,open mouth,orgasm,object insertion,vibrator,dildo,sitting,((looking_at_viewer)),detailed pussy,wet pussy,((pee)),pleasured expression",
|
||||
"masturbation 13": "1girl,spread legs,female masturbation,vibrator,dildo",
|
||||
"masturbation 14": "1girl masturbating with dildo on kitchen table,close-up,dildo,vibrator,female masturbation,closed eyes,open mouth,orgasm,spread legs,presenting pussy,from below,detailed body,sitting,((looking_at_viewer)),wet pussy,((pee)),pleasured expression,full body,",
|
||||
"mating press 1": "mating press,1boy,1girl,hand on penis,(Girl trembling with sexual climax)",
|
||||
"mating press 3": "mating press,1boy,1girl,anus,ass,boy on top,breasts,folded,hetero,knees to chest,lying,nipples,on back,penis,pussy,sex,solo focus,teeth,testicles,uncensored,vaginal,twintails,cum,balls deep,thighhighs,deep penetration,side view,big balls",
|
||||
"mating press 5": "mating press,1girl,1boy,sex,penis,vaginal,testicles,ass,on back",
|
||||
"Oral invitation 1": "1girl,HDA_Oral invitation,HDA_Masterpiece",
|
||||
"paizuri 1": "HDA_Paizuri,1girl,1boy,HDA_Masterpiece",
|
||||
"paizuri 2": "1girl,sucking penis,indoors,1boy,pov,(paizuri),nipples,(fellatio),large breasts",
|
||||
"paizuri 3": "1girl,paitop,1boy,penis,paizuri,boy on top,lying,on bed,pillow,pov,breasts,breast squeeze",
|
||||
"paizuri 4": "paizuri,1girl,looking at viewer,blush,smile,1boy,nipples,collarbone,hetero,sweat,penis,solo focus,choker,tongue,tongue out,huge breasts,head wings,paizuri,breasts squeezed together,penis",
|
||||
"paizuri 5": "1girl,multiple_views,paizuri,breasts,hetero,penis,1boy,paizuri_under_clothes,covered_nipples,large_breasts,cum,blush,breasts_squeezed_together,bangs,braid,cleavage,looking_at_viewer,uncensored,pov,pov crotch",
|
||||
"paizuri 6": "hentai paizuri,2girls,1boy,paizuri,breasts,breasts squeezed together,pov,breast grab,large penis,erection,cum on breasts,ahegao,from side,looking at viewer",
|
||||
"paizuri 7": "1girl,hetero,1boy,breasts,penis,pov,uncensored,large breasts,looking at viewer,open mouth,fang,solo focus,cleavage,no hands,huge breasts,bangs,erection,;d,pov crotch,blush,",
|
||||
"paizuri 8": "1girl,1boy,pov,pov crotch,unaligned breasts,motion lines,breast lift,asymmetrical breasts,motion blur,saliva,saliva trail,smirk,hetero,penis,large breasts,nipples nude,close-up,open mouth,tongue",
|
||||
"paizuri 9": "hetero,spiked hair,uncensored,breasts,black hair,penis,nude,blush,clothed female nude male,sweat,oral,tube top,fellatio,purple pants,crop top,strapless,pants,large breasts",
|
||||
"paizuri 10": "1girl,naked girl,beautiful breasts,chest,penis in the middle of the breasts,beautiful chest,naked,beautiful girl,sweat,full of semen,sweatingchest masturbating penis,penis on chest",
|
||||
"paizuri fellatio": "1girl,paizuri,fellatio",
|
||||
"sex 1": "hentai reverse suspended congress(sex position),full body,1girl,1man,sex",
|
||||
"sex 2": "1girl,solo,proneposition,prone bone,1boy,ass,lying,sex from behind,pillow,pillow hug",
|
||||
"sex 3": "1girl,1boy,fpov photo of man with tattoo,large penis,press pussy,pussy,large breasts,nipples,",
|
||||
"sex 4": "1boy,1girl,censored,clothed_sex,cum,cum_in_pussy,deep_penetration,ejaculation,faceless,faceless_male,female_ejaculation,female_orgasm,fertilization,grabbing_from_behind,head_back,hetero,huge_breasts,impregnation,internal_cumshot,lactation,lmotion_lines,navel,nipples,nude,open_mouth,orgasm,overflow,ovum,penis,pussy,reverse_cowgirl_position,reverse_upright_straddle,sex,sex_from_behind,solo_focus,speed_lines,standing,standing_sex,torso_grab,trembling,uncensored,uterus,vaginal",
|
||||
"sex 5": "1girl,cum,hetero,breasts,penis,1boy,cum in pussy,on back,panties,pussy,panty pull++,lying,navel,blush,solo focus,open mouth,looking at viewer,pillow,patreon username,medium breasts,after sex,after vaginal,thighs,bare shoulders,web address,ass,bed sheet,bare legs,watermark,purple panties,legs up,anus",
|
||||
"sex 6": "1girl,solo,missionarypose,1boy,penis,lying,missionary,vaginal,feet,soles,uncensored",
|
||||
"sex 7": "photo of woman with expose breasts legspreading legs getting missionary vaginal fucked perfect lighting,extreme close up,laying in bed,creampie",
|
||||
"sex 8": "analog style,(look at viewer),cinematic light,(SideMissionayAnal style, 1girl getting her ass fucked by a man),1penis,perfect pussy,anal sex,missionary position,anal,side view",
|
||||
"sex 9": "stomach bulge,belly bulge,deep penetration",
|
||||
"sex 10": "1girl,heavy breathing,sm,penis,vaginal,from side,breast press,hetero,sex",
|
||||
"sex 11": "1girl,HDA_Missionary,HDA_Masterpiece",
|
||||
"sex machine 1": "a photo of a woman being restrained by a metal sex machine and wearing metal breast squeezing machine and breast squeeze and wearing metal collar and a metal rod with a base is inserted into a woman's anus and anal object insertion and arms behind back and spread legs and squatting and tiptoes and two metal rods with bases are spreading her legs and stationary restraints",
|
||||
"sex machine 2": "a photo of a woman being restrained by a metal sex machine and wearing metal breast squeezing machine and breast squeeze and purple breasts and wearing metal collar and a metal rod with a base is inserted into a woman's anus and anal object insertion and arms behind back and spread legs and squatting and tiptoes and two metal rods with bases are spreading her legs and stationary restraints",
|
||||
"sex machine 3": "a photo of a woman being restrained by a metal sex machine and woman restrained on a huge wooden stick connected to the ground and a metal sex machine connected to a huge wooden stick and wearing metal breast squeezing machine and black rope tied to breasts and breast squeeze and vibrator with black cable inserted into woman's vagina and purple breasts and arms up and bound wrists and bound ankles and bound stomach and bound thighs and bound legs and stationary restraints and vaginal object insertion and woman floating in the air",
|
||||
"sex machine 4": "1girl,sex-machine,pussy object insertion",
|
||||
"sex machine 5": "1girl,dildo,sex machine",
|
||||
"Brain Wash Machine": "Brain Wash Machine,head-mounted display",
|
||||
"standing sex 1": "HDA_standingSex,1girl,1boy,HDA_Masterpiece",
|
||||
"standing sex 2": "1girl,(1boy),(sex, standing sex1.2),sex from behind,(standing split),vaginal,huge breasts,bottomless,standing on one leg,thighhighs,blush,open mouth,(orgasm, ahegao),(heavy breathing:1.2)",
|
||||
"standing sex 3": "1girl,breasts,hetero,1boy,penis,nipples,looking at viewer,sex,pov,navel,large breasts,sweat,vaginal,sidelocks,solo focus,uncensored,standing,closed mouth,veins,lips,from above",
|
||||
"standing sex 4": "1girl,breasts,hetero,1boy,penis,nipples,looking at viewer,sex,pov,navel,large breasts,sweat,vaginal,sidelocks,solo focus,uncensored,standing,from above",
|
||||
"standing sex 5": "1girl,1boy,standing sex,doggystyle",
|
||||
"standing sex 6": "(bent over:1.3),(bentover:1.3),(female on tiptoes:1.3),from side,full body,man behind woman,1boy,standing sex,standing doggystyle,hetero,(1girl:perfect face)",
|
||||
"standing split 1": "sspv1,standing split,flexible,leg lift,1girl,leg up,kneepits,split,spread legs,,pussy,anus",
|
||||
"standing split 2": "standing split,standing on one leg,standing,leg up,1girl,solo,",
|
||||
"stealth fingering 1": "stealth_fingering,2girls,1boy,multiple girls,hetero,brown hair,fingering,ass,school uniform,cum,long hair,black hair,skirt,blush,brown eyes,serafuku,braid,cum in pussy,bangs,blunt bangs,looking back,pussy juice,censored,no panties,anal fingering,cumdrip,sweat,pleated skirt,pussy,blurry,ass grab,open mouth",
|
||||
"stealth fingering 2": "stealth_fingering,train interior,skirt,1girl,molestation,hetero,underwear,panties,jewelry,hair ornament,breasts,multiple boys,ass,shirt,thighhighs,purple hair,skirt lift,public indecency,long hair,blush,black skirt,nail polish,hairclip,fingering,clothes lift,pink panties,pussy juice,bracelet,solo focus,large breasts,animal print,leopard print,white shirt,pencil skirt,striped,sweat,from behind,blonde hair,red eyes,looking back,faceless,standing,short sleeves,faceless male,earrings,bangs,miniskirt,parted lips,dark skin,smile,groping,ass grab,lifted by another,pink nails,2boys,arm up,fingernails,dutch angle,red nails,looking at viewer,3boys",
|
||||
"stealth fingering 3": "1girl,1boy,stealthaction,stealth_fingering,hetero",
|
||||
"tentacles sex 1": "1girl,HDA_TentacleSex,HDA_Masterpiece",
|
||||
"tentacles sex 2": "(breast sucking:1.5),tentacles,1girl,breasts,large breasts,tongue,solo,tongue out,nude,blush,armpits,restrained,arms up,open mouth,ahegao,",
|
||||
"tentacles sex 3": "1girl,tentacle_breastgrab,tentacles,grabbing,arms up,<color> tentacles",
|
||||
"tentacles sex 4": "transparent tentacles,glass tentacles,tentacle sex",
|
||||
"thigh sex 1": "masterpiece,best quality,sex,hetero,1girl,Supermodel figure,orgasm,(1men, very tall, absurdly wide and muscular, black hair, ejaculating a cumstring, (man's hands on breasts), large penis, evil grin),thigh sex,standing,pussy,cum dripping,hentai",
|
||||
"thigh sex 2": "1girl,1boy,from below,looking down,looking at viewer,(penis:1.2),thigh sex,train interior,grabbing own breast,sex from behind,huge breasts,cleavage,cum,nipples",
|
||||
"thigh sex 3": "1girl,1boy,thigh sex,penis",
|
||||
"SM": "hetero,penis,injury,ryona,bound,restrained,collar,high heel boots,eyes closed,cum,facial,bukkake,cum no body,volumetric lighting,intricate details,tonemapping,sharp focus,1girl",
|
||||
"anal dildo sitting 1": "anal dildo sitting,dildo,anal,anal object insertion",
|
||||
"anal dildo sitting 2": "(AnalDildoQuiron style),1girl,anal toy,dildo,anal,(anal object insertion)",
|
||||
"anal fingering 1": "1girl,anal fingering,hand in ass,own fingers in anus,anal,1girl,on side,anus,masturbation,",
|
||||
"anal Gape Creampie": "anal gape,creampie,penis,from behind",
|
||||
"anal hook": "(anal object insertion)+++,hook in anal,anal hooked,view from behind",
|
||||
"anal Doggy": "anal Doggy,anus gape",
|
||||
"anal ball wear": "1girl,anal ball wear,anal ball insertion clothing++",
|
||||
"Ass Cameltoe": "1girl,arched back,ass,ass focus,black pantyhose,cameltoe,foreshortening,depth of field,facing away,foreshortening,from behind,hat,highleg,highleg leotard,huge ass,indoors,leaning forward,leotard,pantyhose,sitting,solo,thong leotard,betweenlab,",
|
||||
"ass up 1": "ass up,pants down,pantie pull,lifting head",
|
||||
"ass up 2": "ass up wait",
|
||||
"ass up 3": "up ass,1girl,solo,ass,pussy,top-down bottom-up,from behind",
|
||||
"spread ass 1": "1girl,anus,ass,from behind,spread ass,ass focus,presenting,ass grab,spread anus,bent over,grabbing own ass,top-down bottom-up,hands on own ass",
|
||||
"breast grab 1": "hentai breast grab(sex position),1girl and 1man",
|
||||
"breast grab 2": "1girl,1boy,breastechii++,(1girl,breasts,blush,smile,large breasts,cleavage,nipples,armpits,looking at another,arm up,one breast out),(1boy,behind++,use two hands,grab another breast)++",
|
||||
"breast hold 1": "1girl,1boy,breast hold",
|
||||
"breast on head": "breasts on head,breast rest,large breasts,curvy",
|
||||
"breast out 1": "1girl,one breast out,nipples",
|
||||
"breast out 2": "one breast out,pov across table,1girl,breasts,flashing,tank top,sweat,solo,clothes lift,elbow pads,collarbone,lifted by self,suspenders,counter,bangs,sports bra,closed mouth,breast rest,breasts on table,bra,nose blush,upper body,underwear,sitting",
|
||||
"Breast Press 1": "breast press",
|
||||
"Breast press 2": "breast press,2girls,imminent kiss",
|
||||
"breast massage 1": "1girl,(1man,use two hands grab breast,breast massage,breast press)",
|
||||
"breast sucking 1": "breast sucking,1girl,1man",
|
||||
"breast sucking 2": "1girl,looking at viewer,nipples,areolae,(blush),eyelashes,(topless),lying on bed,sleeping,straddling,1boy,breast sucking,",
|
||||
"breast sucking 3": "1girl,1boy,a male is kissing a girl's tits,tittysuck,",
|
||||
"breast Pillowv": "solo,1girl,bpw,huge breasts,lying,on stomach,sleeping,indoors,underwear only,",
|
||||
"breast jump": "large breasts,nipples,shaking body,bouncing breasts,afterimage,motion lines,asymmetrical breasts,cowboy shot,looking at viewer,naughty face,masterpiece,1girl",
|
||||
"breast on glass 1": "<breasts_on_glass,nipples,breast press,against glass,navel,completely nude,large breasts",
|
||||
"breast squeezed together": "breasts squeezed together",
|
||||
"breast press 1": "1girl,breast press,from above",
|
||||
"breast press 2": "1girl,pov,breast press,lying on person",
|
||||
"air plant sex": "air plant sex",
|
||||
"school sex": "1girl,sole,chizuruchankaihatsunikki,nude,school table,lying on table,detailed table,one leg up,from behind,looking back,nsfw,matured,spread legs,anal,ass,((detailed dilated gaping_vaginal)),[[1man]]],(huge penis, huge penis as wide as arms),(pov),sex from behind,grabbing ass,detailed hands,spread anus,uncensored,orgasm,(mating call),detailed leg,purple hair,long hair,hairclip,purple-red eyes,NTR,large breasts,opened cloth,leaning forward,gaping,open mouth,tongue,requesting sex,showing off anus,detail ass hole,school uniform,green jacket,green pleated skirt,(red_choker),(femdom),enchanting expressionless,enjoying,((zettai ryouiki)),scowling,happiness,(detailed face description),(detailed eyes description),pet girl,nothing happened,legs up shot,lying,focus ass,advanced cg,amazing quality,octane rendering,(detailed pussy),cummings,cumed,suggestive fluid,seductive,alluring,(vomcum),focus ass hole",
|
||||
"pink slime sex": "slime,very wet,pink slime person,covered in pink slime,slime person,made of pink slime,made of dark magenta slime,Pink SlimeGirl,ahegao,heart shaped pupils,motion lines",
|
||||
"slime sex 1": "slime person,made of slime,made of dark magenta slime,slime girl,ahegao,heart shaped pupils,motion lines,nude++,sex++++,full body",
|
||||
"Air oral sex": "Air oral sex",
|
||||
"pushed to the ground": "1girl,sex++,against the floor,full body view,pushed to the ground,laying on stomach++,pinned to the ground)++++",
|
||||
"back view 1": "from behind,all fours,ass,anus,pussy",
|
||||
"back view 2": "Not looking towards the camera,back,upper body,",
|
||||
"back view 3": "1girl,ass,from behind,clothes pull,pants,underwear,looking back,pants pull,anus,pussy,undressing",
|
||||
"toilet 1": "toilet use,panty pull,toilet,restroom,panties above knees,panties below knees,sitting,bottomless,pants pull",
|
||||
"anal licking": "anal licking",
|
||||
"hand on own chin": "arm hold,hand on own chin",
|
||||
"arms up": "global illumination,arms up",
|
||||
"armwrestling": "armwrestling",
|
||||
"hair pussy": "hair pussy",
|
||||
"futa 1": "1girl,penis,futanari",
|
||||
"BANG sitting": "1girl,multiple boys,sitting,indian style,couch",
|
||||
"birth 1": "pussy,pregnant,skinny,birth,1girl,birth white egg",
|
||||
"birth 2": "1girl,full body,sitting on bed,(birth:1.2),child birth,pussy focus++,from below,dramatic pose,no panties,pregnant,belly button++,((M legs:1.4, sitting)),((pussy:1.2, nude )),pussy juice stain,((birth child, baby's head out of pussy)),(heavy breathing:1.4),(perspective:1.1),(groin:1.2),open clothes,midriff,",
|
||||
"body soaping": "body_soaping,side view++,(1boy,back of viewer),(1girl,large breasts,breasts blush on man,breast press)++,indoors,wet,completely nude,faceless male,tiles,wet hair,bathroom,mixed bathing,tile wall,soap bubbles,soap,reach-around,soap bottle",
|
||||
"bondage 1": "sitting,bondage,restrained",
|
||||
"bondage 2": "Frogtie pose,frogtie,bdsm,bondage,bound,bound legs,shibari,rope,spread legs,barefoot,arms behind back",
|
||||
"bondage 3": "1girl,solo,mummification (bound),restrained,gagged,arms at sides,tape,cowboy shot",
|
||||
"bondage 4": "1girl,solo,taihou,bdsm,shibari,ribbon,arms behind back,bound arms,crotch rope,bound legs,kneeling,restrained,",
|
||||
"bondage 5": "rouge,truss up,Binding,girl in box,xiangnv,arms behind back,1girl,solo,ass,buruma,looking at viewer,rope,bdsm,in box,bound,gym uniform,girl in box,from above,solo,",
|
||||
"boobs sandwich1": "1boy,2girls,multiple girls,hetero,sandwiched,girl sandwich,age difference,ffm threesome",
|
||||
"bottle anal": "solo,1girl,nipples,looking at viewer,wine anal,huge ass,wide hips,large breasts,mature female,pussy,squatting,arms behind head,trembling,sweat,steaming body,facing viewer,clitoris",
|
||||
"cum in mouth": "solo,1girl,penis,cum on tongue,open mouth,tongue out,cumdrip,cum on body,form side",
|
||||
"cum on ass": "cum on ass",
|
||||
"cum on body 1 ": "1girl,cum,cum on breasts",
|
||||
"cum on body 2": "cum on,cum on body",
|
||||
"cum on body 3": "1girl,looking at viewer,from above,smirk,(cum, cum on face, cum on breasts, cum on clothes, mouth full of cum:1.1),",
|
||||
"cum on body 4": "1girl,gangbang,multiple multiple penises,cum on,cum on body,",
|
||||
"cum on hair 1": "cmhair,facial,excessive cum,bukkake,cum,cum on body,cum string,cum on hair,1girl,solo,lips,closed mouth,(solo),",
|
||||
"cum on hair 2": "cum on forehead++++",
|
||||
"cum on face 1": "hair cumshot,cum on hair,bukkake,cum,1girl,looking at viewer,midrift,",
|
||||
"cum on face 2": "1girl,1boy (penis, erection),(detailed skin texture, skin pores),kneeling,(cum in mouth, cum, projectile cum:1.1),(cum overflow:1.1),(mouth open, tongue out, cum on tongue),(cum on face, cum on hair, cum on breasts, bukkake :1.2),looking at viewer,Hasselblad photography,sharp focus,",
|
||||
"cum in nose 1": "1girl,uruha rushia,double bun,(cum in nose:1.1),looking at viewer,solo,nose blush,sweat,shiny [black and (blue:0.8) dress:6],",
|
||||
"cum in nose 2": "cum in nose,vacuum fellatio",
|
||||
"cum in pussy": "1girl,a award winning photo of a beautiful Italian model,modelshoot,(toned:0.8),spreading legs,nude,busty,readhead,smile,bokeh,perfect pussy,closeup,(pubic hair),sweating,cum in pussy,anus",
|
||||
"cum on belly": "cum on belly",
|
||||
"cum on cloth": "cum on cloth",
|
||||
"BunnyPose": "bunny pose,bpv1,fake animal ears,1girl,smile,volumetric lighting,upper body",
|
||||
"buttjob 2": "buttjob,1girl,solo focus,1boy,penis,pov,from side,motion lines",
|
||||
"spread pussy 1": "solo,1girl,spread pussy",
|
||||
"spread pussy 2": "1girl,legs up,spread legs,spread pussy,anus,ass,pussy,pussy juice,solo,half updo,braid",
|
||||
"spread pussy 3": "pov hands,ass grab,ass,from behind,pussy,anus,spread pussy,",
|
||||
"spread anus 1": "1girl,spread anus,anus",
|
||||
"spread anus 2": "1girl,anus,ass,huge ass,gaping,ass grab",
|
||||
"fellatio anilingus": "2girls,1man,cooperative fellatio anilingus,",
|
||||
"creampie 1": "pussy,hairy pussy,creampie",
|
||||
"creampie 2": "pussy,creampie,spread legs",
|
||||
"creampie 3": "creamypie",
|
||||
"cross leg press": "(Girl trembling with sexual climax),(nsfw),(motion lines),crosslegpress,boy on top,mating press,1boy,lying,hetero,penis,sex,ass,vaginal,anus,pussy,cum in pussy,cum,testicles,on back",
|
||||
"cunnilingus 1": "(1boy),1girl,(cunnilingus),oral,barefoot,bottomless,breasts,clothes lift,feet,female pubic hair,hetero,large breasts,lying,navel,nipples,on back,on bed,pillow,pubic hair,spread legs,stoes,",
|
||||
"cunnilingus 2": "2girls,multiple girls,yuri,tongue,looking at viewer,cunnilingus,oral,female pov,solo focus,pussy,spread legs,licking",
|
||||
"cunnilingus 3": "2girls,a woman licking another woman's ass,players choice,tongue,pussy,lesbian,ass,saliva,nude,anus,looking at viewer,licking,cunnilingus",
|
||||
"cunnilingus 4": "1boy,1girl,standing cunnilingus,bottomless,pussy,closed eyes,open mouth,cowboy shot",
|
||||
"cunnilingus 5": "a photo of (a young woman is sticking out her beautiful tongue to taste and lick the beautiful vulva of another woman lying with her spread legs) ,(photorealistic:1.4),(Realistic:1.4),wet pussy,pussy juice,parted lips,completely naked,pubic hair,(bed),bedroom,tongue out,perfect thighs,ass,nipples,Comfortable expression and eyes closed",
|
||||
"2 girls double Dildo": "2girls,all fours,anal,anal object insertion,ass,ass-to-ass,dildo,kneeling,object insertion,on all four,",
|
||||
"feet pose 1": "1girl,feet pose,soles,crossed legs,",
|
||||
"feet pose 2": "1girl,sitting,front view,show teos,stretch legs,foucs on soles of feet,spread legs",
|
||||
"feet pose 3": "1girl,foot up",
|
||||
"feet pose 4": "<barefoot,feet,foot focus,toes,toenail polish",
|
||||
"feet pose 5": "phpose,1girl,apron,black hair,black pantyhose,blue eyes,feet,foot focus,hair bun,long hair,no shoes,pantyhose,sitting,smell,soles,steam,table,toes,solo,black eyes,maid,couch,maid apron,best quality,",
|
||||
"feet pose 6": "phpose,1girl,feet,foot focus,no shoes,pantyhose,sitting,smell,soles,steam,table,toes,solo,couch,<lora:phpose-000011r:0.8>,",
|
||||
"feet pose 7": "realistic style,analog photography,polaroid,1girl,sitting on bed,showing her feet to the viewer,pov,presenting feet,feet focus,",
|
||||
"open feet 1": "spread legs,(Girl trembling with sexual climax)",
|
||||
"Kneeling": "Kneeling",
|
||||
"pee 1": "peeing",
|
||||
"pee 2": "yellow pee,peeing,ahegao,motion line",
|
||||
"pee 3": "1girl,peeing,goldenjuice",
|
||||
"pee 4": "1girl,nude,peeing,squatting,river,touching vagina,",
|
||||
"pee 5": "peeing on penis,hetero,1boy,penis,pussy,1girl,peeing,pee,solo focus,spread legs",
|
||||
"pee 6": "1girl,solo(peeing:1.5),spread legs,",
|
||||
"diaper": "1girl,diaper,cowboy shot,hand on hip,",
|
||||
"dildo gym": "1girl,sissy guys lifting weights while a dildo is inserted in her ass",
|
||||
"dildo Riding": "ass,from behind,no panties,bottomless++,dildo",
|
||||
"dildo": "dildo,masturbation",
|
||||
"dildo bike": "1girl,dildo on bike,squating on dildo,side view,motion lines",
|
||||
"drowning": "1girl,drowning,splashing,waves,water,struggling,(upper body,floating,swimming,ocean)",
|
||||
"sex on desk": "1girl,sex,hetero,lying,sex,deep penetration,(large insertion:1.2),on desk,top view,",
|
||||
"Electric Fan Lifting Clothes 1": "electric fan,1girl,wind,wind pussy,clothes lift,open mouth,from below,no panties",
|
||||
"Electric Fan Lifting Clothes 2": "(electric fan:1.2),indoors,1girl,standing,white dress,barefoot,(panty pull:1.3),lifted by self,pussy,closed eyes,large breasts,pussy",
|
||||
"Electric Fan Lifting Clothes 3": "front side view,bright and saturated colors,((beautiful 1girl have detailed face)),full body,(lower back and hip:1.5),((bottomless:1.4)),arms,ass grabbing,(head and knees on floor,bottom up,kneeling:1.5),eyes,(electric fan behind:1.3),pussy",
|
||||
"erotic_pose_v2_legs_open": "1girl,sitting girl,sitting girl opening her legs,you can see her vagina and anus,beautiful girl,open leg,vagina,anus,beautiful leg,big breast,beautiful breast,leg open in V,naked,pink breast,detailed vagina",
|
||||
"buttjob": "1girl,1boy,erection under clothes,buttjob over clothes,penis,buttjob",
|
||||
"exhibitionism 1": "1girl,exhibitionism,open coat",
|
||||
"exhibitionism 2": "1girl,exhibitionism,public indecency,flashing,naked coat",
|
||||
"expose panty": "1girl,accidental exposure panties",
|
||||
"face in ass": "(1girl,standing),(1boy,Kneel down,face in ass)",
|
||||
"stand with man 1": "1girl,breasts,looking at viewer,1boy,navel,nipples,hetero,nude,breasts,penis,pubic hair,uncensored,erection,abs",
|
||||
"stand with man 2": "multiple penises,uncensored,2boys,cum,penis,multiple boys,hetero,looking at viewer",
|
||||
"Feet licking": "(feetlicking),large breasts,thick thighs,1boy,1girl,sweat,feet,foucs on soles",
|
||||
"stuck in wall 1": "stuck in wall,pussy,anus,ass,through wall,stuck,body less,low body,half body",
|
||||
"stuck in wall 2": "Trapped_In_Wall,Stuck in wall,1girl,solo,low body",
|
||||
"stuck in wall 3": "1girl,solo,nipples,stuck,through wallahoge,cropped legs,picture frame,price tag",
|
||||
"stuck in wall 4": "1girl,half body,glory wall,photo_(object),ass,ass focus,head out of frame",
|
||||
"stuck in wall 5": "1girl,half body,stuck,through wall,glory wall",
|
||||
"fisting 1": "fisting,female_fisting,vaginal_object_insertion,object_insertion,fingering,yuri,2girls,multiple_girls",
|
||||
"fisting 2": "1girl,self fisting sex",
|
||||
"futa pov": "2girls,futanari pov,sex,pussy",
|
||||
"futa fwm": "1girl,1boy,futa with male,futa on male,penis,motion lines,anal,sex,futanari,hetero,otoko no ko,femdom,pegging,large breasts,sex from behind,nude,simple background,trembling,twitching",
|
||||
"spitroast 1": "1girl,2boys,spitroast",
|
||||
"spitroast 2": "1girl,2boys,fellatio,sex from behind,mmf threesome,double penetration,spitroast,",
|
||||
"spitroast 3": "1girl,reverse cowgirl position,multiple penises,sex,2boys,multiple boys,hetero,pussy,threesome,fellatio,male pubic hair,girl on top,spitroast",
|
||||
"spitroast 4": "spitroast,sex,multiple boys,1girl,2boys,multiple penises",
|
||||
"spitroast 5": "1girl,2boys,group sex,spitroast,fellatio,oral,sex,threesome,2boys,sex from behind,mmf threesome,double penetration,bent over,standing,from side",
|
||||
"spitroast 6": "HDA_spitroast,1girl,2boys,HDA_Masterpiece",
|
||||
"Girl Feast": "1girl,solo,((patchouli knowledge)),lying_on_back,steam,meat,noodles,egg,steak,beef,food on body,collarbone,from above,nyotaimori,blush,embarrassed,steaming body,steam",
|
||||
"girl fountain": "1girl,drinking fountain,head down,open mouth,metal washbasin,press button,park",
|
||||
"girl washing machine": "(((extra closeup on face))),(((fisheye lens))),putting clothes into washing machine in laundry,ribbon,twintails,longhair,tie,school uniform,sweat,shy,blush,mature figure proportion",
|
||||
"goblin gangbang ": "1girl,goblin gangbang,multiple boys",
|
||||
"hand in panties 1": "1girl,1boy,(hetero:1.3),arms behind head,hand in panties,spread legs,sitting,panties",
|
||||
"have to pee 1": "1girl,have to pee,hand between legs,leaning forward",
|
||||
"have to pee 2": "have to pee,peeing self",
|
||||
"head between breasts": "1girl,1boy,face to breasts,head between breasts",
|
||||
"hentai ass up": "1girl,ass focus,from behind,spread anus,cum in ass,cumdrip,looking back",
|
||||
"hentai xray": "internal_cumshot,x-ray,happy sex,penis",
|
||||
"high heels danglefinal": "1girl,high heels,sitting crossed legs",
|
||||
"high kick": "solo,kicking",
|
||||
"hogtied": "1girl,looking at viewer,nude,looking down,hogtied,brown rope,belt,barefoot,on stomach,on grey carpet,white walls,side view,",
|
||||
"horse fuck": "1girl,solo,standing,bent over,sex toy,tiptoes,artificial vagina,futanari,huge penis,trembling,motion lines,breast press,ejaculation,masturbation,projectile cum,blush,open mouth,cum,tongue out,bent over,ejaculation,excessive cum,",
|
||||
"hug penis": "1girl,hug penis,huge penis,oversized penis",
|
||||
"X-ray": "1girl,sex,pussy,cross-section,internal_cumshot,x-ray",
|
||||
"Hug And Suck": "hands,1girl,1boy,fellatio,deepthroat,oral,hug",
|
||||
"instance loss": "instant-loss,1girl,looking at viewer,cowboy shot,hetero,1boy,sex from behind,vaginal,penis,trembling,pov,heart,motion lines,",
|
||||
"Invisible penis 1": "1girl,(invisible_penis:1.5),sex,pussy object insertion",
|
||||
"imminent penetration": "1girl,1boy,penis,imminent penetration,lying,on back,spread legs",
|
||||
"kabedon 1": "1girl,1boy,kabedon against wall",
|
||||
"kabedon 2": "1girl and 1boy,kabedon pov",
|
||||
"lastpenet": "1girl,1boy,man and woman having sex,young boy,penis in vagina,missionary,facing each other,looking at each other,",
|
||||
"leaning forward hands on own knees": "1girl,leaning forward,hands on own knees",
|
||||
"enhance bent over": "solo,cowboy shot,looking back,1girl,bent over,from below,hands on own knees,back,light rays,lens flare,",
|
||||
"legs up missionary": "1girl,pov,missionary,legs up,legs grab,from above,wide spread legs,reaching",
|
||||
"legs up 1": "1girl,leg up,cowgirl view,leg foucs",
|
||||
"legs up 2": "1girl,legs up,legs together,lying",
|
||||
"legs up 3": "1girl,solo,raised leg invitation",
|
||||
"lesbian cunnilingus": "2girls,lesbian cunnilingus,cunnilingus,pussy",
|
||||
"lick gun": "1girl,handgun,lick gun",
|
||||
"speculum insertion 1": "1girl,spread legs,speculum insertion,metal speculum",
|
||||
"speculum insertion 2": "1girl,blush,spread legs,speculum,anus,pussy,spread pussy",
|
||||
"pregnant-x-ray": "1girl,1boy,pregnant,pregnant-x-ray,x-ray,penisincervix",
|
||||
"massage 1": "hand,massage,breasts,hetero,1girl,1boy,freckles,towel,lotion,",
|
||||
"massage 2": "nuru massage,(straddling:1.1),lying on person,girl on top,1boy,see-through,big breasts,(air mattress:1.1),1girl,lotion,shiny,feet,looking at viewer",
|
||||
"Mirror Sex": "nude,Mirror Sex,1girl,1boy,doggystyle,anal,large insertion,close up,indoor,on the floor,pov,",
|
||||
"mouth pull": "1girl,index finger inside mouth,one hand pulling mouth,",
|
||||
"Arm Grab Sex": "1girl,1boy,arms grab,sex from behind",
|
||||
"head Between Thighs": "1girl,1boy,head between thighs,asphyxiation,thick thighs,",
|
||||
"ass on glass 1": "1girl,against glass,ass on glass,from behind,wet",
|
||||
"ass on glass 2": "1girl,solo,ass,ass focus,thigh strap,looking at viewer,sitting on glass,smile,huge ass,closed mouth,skindentation,looking back,shorts,v,hair between eyes,from behind,glass,ass on glass,panties",
|
||||
"Multiple Asses": "ass,from behind,multiple girls",
|
||||
"multiple insertions 1": "1girl,multiple insertions,ass,gangbang,triple penetration",
|
||||
"multiple insertions 2": "1girl multiple insertions, multiple penises,front view",
|
||||
"multiple insertions 3": "1girl,multiple insertions,ass,gangbang,multiple penetration,penis,cowgirl view,",
|
||||
"multiple insertions 4": "1girl,multiple insertions,ass,gangbang,multiple penetration,penis,pussy foucs,m legs",
|
||||
"multiple penises": "1girl,(multiple penises:1),(surrounded:1),(too_many:1),(multiple boys:1),face,close-up,penis on face",
|
||||
"monster grab 1": "1girl,facePunch,monster,kaijuu,restrained,grabbing from behind",
|
||||
"monster grab 2": "1girl,facePunchFull,monster,alien,kaijuu,restrained,grabbing from behind,(punching,motion blur),full body,standing,",
|
||||
"monster grab 3": "1girl,facePunchFull,2monsters,alien,kaijuu,restrained,grabbing from behind,(punching,motion blur),full body,standing,stomachKick,monster,(kicking,motion blur),breastPunch",
|
||||
"lying": "1girl,(nimod),full body,big tits,bed,thick thighs",
|
||||
"nipple pull 1": "1girl,nipple pull",
|
||||
"nipple pull 2": "1girl,1boy,nipple tweak,pull nipple,topless,front view",
|
||||
"nipple chain 1": "nipple chain",
|
||||
"nipple cut out 1": "1girl,nipple cutout,clothing cutout",
|
||||
"nipple heart piercing": "1girl,nipple piercing",
|
||||
"nipple Slip": "1girl,nipple slip",
|
||||
"nursing": "nursing handjob,breast sucking",
|
||||
"object masturbation 1": "1girl,vaginal object insertion,masturbating with banana,vaginal object insertion,",
|
||||
"object masturbation 2": "1girl,vaginal object insertion,masturbating with banana,anal object insertion,",
|
||||
"object masturbation 3": "1girl,vaginal object insertion,masturbating with banana,clitoral stimulation,",
|
||||
"object masturbation 4": "1girl,vaginal object insertion,masturbation through clothes,",
|
||||
"object masturbation 5": "1girl,vaginal object insertion,masturbating with bottle,vaginal object insertion,",
|
||||
"object masturbation 6": "1girl,vaginal object insertion,masturbating with plastic bottle,anal object insertion,",
|
||||
"object masturbation 7": "1girl,vaginal object insertion,masturbating with glass bottle,anal object insertion,",
|
||||
"object masturbation 8": "1girl,vaginal object insertion,masturbating with zucchini,anal object insertion,",
|
||||
"object masturbation 9": "1girl,vaginal object insertion,masturbating with carrot,anal object insertion,",
|
||||
"object masturbation 10": "1girl,vaginal object insertion,masturbating with popsicle,anal object insertion,",
|
||||
"object masturbation 11": "1girl,vaginal object insertion,masturbating with leek,crotch rub,",
|
||||
"object masturbation 12": "1girl,vaginal object insertion,masturbating with eggplant,crotch rub,",
|
||||
"object masturbation 13": "1girl,vaginal object insertion,masturbating with daikon,",
|
||||
"object masturbation 14": "1girl,vaginal object insertion,masturbating with corn,",
|
||||
"object masturbation 15": "1girl,vaginal object insertion,masturbating with candy cane,",
|
||||
"object masturbation 16": "1girl,vaginal object insertion,masturbating with lollipop,",
|
||||
"object masturbation 17": "1girl,vaginal object insertion,masturbating with mechanical pencil",
|
||||
"object masturbation 18": "1girl,vaginal object insertion,masturbating with pen,",
|
||||
"object masturbation 19": "1girl,vaginal object insertion,masturbating with tube,",
|
||||
"object masturbation 20": "1girl,vaginal object insertion,masturbating with stick,>",
|
||||
"object masturbation 21": "1girl,vaginal object insertion,masturbating with wand,",
|
||||
"object masturbation 22": "1girl,vaginal object insertion,masturbating with recorder,",
|
||||
"object masturbation 23": "1girl,vaginal object insertion,masturbating with flute,",
|
||||
"object masturbation 24": "1girl,vaginal object insertion,masturbating with microphone,",
|
||||
"object masturbation 25": "1girl,vaginal object insertion,masturbating with katana saya,",
|
||||
"object masturbation 26": "1girl,vaginal object insertion,masturbating with shovel,",
|
||||
"object masturbation 27": "1girl,vaginal object insertion,masturbating with broom,riding broom,",
|
||||
"object masturbation 28": "1girl,vaginal object insertion,masturbating with staff,riding staff",
|
||||
"object masturbation 29": "1girl,vaginal object insertion,masturbating with sword,",
|
||||
"object masturbation 30": "1girl,sankaku,traffic cone,squatting on sankaku,pussy object insertion",
|
||||
"onahole Design": "inner pussy,1girl,standing,multiple views,uterus,x-ray,",
|
||||
"slime onahole 1": "(dynamic pose:0.4),vibrant colors,onahole personality,personality excrement,slime onahole,1girl,on floor,",
|
||||
"slime onahole 2": "vibrant colors,onahole personality,legsless onahole,slime onahole,armsless onahole,colored skin,pink skin extreme detailed,highest detailed,centered,",
|
||||
"one finger self covering nipples": "1girl,holding phone,covering nipples,covering crotch,mirror,reflection,",
|
||||
"open coat": "1girl,open coat,A professional athlete competing in a sports event while engaging in explicit acts with a fellow competitor on the field,running",
|
||||
"open bra 1": "1girl,open bra,",
|
||||
"open bra": "1girl,front_hook_bra,nipples",
|
||||
"Orcs sex": "cinematic lighting,ambient occlusion,shadow,orc,1girl,1boy,hentai breast grab(sex position),grabbing from behind,breast grab,full body,standing from behind,(arms up:1.1),savannah,looking at viewer,open mouth,ahegao,rolling eyes,sweat,cum,",
|
||||
"ossan": "(1girl,sweat,nipples,breasts,large breasts),(1man,ossan,ugly man,fat man,hetero,muscular,nude,bald,blush,old man,old)",
|
||||
"oyakodon 1": "2girls,1boy,looking at viewer,blush,open mouth,bangs,navel,nipples,hetero,lying,penis,pussy,spread legs,sex,on back,huge breasts,vaginal,dirndl,",
|
||||
"oyakodon 2": "1boy,2girls,oyakodon_mf++,looking at viewer,blush,open mouth,bangs,navel,nipples,hetero,lying,penis,pussy,spread legs,sex,on back,huge breasts,vaginal,dirndl,",
|
||||
"Panties around ankles": "1girl,panties around ankles,panties pulled down,one pair of panties around ankles",
|
||||
"Panties around Leg": "1girl,panties around one leg,pussy",
|
||||
"panties on breasts": "1girl,panties on breasts",
|
||||
"panties pulled aside fuck": "1girl,1boy,panties pulled aside fuck++,panties pulled aside,",
|
||||
"paw pose": "paw pose",
|
||||
"nipple tweak": "1girl,tweaking own nipple,pov,nipple tweak,grabbing own pectoral",
|
||||
"peeking out upper body": "1girl,peeking out upper body",
|
||||
"Pee on Her": "1girl,1boy,pee on her",
|
||||
"penetration gesture": "penetration gesture,upper body,1girl,blush,naughty face,nervous smile",
|
||||
"penis over eyes": "1girl,penis over eyes,1boy,penis on face",
|
||||
"penis under another's clothes": "1boy,1girl,penis under another's clothes,swimsuit,penis to breast",
|
||||
"penis on face 1": "1girl,penis on face,large penis,uncensored,penis awe,cum on face,facial,ahegao,blush",
|
||||
"penis on face 2": "1girl,penis,solo focus,cheek poking,hetero,penis on face,poking,one eye closed,penis awe,erection,cheek squash,large penis,cheek press",
|
||||
"Penis Milking Machine 1": "1futa:1.4,futanari,solo,solo focus,nude,glans,(penis milking machine),penis milking,cum milking,(tube:1.2),milking machine,erection,penis,breasts,ahegao,open mouth,blush,laboratory,science fiction,shackles,",
|
||||
"penis shadow": "1boy,1girl,breasts,bright pupils,cleavage,apricot eyes,hetero,french braid,parted lips,penis awe,(penis shadow:1.3),steaming body,sweat,upper body,wide-eyed",
|
||||
"penis awe 1": "1girl,solo,penis,1boy,smelling,<lora:torogao_v3-000010:0.6>,full-face blush,penis on face,large breasts,",
|
||||
"penis awe 2": "penis awe,1girl,upper body,large breasts,surprised,1boy,veiny penis,huge penis,",
|
||||
"penis awe 3": "1girl,solo,penis awe,veiny penis,huge penis,",
|
||||
"penis awe 4": "1girl,pov crotch,(amazing penis:1.3),handjob,very long penis,cheerful,wavy mouth,(looking at penis:1.3),shiny skin,naughty,",
|
||||
"penis bigger than body": "1girl,penis bigger than body,large breasts",
|
||||
"penis in thighhigh": "1girl,1boy,penis in thighhigh",
|
||||
"penis on ass 1": "1boy,penis,pov,penis on ass,ass grab,1girl,all fours,looking back,against wall,ass focus,",
|
||||
"penis on ass 2": "1girl,1boy,penis on ass pov",
|
||||
"penis on breasts": "penis_on_breasts++,(1boy),(large penis:1.5),1girl,looking at penis,saliva,tongue_out,heart-shaped_pupils,naughty face,solo focus,penis awe,",
|
||||
"penis on head": "1girl,solo,large breasts,white background,mature female,1boy,testicles,large penis++,penis on head,arms behind back,kneeling,looking at viewer",
|
||||
"penis on stomach": "1girls,lying,on back,1boy,penis,penis on stomach,solo focus,spread legs,pov,legs up",
|
||||
"penis worship": "penis_worship,(1boy),(huge_penis:1.5),(long_penis:1.2),veiny_penis,(veiny_testicles),1girl,looking_at_penis,saliva,tongue_out,heart-shaped_pupils,naughty face,hetero,mole,symbol-shaped_pupils,(testicles),solo_focus,penis_awe,",
|
||||
"pet play 1": "1girl,solo,all fours,spread legs,leg up,pet play",
|
||||
"pet play 2": "1girl,solo,leg up,spread legs,all fours,large breasts,paw pose,squatting",
|
||||
"pet Play 3": "cum on face,all fours,open mouth,drooling,saliva,from side,looking at viewer",
|
||||
"pet Play 4": "1girl,stroll with pet",
|
||||
"Piggy back Ride": "perfect anatomy,2girl,piggyback,sitting,sitting on another,all fours,girl on all fours,happy,smile,living room,",
|
||||
"piggy back": "1girl,1boy,carrying,piggyback",
|
||||
"pile drive 1": "1girl,upside-down,1boy,1girl,sex,penis,medium breasts",
|
||||
"pile drive 2": "1girl,1boy,hetero,penis,pussy,pov,spread legs,hands grabbing legs",
|
||||
"pile drive 3": "upside-down,piledriver (sex)",
|
||||
"pillow 1": "1girl,pillow hug,holding pillow,yes-pillow",
|
||||
"pillow 2": "indoors,bedroom,on bed,pillow hug,yes-pillow,1girl,solo,embarrassed,full-face blush,white panties,cameltoe,covering mouth,covered navel,sitting,spread legs,",
|
||||
"pillow humping": "1girl,crotch rub,pillow humping",
|
||||
"cheek pull": "1girl,pov,cheek pull",
|
||||
"piss drinking 1": "1girl,1man,A man's penis is spraying yellow urine from the glans into the woman's mouth from the corner of the camera",
|
||||
"Piss drinking 2": "1 boy,1 girl,piss,pee,censored dick,piss stream in mouth,piss dripping from mouth,sitting,1 piss streams,tongue out,covered in piss",
|
||||
"piss drinking 3": "a naked woman pissmouth on all fours D,a man is peeing into her mouth,sharp focus",
|
||||
"pleasure wheel": "thighhighs,cleavage cutout,closed mouth,athletic,collarbone,(linea alba:1.2),(abs:0.75),navel,(Tears, complete nude, bare legs, barefoot:1.2),nice hands,perfect hands,(Beautiful Finger),BREAK (pleasure_wheel, sex machine, motion blur:1.4),machine,bdsm,bound,bondage,restrained,(pink nipples, inverted nipples, breasts, nipples,spread legs,pussy juice,clitoris,(bouncing breasts, unaligned breasts:1.2),(perfect anatomy),Volumetric Lighting,",
|
||||
"Peep hole Shower": "1girl,shower,peephole,Peep hole Shower",
|
||||
"penis on ass": "1boy,1girl,penis on ass",
|
||||
"pole between breasts": "1girl,(photorealistic:1.4),1girl,stripper pole,between breasts,grabbing own breast,breasts squeezed together,nude,completely nude,skinny",
|
||||
"ponyplay": "ponyplay,1girl,all fours,harness,bit gag,horse tail anal plug,drooling,bdsm,CoralVanguard,",
|
||||
"penis on pussy": "1girl,1boy,penis on pussy",
|
||||
"popsicle": "1girl,blush,steam,popsicle suck,pov,hands,feeding,from above,open mouth,tongue out",
|
||||
"portio massage": "(1girl,lying),1boy,open mouth,blush,orgasm,portio massage,electric massager,vibrator,hitachi magic wand,sex toy,trembling,arched back,from side,on back,solo focus",
|
||||
"shenhou pose": "1girl,lying,penis,2boys,(head back:1.3),throat swab,spread legs,head tilt,huge penis,Deep throat,asphyxia,head out of frame,huge breasts,from above,nude,lips",
|
||||
"clothes lift": "1girl,clothes lift,from below,",
|
||||
"panties aside 1": "1girl,clothing_aside,sex,pose clothing_aside sex,large penis,hetero,pantyhose,panties",
|
||||
"panties aside 2": "1girl,clothing_aside,pose clothing_aside,pantyhose,panties,torn,anus,pussy,looking back",
|
||||
"jinjuli sex": "1girl,1boy,anal sex,penis in ass,big penis,vaginal object insertion,vaginal,imminent vaginal",
|
||||
"mirror 1": "1girl,mirror",
|
||||
"mirror 2": "1girl,mirror,huge breasts,holding phone",
|
||||
"showering": "pose partially visible vulva,partially visible vulva,1girl,breasts,navel,wet,from below,large breasts,blush,solo focus,thighs,shower head,bangs,looking at viewer,closed mouth,showering,scrunchie,hair ornament,looking down,partially visible vulva,groin,bare shoulders,hair scrunchie,wedgie,cowboy shot,stomach",
|
||||
"standing leg up 1": "1girl,looking down,skirt,standing on one leg,huge breasts,from below,kicking,pantyhose,cleavage,shoes,",
|
||||
"standing leg up 2": "1girl,standing on one leg,panties,cameltoe,looking down,from below,huge breasts,leg up,spread legs,pussy_focus,underwear,",
|
||||
"Pouring 1": "pouring milk,milk mustache,milk bottle",
|
||||
"Pouring 2": "pouring on to self,pouring,pouring onto self,milk,bottle,milk bottle,holding,upper body,holding bottle,cleavage",
|
||||
"multiple views sex": "3girls,solo foucs,pov multiple_views_sex,anime,1girl,breasts,nipples,penis,paizuri,hetero,1boy,censored,blue eyes,hat,pussy,large breasts,tattoo,sex,ass,between breasts,gloves,necktie,anus,mosaic censoring,smile,grey hair,navel,looking at viewer,hair over one eye,earrings,mole,jewelry,shirt,elbow gloves,short hair,vaginal,multiple views,garrison cap,white shirt,blue headwear,bottomless,fingerless gloves,black gloves,sleeveless shirt,blush,blue necktie,closed mouth,sleeveless,bare shoulders,bangs,mole on breast,straddling,necktie between breasts,bridal gauntlets,heart,collared shirt,girl on top,long hair,white background,arm under breasts",
|
||||
"panties view": "from below,ass focus,long dress,Striped panties,standing,pantyhose,cum",
|
||||
"bath": "1girl,solo,breasts,looking at viewer,blush,smile,cleavage,collarbone,completely nude,nude,water,wet,partially submerged,bath,bathtub",
|
||||
"From Below": "1girl,large breasts,sagging breasts,blush,pov,from below,naughty face",
|
||||
"arm hug 1": "pov_arm_hug pov,1girl,breasts,looking at viewer,blush,smile,open mouth,1boycollarbone,:d,sidelocks,outdoors,solo focus,collar,shadow,from above,looking up,downblouse",
|
||||
"arm hug 2": "1girl,solo,arm hug,smile,spoken heart,looking up,(1boy,pov,head out of frame)",
|
||||
"choke 1": "<lora:pov_strangling:0.8>,pov_strangling,1girl,1boy,(pov:1.2),tears,solo focus,open mouth,blush,smirk,from above",
|
||||
"choke 2": "((((ultra illustrated style:1)))),strangling,1girl,breasts,bra,1boy,blush,open mouth,navel,bed sheet,hair between eyes,cleavage,implied sex,facing viewer,spread legs,bottomless,collarbone,on bed,ahoge,",
|
||||
"choke 3": "1girl,(1boy choke girl's neck),",
|
||||
"torso grab": "1girl,torso grab,pov hands,glasses,1boy,grabbing,surprised",
|
||||
"Projectile_Cum": "1girl,solo,projectile cum,ejaculation,cum,cumming,penis,erection,spread leg",
|
||||
"squeeze milk": "1girl,lactation into cup,cup,milk,apron,breast squeeze,one breast out,(projectile lactation:1.2)",
|
||||
"Stripper 1": "1girl,blushing,full body picture,stripper_girl,pole dancing in a strip_club_venue,(covered in dollar bills:1.35),watched by a crowd of men wearing suits,in a strip_club_venue,a bar with a lot of lights and a lot of chairs,",
|
||||
"Stripper 2": "full body,stripper pole,pole,pole dancing,jewelry,bracelet,pantyhose,thighband pantyhose,fishnets,high heels,ass,looking at viewer,looking back,solo focus,crowd,leaning forward,from behind",
|
||||
"purelove pose": "2boys,1girl,hetero,penis,sex,kiss,uncensored,nipples,vaginal,closed_eyes,pussy,cum,interlocked_fingers,holding_hands,nude,threesome,multiple_boys,cum_in_pussy,leg_lift",
|
||||
"pussy show 1": "1girl,pussy show",
|
||||
"pussy show 2": "1girl,fingers pull,spread pussy",
|
||||
"pussy show 3": "((1girl)),bed,lying,on back,from front,blush,brown eyes,close-up,uncensored,spread legs,pussy juice,real spread pussy,",
|
||||
"armpit licking": "1girl,1boy,licking armpit",
|
||||
"condom in mouth": "used condom,condom in mouth,warm lighting,rolling eyes,",
|
||||
"covering breasts": "1girl,covering breasts",
|
||||
"reverse upright straddle": "1boy,1girl,reverse upright straddle,penis,vaginal,completely nude,open mouth,nose blush,tongue out,breast grab,arms behind back",
|
||||
"head between thighs": "realistic,revscs,1girl,1boy,girl lying on a man,(man's head between thighs)+++,RAW photo,anal,side view,kneeling,",
|
||||
"Riding Machine": "1girl,riding machine",
|
||||
"riding sex": "1girl,real,photoshoot,realistic,atmospheric scene,ridingsexscene,solo,nipples,breasts,realistic,closed eyes,nude,open mouth,medium breasts,arms up,from below",
|
||||
"rim job 1": "1girl,solo focus,saliva trail,hetero,1boy,interracial,uncensored,",
|
||||
"Round Breasts": "1girl,round breasts,large breasts",
|
||||
"licking face": "1girl,1boy,licking face",
|
||||
"licking ear": "1girl,1boy,licking ear",
|
||||
"sex xray": "sex x-ray,[1girl: uterus , (uterine wall:1.3), sexing, nude , female orgasm, happy sex, ahoge , pussy, drooling, thigh sex, looking back, girl on top ],[1boy :penis, vaginal ,ejaculation, cum in pussy, sex from behind, doggystyle, boy on down ],from behind,",
|
||||
"game playing sex": "1girl,sex,sex from behind,lying,on stomach,ass,prone bone,on bed,trembling,motion lines,handheld game console,nintendo switch,holding handheld game console,1boy,hetero,head out of frame,solo,solo focus,cum,cum on ass,abs,doggystyle,looking at object,clothed sex",
|
||||
"game playing sex 2": "holding,holding handheld game console,nintendo switch,bottomless,indoors,on bed,simple background,emotionless sex,distracted",
|
||||
"shared umbrella": "1boy,1girl,:d,black umbrella,holding,holding umbrella,school uniform,open mouth,pants,rain,school uniform,(shared umbrella),skirt,smile,sweater vest,storm,rain,",
|
||||
"Shiny Oiled Skin": "(shiny skin:1.1),oiled skin,lying,from above,close-up,pussy,1girl,high contrast,bright sunlight,parted lips,orgasm,sweat,blush,looking at viewer,",
|
||||
"shirt lift 1": "((full body portrait)),1girl,(lifts clothes, tightens blouse with mouth),",
|
||||
"shirt lift pants pull": "1girl,shirt lift,pants pull,bra,panties",
|
||||
"skirt lift 1": "1girl,skirt lift",
|
||||
"Skirt lift 2": "from below,pantyshot,1girl,1boy,pov hands,skirt,underwear,skirt lift,lifted by another,solo focus,pleated skirt,blush,shirt,white shirt,cowboy shot,standing,ass visible through thighs,scared expression,open mouth,",
|
||||
"shirt tug": "1girl,shirt,naked shirt,shirt tug,",
|
||||
"cross leg": "sit cross leg,sitting",
|
||||
"sitting on face": "1girl,[(1boy,face,lying,licking pussy,full body,eyes close)],sitting_on_face,facesitting",
|
||||
"slap mark 1": "1girl,slap mark,from behind",
|
||||
"slap mark 2": "((((ultra illustrated style:1)))),spanked,slap mark,1girl,solo,ass focus,from behind",
|
||||
"slapping with breast": "1girl,1boy,bouncing breasts,motion lines",
|
||||
"sleep 1": "1girl,1man,wpega,Woman and man sleeping embraced,large breasts,sleeping,smile,(closed eyes),hug,bed",
|
||||
"sleeping sex 1": "1girl,1boy,sleeping1,pussy,penis,from above,",
|
||||
"sleeping sex 2": "1girl,unconscious,closed eyes,sleeping,((cum on face)),cum in mouth,cum on hair,cum on breast,lying,erection,1boy,male masturbation,penis,pov_penis,",
|
||||
"Smelling Self": "1girl,Smelling Self",
|
||||
"breast smothering": "1girl,1boy,smother,breast smothering",
|
||||
"ass smothering": "1girl,1boy,smother,sit on face,ass smothering",
|
||||
"snow nude": "(snow all over body),(pale skin, blush),cold,winter,freezing (nude) and barefoot woman sitting in deep snow among the street,spread legs,pussy,feet,open mouth,exhaling,natural lighting,scenery,",
|
||||
"spider web": "1girl,silk,cocoon,spider we",
|
||||
"spraying breast milk": "(spraying breast milk from both nipples:1.15),(Woman is spraying breast milk from both nipples to the camera),(breast milk on camera:1.25),(breast milk is dripping from the camera:1.25),breast milk,lactation,lactating,breast milk,breast milk dripping,bend over,(breast close-up),(eyes closed and comfortable expression),blurry foreground,(motion blur),(detailed beautiful face),(8k Incredibly absurdres raw photo of a beautiful 18 year old young Japanese idol:1.2),(breast milk on body,wet body),depth of field,erect nipples,lips,(pov),[from below|from front],breasts,open mouth,areola,nipples,solo focus,indoors,completely nude,(masterpiece:1.2) and (best quality:1.2) and (photorealistic:1.4) and (Realistic:1.4) and Detailed Skin Textures and detailed skin pores and high skin detail,bedroom background",
|
||||
"spread legs in car": "Spread Legs in Car,dside,1girl,solo,in the car,car interior",
|
||||
"squatting": "Squat,squatting,from behind,anus,pussy",
|
||||
"squeaky toy": "1girl,squatting,with a bone shaped squeakytoy in her mouth,squatting,hands raised,collar,leash,cheerful,pgmodel,sharp focus,",
|
||||
"squirting female ejaculation": "(motion blur:1.2) and (blurry foreground:1.15) and (Woman's pussy juice is squirting onto the camerae:1.2) and (wet lens:1.15),(pussy:0.5),(pussy close-up:0.7),A raw photo of A 18 year old beautiful korean idol,orgasm,detailed facial features,(front view),(squirting from puss:1.2),(squirting:1.2),(pussy juice puddle:1.15),dripping pussy juice,sitting on the wet floor,(legs apart),detailed nipples,(photorealistic:1.2),(Realistic:1.2),Detailed Skin Textures,detailed skin pores,high skin detail,",
|
||||
"sticky lion": "1girl,kneeling,full body,arms behind back,see-through,wet body",
|
||||
"Submissive Pose": "1girl,submissive_pose,squatting,",
|
||||
"sucking dildo": "1girl,(photorealistic:1.4),a photo of a beautiful woman,perfect face,detailed face,sucking dildo,oral,(dildo:1.5),",
|
||||
"sucking testicle 1": "sucking_testicles,1girl,1boy,hetero,solo_focus,penis_awe,kneeling,[(1boy),(long_penis:1.3),(testicles:1.1)],fellatio,oral",
|
||||
"sucking testicle 2": "1girl,testicle sucking,penis on face,nude male,pov,",
|
||||
"Suspended On Penis": "suspendedonpenisms,sex,hetero,1girl,1boy,arm grab,full body,cum",
|
||||
"symmetrical docking orgy": "2girls,<lora:symmetrical docking orgy:0.6>,symmetrical docking orgy",
|
||||
"talking phone sex": "1girl,1boy,one hand talking on phone,vaginal,doggystyle,sex from behind,completely nude,blush",
|
||||
"tentacle Nest Above": "1girl,(((tentacles,too many,too many tentacles,from above, full body, brick pit hole))),square pitfall,floating,looking at viewer,reaching to viewers,from outside,looking up,",
|
||||
"tentacle Nest Below": "1girl,(tentacles,too many,too many tentacles,full body, from below,high brick wall, in brick pit hole),dungeon pitfall,floating,looking at viewer,foreshortening,pantyshot,spread legs,white panty,legs up,looking down,arms up",
|
||||
"vibrator in thighhighs": "(1girl,parted lips),(kneeling,thighhighs, black thighhighs, vibrator in thighhighs),thighvibe",
|
||||
"Tobizio": "1girl,Tobizio,bottomless,spread legs,sitting,clipboard",
|
||||
"toilet Girl": "1girl,toilet,nude,cum,body writing,bukkake,(empty eyes),pussy,tears,cumdrip,collar,cum on breasts,cum on hair,facial,",
|
||||
"toilet training": "1girl,urinal,piss,drink",
|
||||
"chikan 1": "1girl,1boy,chikan,grabbing,molestation,public indecency,public use,train interior",
|
||||
"chikan 2": "1girl, multiple boys, groping, grabbing, train interior, multiple hands",
|
||||
"3girls Paizuri": "3girls,TriplePaizuri,Paizuri,upper body",
|
||||
"tucked penis": "tucked penis,sitting,testicles,penis,ass,from behind,1girl,futanari,trap",
|
||||
"twisted torso": "1girl,high-waist shorts,crop top,ass,underboob",
|
||||
"under covers": "1girl,1boy,penis,under covers",
|
||||
"doll under armpit": "a girl,upper body,large doll,pinch doll between upper arm to chest side,",
|
||||
"holding her panties 1": "1girl,(underwearshowcase),girl holding her white panties,full body,front view",
|
||||
"undressing shirts": "1girl,undressing shirts,bra",
|
||||
"undressing another": "1girl,shirt lift,lifted by another,clothes pull,assisted exposure,",
|
||||
"undressing another 2": "(2girls:2), (undressing another:1.2), pussy, clothes pull, pants pull, panty pull, assisted exposure,Wide shot",
|
||||
"undressing bra": "1girl,undressing bra",
|
||||
"undressing panties": "1girl,undressing,panty pull,",
|
||||
"undress top": "1girl,(undress top:1.3),(underboob:1.2)",
|
||||
"upright_front_above": "1girl,nipples,(1boy),sex,(hetero),(upright straddle),straddling,vaginal,eye contact,looking at another,(open mouth),teeth,sweat,(blush:1.3),chair,hug",
|
||||
"upright_front_leg_lock": "1girl,(1boy),sex,(hetero:1.2),looking at another,sitting,girl on top,(straddling, upright straddle),pussy juice,hug,leg lock,(blush:1.3),(sweat),steam,chair,sitting",
|
||||
"upright_front_squatting": "1girl,bottomless,(1boy),sex,(hetero:1.2),looking at another,sitting,girl on top,(straddling, upright straddle, vaginal, penis, pussy),hug,pussy juice,(blush:1.3),(sweat),steam,bed,used tissue,tissue box,used condom,parted lips,",
|
||||
"upright_straddle_back": "1girl,(1boy:1.1),sex,(hetero:1.3),sitting,girl on top,(straddling, upright straddle, vaginal, penis),pussy,pussy juice,hug,from behind,leg lock",
|
||||
"upright_straddle_squatting": "1girl,(1boy),sex,(hetero:1.3),straddling,(girl on top, upright straddle),pussy juice,from side,hug",
|
||||
"upside down": "1girl,upside-down,lying on back",
|
||||
"Upside Down sex": "upside-down,1boy,1girl,sex,penis,",
|
||||
"Upside Down Presenting": "from behind,bent over,1girl,looking back,ass,ass focus,looking at viewer,all fours,upside-down,hanging breasts,kneepits,looking through legs,udpv1,bare breasts,nipples,pussy,anus",
|
||||
"Vibrator in underwear and legs spread": "1girl,Vibrator in underwear and legs spread,lying on back,panties,",
|
||||
"viewer on leash": "1girl,cute,viewer on leash,femdom,cowboy shot,looking at viewer,light smile,from below,",
|
||||
"wake up": "wake up,yawning,covering mouth,",
|
||||
"washing back": "washing back,1girl,smile,short hair,brown hair,black hair,red eyes,1boy,towel,bath,naked towel,bathroom,mixed bathing,",
|
||||
"washing body": "1girl,washing body,holding sponge,sponge,(soap bubbles:1.3),bathroom,sitting,upper body,(armpits:1),tiles,closed mouth,expressionless,arm up,(arm behind head:1.1),",
|
||||
"wedgie 1": "((Daytime, park, trees)),1girl,ass,(panty pull),looking back,bent over,legs together,thong,",
|
||||
"Wedgie 2": "1girl,wedgie,panties",
|
||||
"Mouth Gag": "1girl,sitting on chair,circle gag mouth,",
|
||||
"woodenhor": "pussy,solo,1girl,digital,(arms up,in detailed basement,(bound, bondage, bdsm)),woodenhor,",
|
||||
"kabedon": "(kabedon, against wall:1.3),blush,couple,looking at another,hetero,height difference,eye contact",
|
||||
"upside-down": "handstand,covering crotch,upside-down",
|
||||
"undressing penis shock": "1boy,1girl,blush,clothes pull,erection,hetero,(pants pull:1.1),penis,(penis awe:1.5),pov,pov crotch,(pulling another's clothes:1.3),solo focus,(girl hands on pants:1.3),precum",
|
||||
"take your pick": "2girls,ass,beach,bikini,blush,small breasts,cameltoe,fang,from behind,full body,hand on own hip,kneepits,leaning forward,looking at viewer,looking back,multiple girls,open mouth,(take your pick),trefoil",
|
||||
"presenting another": "2girls,anus,ass,bent over,blush,clothes pull,flat ass,legs together,looking at viewer,looking back,multiple girls,panties,panty pull,presenting,(presenting another:1.3),pussy,shorts,shorts pull,smile,(spread pussy)"
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
Kneeling
|
||||
On one knee
|
||||
Lying
|
||||
Crossed legs
|
||||
Fetal position
|
||||
On back
|
||||
On side
|
||||
On stomach
|
||||
Sitting
|
||||
Butterfly sitting
|
||||
Crossed legs
|
||||
Figure four sitting
|
||||
Indian style
|
||||
Lotus position
|
||||
Hugging own legs
|
||||
Reclining
|
||||
Seiza
|
||||
Sitting on person
|
||||
Sitting on head
|
||||
Sitting on lap
|
||||
Shoulder carry
|
||||
Human chair
|
||||
Straddling
|
||||
Thigh straddling
|
||||
Upright straddle
|
||||
Wariza
|
||||
Yokozuwari
|
||||
Standing
|
||||
Balancing
|
||||
Crossed legs
|
||||
Legs apart
|
||||
Standing on one leg
|
||||
Balancing
|
||||
Crawling
|
||||
Idle animation
|
||||
Midair
|
||||
Falling
|
||||
Floating
|
||||
Flying
|
||||
Jumping
|
||||
Hopping
|
||||
Pouncing
|
||||
Running
|
||||
Walking
|
||||
Walk cycle
|
||||
Walking on wall
|
||||
All fours
|
||||
Top-down bottom-up
|
||||
Prostration
|
||||
Bear position
|
||||
Bowlegged pose
|
||||
Chest stand
|
||||
Chest stand handstand
|
||||
Triplefold
|
||||
Ruppelbend
|
||||
Quadfold
|
||||
Cowering
|
||||
Crucifixion
|
||||
Faceplant
|
||||
Full scorpion
|
||||
Fighting stance
|
||||
Battoujutsu stance
|
||||
Spread eagle position
|
||||
Squatting
|
||||
Stretching
|
||||
Superhero landing
|
||||
Upside-down
|
||||
Handstand
|
||||
Headstand
|
||||
Yoga
|
||||
downward dog
|
||||
pigeon pose
|
||||
Scorpion pose
|
||||
upward dog
|
||||
Arm support
|
||||
Head rest
|
||||
arms on table
|
||||
elbow on table
|
||||
hand on own chin
|
||||
hands on own chin
|
||||
hand on own cheek
|
||||
hands on own cheeks
|
||||
Head down
|
||||
Head tilt
|
||||
Head back
|
||||
Arched back
|
||||
Bent back
|
||||
Bent over
|
||||
Leaning back
|
||||
Leaning forward
|
||||
Slouching
|
||||
Sway back
|
||||
Twisted torso
|
||||
Arm behind back
|
||||
Arms behind back
|
||||
Arm up
|
||||
Arm behind head
|
||||
Arms up
|
||||
\o/
|
||||
Arms behind head
|
||||
Outstretched arm
|
||||
Outstretched arms
|
||||
Spread arms
|
||||
Arm at side
|
||||
Arms at sides
|
||||
Airplane arms
|
||||
Crossed arms
|
||||
Flexing
|
||||
Praise the sun
|
||||
Reaching
|
||||
Shrugging
|
||||
T-pose
|
||||
A-pose
|
||||
V arms
|
||||
W arms
|
||||
Stroking own chin
|
||||
Outstretched hand
|
||||
Contrapposto
|
||||
Sway back
|
||||
Crossed ankles
|
||||
Folded
|
||||
Leg up
|
||||
Legs up
|
||||
Knees to chest
|
||||
Legs over head
|
||||
Leg lift
|
||||
Outstretched leg
|
||||
Pin legs
|
||||
Split
|
||||
Pigeon pose
|
||||
Standing split
|
||||
Spread legs
|
||||
Watson cross
|
||||
Captain morgan pose
|
||||
Knees apart feet together
|
||||
Knees together feet apart
|
||||
Knee up
|
||||
Knees up
|
||||
Dorsiflexion
|
||||
Pigeon-toed
|
||||
Plantar flexion
|
||||
Tiptoes
|
||||
Tiptoe kiss
|
||||
Ass-to-ass
|
||||
Back-to-back
|
||||
Belly-to-belly
|
||||
Cheek-to-breast
|
||||
Cheek-to-cheek
|
||||
Eye contact
|
||||
Face-to-face
|
||||
Forehead-to-forehead
|
||||
Head on chest
|
||||
Heads together
|
||||
Holding hands
|
||||
Leg lock
|
||||
Locked arms
|
||||
Over the knee
|
||||
Nipple-to-nipple
|
||||
Noses touching
|
||||
Shoulder-to-shoulder
|
||||
Tail lock
|
||||
Circle formation
|
||||
Group hug
|
||||
Hug
|
||||
forced hug
|
||||
glomp
|
||||
group hug
|
||||
hug carry
|
||||
hug from behind
|
||||
imminent hug
|
||||
incoming hug
|
||||
mutual hug
|
||||
surprise hug
|
||||
waist hug
|
||||
Hugging own legs
|
||||
Hugging object
|
||||
Hugging tail
|
||||
Wing hug
|
||||
Arm hug
|
||||
Hug from behind
|
||||
Waist hug
|
||||
Baby carry
|
||||
Carrying
|
||||
Carried breast rest
|
||||
Carrying over shoulder
|
||||
Carrying under arm
|
||||
Child carry
|
||||
Fireman's carry
|
||||
Piggyback
|
||||
Princess carry
|
||||
Shoulder carry
|
||||
Sitting on shoulder
|
||||
Standing on shoulder
|
||||
Rabbit pose
|
||||
Horns pose
|
||||
Paw pose
|
||||
Claw pose
|
||||
Archer pose
|
||||
Bras d'honneur
|
||||
Body bridge
|
||||
Contrapposto
|
||||
Dojikko pose
|
||||
Ghost pose
|
||||
Inugami-ke no Ichizoku pose
|
||||
Letter pose
|
||||
Ojou-sama pose
|
||||
Saboten pose
|
||||
Symmetrical hand pose
|
||||
Victory pose
|
||||
Villain pose
|
||||
Zombie pose
|
||||
Gendou pose
|
||||
Henshin pose
|
||||
JoJo pose
|
||||
Dio Brando's pose
|
||||
Giorno Giovanna's pose
|
||||
Jonathan Joestar's pose
|
||||
Kujo Jotaro's pose
|
||||
Kongou pose
|
||||
Kujou Karen pose
|
||||
|
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"Pos": "masterpiece, best quality, detailed",
|
||||
"PosExpanded": "masterpiece, best quality, amazing quality, very aesthetic, ultra-detailed, high resolution, highres, absurdres, 4k, 8k, newest",
|
||||
"Neg": "low quality, worst quality, bad quality, lowres, deformed, mutated, disfigured, (bad anatomy), conjoined, bad ai-generated, cropped, jpeg artifacts, censored, text, signature, watermark, username, patreon logo, artist name",
|
||||
"PonyPos": "score_9, score_8_up, score_7_up",
|
||||
"PonyNeg": "score_4, score_5, score_6",
|
||||
"EyesPos": "detailed eyes, perfect eyes, realistic eyes",
|
||||
"EyesNeg": "cross-eye, fused eyes, poorly drawn face, cloned face, bad eyes, imperfect eyes, skewed eyes",
|
||||
"HandsNeg": "bad hands, missing fingers, extra digit, fewer digits, interlocked fingers, poorly drawn hand",
|
||||
"LimbsNeg": " distorted, missing legs, extra legs, extra limbs"
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
Advanced Alien Civilization Setting
|
||||
Age Of Exploration Setting
|
||||
Ai Uprising Setting
|
||||
Ai-Powered Society Setting
|
||||
Alien Invasion Setting
|
||||
Alternate Dimensions Setting
|
||||
Alternate History Setting
|
||||
Alternate Identity Setting
|
||||
Alternate Realities Collide Setting
|
||||
Ancient Civilization Setting
|
||||
Ancient Curse Setting
|
||||
Ancient Gods Setting
|
||||
Ancient Prophecy Setting
|
||||
Apocalyptic Earth Setting
|
||||
Arctic Setting
|
||||
Artificial Intelligence Setting
|
||||
Astral Plane Setting
|
||||
Biopunk Setting
|
||||
City Of Tomorrow Setting
|
||||
City Under Siege Setting
|
||||
Cosmic Horror Setting
|
||||
Cyber Warfare Setting
|
||||
Cybernetic Augmentation Setting
|
||||
Cyberpunk Setting
|
||||
Desert Setting
|
||||
Detective Noir Setting
|
||||
Dinosaur Era Setting
|
||||
Dream Within A Dream Setting
|
||||
Dream World Setting
|
||||
Dystopian Setting
|
||||
Espionage Setting
|
||||
Fairytale Setting
|
||||
Fantasy Setting
|
||||
Forgotten Technology Setting
|
||||
Future Dystopia Setting
|
||||
Future War Setting
|
||||
Futuristic Setting
|
||||
Futuristic Sports Setting
|
||||
Galactic Conflict Setting
|
||||
Galactic Empire Setting
|
||||
Genetic Engineering Setting
|
||||
Genetic Mutation Setting
|
||||
Haunted Mansion Setting
|
||||
Hidden Alien Species Setting
|
||||
Hidden Sanctuary Setting
|
||||
Historical Setting
|
||||
Holographic Reality Setting
|
||||
Interdimensional Travel Setting
|
||||
Jungle Setting
|
||||
Lost Civilization Setting
|
||||
Lost In Space Setting
|
||||
Lost In Time Setting
|
||||
Lunar Colony Setting
|
||||
Magical School Setting
|
||||
Mechanical World Setting
|
||||
Medieval Setting
|
||||
Mind Upload Setting
|
||||
Mythical Artifacts Setting
|
||||
Mythical Beasts Setting
|
||||
Mythological Setting
|
||||
Nature Reclaiming Civilization Setting
|
||||
Navigating The Multiverse Setting
|
||||
Ocean Exploration Setting
|
||||
Parallel Histories Setting
|
||||
Parallel Universe Setting
|
||||
Pirate Adventure Setting
|
||||
Planetary Exploration Setting
|
||||
Post-Apocalyptic Setting
|
||||
Robot Uprising Setting
|
||||
Robotic Society Setting
|
||||
Robotic Utopia Setting
|
||||
Sci-Fi Setting
|
||||
Space Setting
|
||||
Space Anomaly Setting
|
||||
Space Colonization Setting
|
||||
Space Opera Setting
|
||||
Space Rebellion Setting
|
||||
Space Travelers Setting
|
||||
Space Western Setting
|
||||
Steampunk Setting
|
||||
Superhero Setting
|
||||
Supernatural Mystery Setting
|
||||
Surreal Setting
|
||||
Time Crime Setting
|
||||
Time Loop Setting
|
||||
Time Paradox Setting
|
||||
Time Travel Setting
|
||||
Transhumanism Setting
|
||||
Underwater Setting
|
||||
Urban Setting
|
||||
Utopian Society Setting
|
||||
Victorian Setting
|
||||
Virtual Conspiracy Setting
|
||||
Virtual Paradise Setting
|
||||
Virtual Reality Setting
|
||||
Wild Animal Kingdom Setting
|
||||
Wild West Setting
|
||||
|
@@ -0,0 +1,30 @@
|
||||
early dawn time
|
||||
sunrise time
|
||||
early morning time
|
||||
morning golden hour time
|
||||
mid-morning time
|
||||
late morning time
|
||||
high noon time
|
||||
bright midday time
|
||||
afternoon time
|
||||
late afternoon time
|
||||
golden hour sunset time
|
||||
sunset time
|
||||
dusk time
|
||||
blue hour time
|
||||
twilight time
|
||||
early night time
|
||||
midnight time
|
||||
deep night time
|
||||
starlit night time
|
||||
pre-dawn time
|
||||
misty morning time
|
||||
foggy dawn time
|
||||
stormy afternoon time
|
||||
clear midnight time
|
||||
rainy evening time
|
||||
cloudy midday time
|
||||
hazy sunset time
|
||||
moonlit night time
|
||||
overcast morning time
|
||||
crisp dawn time
|
||||
|
@@ -0,0 +1,218 @@
|
||||
{
|
||||
"Extreme Anger": "clenched hands, close-up hands, angry, anger vein, clenched teeth, scowl, fighting stance, maximum anger, burning eyes, Intense atmosphere, burning, fire, aura, Harsh lighting, volcanic reds and blacks color theme, blood on hands, Contrast filter",
|
||||
"Late for School": "1girl, school_uniform, (toast_in_mouth:1.3), (running:1.2), school_bag, street, (late:1.1)",
|
||||
"Beach Episode": "multiple_girls, (beach:1.3), (ocean:1.1), (swimsuit:1.3), (playing_water:1.1), beach_ball, blue_sky, clouds, sunny",
|
||||
"Hot Springs Episode": "multiple_girls, (onsen:1.4), (towel_around_body:1.3), (steam:1.2), sitting, rocks, bamboo, night, blushing",
|
||||
"Festival Episode": "1girl, (yukata:1.3), (fireworks:1.2), night_sky, (food_stall:1.1), lantern, paper_fan, happy, walking",
|
||||
"Childhood Friend": "1boy, 1girl, (young:1.1), (looking_at_each_other:1.1), school_uniform, classroom, blushing, (childhood_friends:1.3)",
|
||||
"Transfer Student": "1girl, (transfer_student:1.4), school_uniform, standing, (front_of_class:1.2), blackboard, (nervous:1.1), (introducing_self:1.1)",
|
||||
"Kabedon": "1boy, 1girl, (kabedon:1.5), (wall:1.1), (close_up:1.1), school_uniform, (serious:1.1), (blushing:1.2), (trapped:1.1)",
|
||||
"Class President": "1girl, (glasses:1.2), (braid:1.1), school_uniform, (clipboard:1.1), serious, standing, (class_president:1.3), (armband:1.2)",
|
||||
"Delinquent": "1boy, (delinquent:1.3), (pompadour:1.2), (modified_school_uniform:1.1), (baseball_bat:1.1), (squatting:1.1), alley, graffiti",
|
||||
"Magical Girl Transformation": "1girl, (magical_girl:1.4), (transformation:1.4), (glowing:1.3), (ribbons:1.1), (frills:1.1), (dynamic_pose:1.2), bright_colors, (lens_flare:1.1)",
|
||||
"Nosebleed": "1boy, (nosebleed:1.5), (looking_at_girl:1.1), (blushing:1.2), school, (ecchi_situation:1.1), (surprised:1.1)",
|
||||
"Ahoge": "1girl, (ahoge:1.5), school_uniform, smiling, simple_background, (energetic:1.1)",
|
||||
"Tsundere": "1girl, (tsundere:1.4), school_uniform, (arms_crossed:1.2), (pout:1.3), (blushing:1.2), (looking_away:1.1)",
|
||||
"Yandere": "1girl, (yandere:1.4), (knife:1.3), (blood_splatter:1.1), school_uniform, (creepy_smile:1.3), (dark_background:1.1), (glowing_eyes:1.1)",
|
||||
"Kuudere": "1girl, (kuudere:1.4), school_uniform, (emotionless:1.3), (book:1.1), sitting, library, (reading:1.1)",
|
||||
"Dandere": "1girl, (dandere:1.4), school_uniform, (shy:1.3), (blushing:1.2), (hiding:1.1), library, (looking_down:1.1), (stuttering:1.1)",
|
||||
"Genki Girl": "1girl, (genki:1.4), (energetic_pose:1.3), (big_smile:1.3), school_uniform, (jumping:1.1), bright_background, (v_sign:1.1)",
|
||||
"Sick Visit": "1girl, (sick:1.3), (in_bed:1.3), pajamas, 1boy, sitting, (wet_towel_on_forehead:1.2), (worried:1.1), (bedroom:1.1), (feeding:1.1)",
|
||||
"Rooftop Lunch": "multiple_girls, school_uniform, (rooftop:1.4), (eating:1.2), (bento:1.3), sitting, chain_link_fence, blue_sky, (city_view:1.1)",
|
||||
"Senpai and Kouhai": "1boy, (senpai:1.2), 1girl, (kouhai:1.2), school_uniform, hallway, (looking_up:1.1), (smiling:1.1), (blushing:1.1)",
|
||||
"The Chosen One": "1boy, (glowing_sword:1.4), (fantasy_armor:1.2), standing, cliff, (looking_at_castle:1.1), (wind:1.1), clouds, (hero:1.3)",
|
||||
"Dark Lord": "1boy, (dark_lord:1.4), (evil_armor:1.3), (spikes:1.1), (glowing_red_eyes:1.2), (throne_room:1.2), (dark:1.1), (shadows:1.1), (sitting_on_throne:1.1)",
|
||||
"Princess in Distress": "1girl, (princess:1.3), (medieval_dress:1.2), (trapped:1.2), (tower:1.1), window, (sad:1.1), (looking_out:1.1), (chains:1.1)",
|
||||
"Knight in Shining Armor": "1boy, (knight:1.4), (full_armor:1.3), (shining:1.2), (sword:1.1), (shield:1.1), (white_horse:1.1), forest, (heroic_pose:1.1)",
|
||||
"Wise Old Wizard": "1boy, (old_man:1.3), (wizard:1.4), (long_white_beard:1.3), (robe:1.1), (staff:1.2), (glowing_orb:1.1), (library:1.1), (books:1.2)",
|
||||
"Tavern Adventurers": "multiple, (adventurers:1.3), (tavern:1.4), (drinking:1.2), (mug:1.1), (ale:1.1), (laughing:1.1), (fantasy_armor:1.1), (wooden_table:1.1), (fireplace:1.1)",
|
||||
"Dragon's Lair": "(dragon:1.5), (lair:1.3), (hoard:1.4), (gold_coins:1.3), (sleeping:1.1), cave, (treasure_chest:1.1), (glowing:1.1), (dark:1.1)",
|
||||
"Elf Archer": "1girl, (elf:1.4), (pointy_ears:1.3), (archer:1.3), (bow:1.2), (arrow:1.1), (forest:1.1), (green_tunic:1.1), (serious:1.1)",
|
||||
"Dwarven Blacksmith": "1boy, (dwarf:1.4), (beard:1.3), (blacksmith:1.3), (hammer:1.2), (anvil:1.2), (forge:1.1), (glowing_metal:1.1), (muscular:1.1)",
|
||||
"Necromancer": "1boy, (necromancer:1.4), (dark_robe:1.3), (hood:1.2), (skull:1.1), (glowing_green_magic:1.2), (skeleton:1.3), (graveyard:1.1), (night:1.1)",
|
||||
"Potion Shop": "(shop:1.3), (potions:1.5), (glowing_liquids:1.3), (bottles:1.2), (shelves:1.1), (mysterious:1.1), (counter:1.1), (dark:1.1), (witch:1.1)",
|
||||
"Bard": "1boy, (bard:1.4), (lute:1.3), (singing:1.2), (tavern:1.1), (medieval_clothes:1.1), (smiling:1.1), (audience:1.1)",
|
||||
"Rogue in Shadows": "1boy, (rogue:1.4), (hood:1.3), (dagger:1.2), (crouching:1.2), (shadows:1.3), (alley:1.1), (night:1.1), (cobblestone:1.1)",
|
||||
"Holy Priestess": "1girl, (priestess:1.4), (white_robes:1.3), (glowing_holy_magic:1.3), (praying:1.2), (church:1.1), (stained_glass_window:1.2), (gentle_smile:1.1)",
|
||||
"Barbarian": "1boy, (barbarian:1.4), (muscular:1.3), (fur_armor:1.2), (greataxe:1.2), (battle_cry:1.2), (mountain:1.1), (snow:1.1)",
|
||||
"Familiar": "1girl, (witch:1.2), (black_cat:1.4), (sitting_on_shoulder:1.3), (glowing_eyes:1.1), (night:1.1), (moon:1.1), (forest:1.1)",
|
||||
"Enchanted Forest": "(forest:1.3), (enchanted:1.3), (glowing_mushrooms:1.3), (fireflies:1.2), (mist:1.1), (large_trees:1.1), (night:1.1), (glowing:1.1)",
|
||||
"Mimic": "(mimic:1.5), (treasure_chest:1.3), (teeth:1.4), (tongue:1.3), (adventurer:1.1), (surprised:1.1), (dungeon:1.1), (dark:1.1)",
|
||||
"Cyberpunk Cityscape": "(cityscape:1.3), (cyberpunk:1.5), (neon_signs:1.4), (rain:1.1), (flying_car:1.2), (night:1.2), (skyscraper:1.1), (glowing:1.1)",
|
||||
"Cyborg": "1girl, (cyborg:1.5), (robotic_arm:1.4), (glowing_eye:1.3), (mechanical_parts:1.2), (sci-fi_clothes:1.1), (serious:1.1), (dark_background:1.1)",
|
||||
"Alien Invasion": "(alien:1.4), (spaceship:1.4), (mothership:1.3), (laser_beam:1.3), (city_in_ruins:1.2), (explosion:1.1), (dark_sky:1.1)",
|
||||
"Space Captain": "1boy, (captain:1.3), (space_uniform:1.3), (bridge:1.4), (spaceship_interior:1.2), (viewscreen:1.2), (planet:1.1), (captain's_chair:1.2)",
|
||||
"Hacker": "1girl, (hacker:1.4), (hoodie:1.3), (multiple_monitors:1.3), (glowing_code:1.2), (dark_room:1.2), (keyboard:1.1), (goggles:1.1)",
|
||||
"First Contact": "1boy, (astronaut:1.3), (space_suit:1.2), (alien:1.5), (tentacles:1.1), (glowing:1.1), (shaking_hands:1.2), (alien_planet:1.1), (two_moons:1.1)",
|
||||
"Post-Apocalypse Survivor": "1girl, (post-apocalypse:1.4), (ragged_clothes:1.3), (gas_mask:1.2), (rifle:1.1), (ruined_city:1.3), (overgrown:1.1), (rubble:1.1)",
|
||||
"AI Robot": "(robot:1.5), (humanoid:1.3), (glowing_blue_eyes:1.2), (metallic_body:1.2), (sci-fi:1.1), (clean_background:1.1), (standing:1.1)",
|
||||
"Cryosleep": "1girl, (cryosleep:1.5), (cryopod:1.4), (glass:1.1), (ice:1.1), (glowing_blue_light:1.2), (spaceship_interior:1.1), (sleeping:1.1)",
|
||||
"Mad Scientist": "1boy, (old_man:1.1), (mad_scientist:1.4), (lab_coat:1.3), (crazy_hair:1.3), (goggles:1.2), (beaker:1.1), (glowing_liquid:1.1), (laboratory:1.1), (laughing:1.2)",
|
||||
"Mecha Pilot": "1boy, (pilot_suit:1.4), (cockpit:1.4), (mecha_cockpit:1.3), (hud_display:1.2), (controls:1.1), (serious:1.1), (looking_forward:1.1)",
|
||||
"Spaceship Hangar": "(hangar:1.4), (spaceship:1.3), (mecha:1.2), (sci-fi:1.2), (workers:1.1), (glowing_lights:1.1), (large:1.1)",
|
||||
"Alien Bar": "(bar:1.2), (alien:1.5), (multiple_species:1.3), (tentacles:1.1), (glowing_drinks:1.2), (bartender:1.1), (dark:1.1), (neon:1.1)",
|
||||
"Android Waitress": "1girl, (android:1.4), (waitress:1.3), (uniform:1.1), (tray:1.1), (mechanical_joints:1.2), (glowing_eyes:1.1), (cafe:1.1), (smiling:1.1)",
|
||||
"Wormhole Travel": "(spaceship:1.3), (wormhole:1.5), (space_travel:1.2), (glowing:1.2), (colorful:1.2), (light_speed:1.1), (stars:1.1)",
|
||||
"Dual Wielding": "1girl, (dual_wielding:1.5), (two_swords:1.3), (dynamic_pose:1.2), (battle:1.1), (armor:1.1), (serious:1.1)",
|
||||
"Back-to-Back Battle": "1boy, 1girl, (back-to-back:1.5), (fighting:1.2), (sword:1.1), (gun:1.1), (monsters:1.2), (surrounded:1.2)",
|
||||
"Heroic Sacrifice": "1boy, (protecting:1.4), 1girl, (shielding:1.3), (glowing_energy:1.2), (explosion:1.1), (crying:1.1), (injured:1.2), (heroic_sacrifice:1.3)",
|
||||
"Car Chase": "(car_chase:1.4), (car:1.2), (fast:1.1), (motion_lines:1.1), (city_street:1.1), (night:1.1), (gunfire:1.1), (explosion:1.1)",
|
||||
"Jump Scare": "(monster:1.5), (close-up:1.3), (screaming:1.4), (wide_eyes:1.2), (dark:1.2), (flashlight:1.1), (terror:1.1)",
|
||||
"Haunted House": "(house:1.3), (haunted:1.5), (abandoned:1.2), (broken_windows:1.1), (overgrown:1.1), (night:1.2), (full_moon:1.2), (mist:1.1)",
|
||||
"Zombie Horde": "(zombie:1.5), (horde:1.4), (multiple:1.2), (reaching:1.1), (decaying:1.1), (ruined_city:1.1), (barricade:1.1)",
|
||||
"Final Girl": "1girl, (final_girl:1.4), (survivor:1.3), (tattered_clothes:1.2), (blood_on_face:1.1), (knife:1.1), (woods:1.1), (night:1.1), (scared:1.1)",
|
||||
"Creepy Doll": "(doll:1.5), (creepy:1.4), (cracked_porcelain:1.3), (glowing_eyes:1.2), (sitting:1.1), (rocking_chair:1.1), (dark_room:1.1), (shadows:1.1)",
|
||||
"Vampire": "1boy, (vampire:1.5), (fangs:1.3), (pale_skin:1.2), (cape:1.1), (glowing_red_eyes:1.2), (drinking_blood:1.3), (neck:1.1), (1girl:1.1), (victim:1.1), (night:1.1)",
|
||||
"Werewolf": "(werewolf:1.5), (howling:1.3), (full_moon:1.4), (forest:1.1), (night:1.1), (claws:1.1), (fur:1.1), (transformation:1.1)",
|
||||
"Ghost": "1girl, (ghost:1.5), (translucent:1.4), (glowing_blue:1.3), (floating:1.2), (sad:1.1), (old_house:1.1), (hallway:1.1)",
|
||||
"Duel at Sunset": "1boy, 1boy, (duel:1.4), (sword_fight:1.2), (sunset:1.4), (silhouette:1.2), (dynamic_pose:1.1), (field:1.1)",
|
||||
"Sword in Stone": "(sword_in_stone:1.5), (glowing:1.3), (rock:1.1), (forest:1.1), (moss:1.1), (legendary:1.1), (light_rays:1.1)",
|
||||
"Surrounded": "1girl, (surrounded:1.4), (enemies:1.2), (monsters:1.1), (sword:1.1), (battle_stance:1.2), (ready_to_fight:1.1), (dungeon:1.1)",
|
||||
"Meet Cute": "1boy, 1girl, (bumping_into_each_other:1.4), (books_scattered:1.3), (falling:1.1), (blushing:1.1), (surprised:1.1), (school_hallway:1.1)",
|
||||
"Sharing an Umbrella": "1boy, 1girl, (sharing_umbrella:1.5), (rain:1.4), (walking:1.1), (close:1.2), (blushing:1.1), (school_uniform:1.1), (street:1.1)",
|
||||
"Love Confession": "1boy, (confession:1.4), 1girl, (surprised:1.2), (blushing:1.3), (presenting_letter:1.3), (love_letter:1.2), (school:1.1), (under_tree:1.1)",
|
||||
"Cherry Blossoms": "1girl, school_uniform, (cherry_blossoms:1.5), (petals:1.3), (falling_petals:1.2), (wind:1.1), (smiling:1.1), (park:1.1), (spring:1.1)",
|
||||
"Picnic": "multiple_girls, (picnic:1.4), (picnic_basket:1.2), (blanket:1.1), (eating:1.1), (sandwich:1.1), (park:1.1), (grass:1.1), (sunny:1.1)",
|
||||
"Stargazing": "1boy, 1girl, (stargazing:1.5), (night_sky:1.4), (stars:1.3), (milky_way:1.2), (sitting:1.1), (grass:1.1), (looking_up:1.1)",
|
||||
"Cooking Together": "1boy, 1girl, (cooking:1.4), (kitchen:1.3), (apron:1.2), (flour_on_face:1.3), (laughing:1.1), (mixing_bowl:1.1)",
|
||||
"Studying Together": "1boy, 1girl, (studying:1.4), (library:1.3), (books:1.2), (table:1.1), (serious:1.1), (head_resting_on_hand:1.1), (notebook:1.1)",
|
||||
"Sleeping on Shoulder": "1girl, (sleeping:1.4), (head_on_shoulder:1.5), 1boy, (blushing:1.3), (train_interior:1.3), (window:1.1), (sitting:1.1)",
|
||||
"Hand Holding": "(holding_hands:1.5), 1boy, 1girl, (close-up:1.2), (blushing:1.1), (walking:1.1), (street:1.1), (dating:1.1)",
|
||||
"Running in the Rain": "1boy, 1girl, (running:1.3), (rain:1.5), (laughing:1.2), (wet_clothes:1.2), (splashing:1.1), (street:1.1)",
|
||||
"Feeding Each Other": "1girl, (feeding:1.5), 1boy, (open_mouth:1.2), (chopsticks:1.1), (bento:1.1), (blushing:1.2), (park:1.1), (sitting:1.1)",
|
||||
"Sunset on the Beach": "1boy, 1girl, (beach:1.3), (sunset:1.5), (holding_hands:1.2), (walking:1.1), (ocean:1.1), (silhouette:1.1), (romantic:1.1)",
|
||||
"Cat Cafe": "1girl, (cat_cafe:1.4), (cat:1.4), (petting:1.3), (multiple_cats:1.2), (cafe_interior:1.1), (drinking_coffee:1.1), (smiling:1.1)",
|
||||
"Oblivious Harem Protag": "1boy, (harem:1.4), (surrounded_by_girls:1.3), (multiple_girls:1.2), (confused:1.3), (clueless:1.2), (school:1.1), (girls_blushing:1.1)",
|
||||
"Artist at Work": "1girl, (artist:1.4), (painting:1.3), (easel:1.3), (canvas:1.1), (paint_brush:1.1), (art_studio:1.1), (focused:1.1), (paint_on_face:1.1)",
|
||||
"Cozy Bookstore": "(bookstore:1.4), (cozy:1.3), (bookshelves:1.3), (warm_light:1.2), (armchair:1.1), (reading:1.1), (fireplace:1.1)",
|
||||
"Walking Home from School": "1boy, 1girl, (walking:1.2), (school_uniform:1.1), (school_bag:1.1), (suburbs:1.1), (sunset:1.3), (talking:1.1)",
|
||||
"Cat Girl": "1girl, (cat_girl:1.5), (animal_ears:1.4), (cat_tail:1.4), (cat_ears:1.3), (playful:1.1), (maid_outfit:1.1), (paw_pose:1.1)",
|
||||
"Fox Girl": "1girl, (fox_girl:1.5), (fox_ears:1.4), (fox_tail:1.4), (multiple_tails:1.2), (kimono:1.2), (shrine:1.1), (mischievous:1.1)",
|
||||
"Angel": "1girl, (angel:1.5), (wings:1.4), (white_wings:1.3), (halo:1.3), (white_dress:1.2), (glowing:1.1), (clouds:1.1), (flying:1.1)",
|
||||
"Demon Girl": "1girl, (demon_girl:1.5), (horns:1.4), (demon_tail:1.3), (demon_wings:1.2), (black_dress:1.1), (seductive:1.1), (glowing_red_eyes:1.1)",
|
||||
"Mermaid": "1girl, (mermaid:1.5), (fish_tail:1.4), (underwater:1.3), (sitting_on_rock:1.2), (ocean:1.1), (long_hair:1.1), (seashell_bra:1.1)",
|
||||
"Pirate Captain": "1boy, (pirate:1.4), (captain:1.3), (pirate_hat:1.3), (eyepatch:1.2), (sword:1.1), (pirate_ship:1.3), (ocean:1.1)",
|
||||
"Ninja": "1girl, (ninja:1.4), (kunoichi:1.3), (ninja_mask:1.3), (katana:1.1), (crouching:1.1), (rooftop:1.2), (night:1.1), (moon:1.1)",
|
||||
"Samurai": "1boy, (samurai:1.4), (samurai_armor:1.4), (katana:1.3), (battle_stance:1.2), (bamboo_forest:1.1), (serious:1.1)",
|
||||
"Shrine Maiden": "1girl, (miko:1.5), (shrine_maiden_outfit:1.4), (gohei:1.2), (sweeping:1.1), (shrine:1.2), (torii_gate:1.2)",
|
||||
"Butler": "1boy, (butler:1.4), (suit:1.4), (white_gloves:1.2), (serving_tray:1.2), (bowing:1.1), (mansion_interior:1.1), (polite:1.1)",
|
||||
"Maid": "1girl, (maid:1.4), (maid_outfit:1.4), (apron:1.2), (frills:1.1), (feather_duster:1.1), (mansion:1.1), (curtsy:1.1)",
|
||||
"Idol": "1girl, (idol:1.5), (idol_outfit:1.4), (singing:1.3), (microphone:1.3), (stage:1.2), (spotlight:1.1), (waving:1.1), (big_smile:1.1)",
|
||||
"Witch": "1girl, (witch:1.4), (pointy_hat:1.4), (witch_hat:1.3), (broom:1.2), (flying:1.1), (cauldron:1.1), (black_cat:1.1), (moon:1.1)",
|
||||
"Detective": "1boy, (detective:1.4), (trench_coat:1.3), (fedora:1.2), (magnifying_glass:1.3), (looking_for_clues:1.1), (alley:1.1), (night:1.1), (rain:1.1)",
|
||||
"Phantom Thief": "1boy, (phantom_thief:1.5), (top_hat:1.3), (monocle:1.2), (cape:1.2), (white_gloves:1.1), (holding_jewel:1.3), (rooftop:1.1), (moon:1.1)",
|
||||
"Librarian": "1girl, (librarian:1.4), (glasses:1.3), (cardigan:1.2), (book:1.1), (bookshelf:1.2), (library:1.2), (shushing:1.2)",
|
||||
"Nurse": "1girl, (nurse:1.4), (nurse_cap:1.3), (nurse_uniform:1.3), (clipboard:1.1), (smiling:1.1), (hospital:1.1), (injection:1.1)",
|
||||
"Police Officer": "1girl, (police:1.4), (police_uniform:1.4), (police_hat:1.2), (handcuffs:1.1), (serious:1.1), (city_street:1.1)",
|
||||
"Office Lady": "1girl, (office_lady:1.4), (suit:1.3), (pencil_skirt:1.2), (blouse:1.1), (clipboard:1.1), (office:1.1), (talking_on_phone:1.1)",
|
||||
"Teacher": "1girl, (teacher:1.4), (suit:1.2), (glasses:1.2), (pointer:1.2), (blackboard:1.3), (classroom:1.1), (teaching:1.1)",
|
||||
"Succubus": "1girl, (succubus:1.5), (demon_horns:1.3), (demon_tail:1.3), (demon_wings:1.2), (lingerie:1.3), (seductive:1.2), (bed:1.1)",
|
||||
"Slime Girl": "1girl, (slime_girl:1.5), (translucent_body:1.4), (slime:1.3), (blue_slime:1.1), (amorphous:1.1), (cave:1.1)",
|
||||
"Ghost in a Sheet": "(ghost:1.4), (sheet:1.5), (two_eyes:1.1), (floating:1.1), (boo:1.1), (simple_background:1.1)",
|
||||
"Santa Girl": "1girl, (santa_costume:1.5), (red_dress:1.3), (white_fur_trim:1.2), (santa_hat:1.3), (present:1.1), (smiling:1.1), (snow:1.1)",
|
||||
"Bunny Girl": "1girl, (bunny_girl:1.5), (bunny_ears:1.4), (leotard:1.3), (bunny_tail:1.2), (high_heels:1.1), (serving_tray:1.1), (casino:1.1)",
|
||||
"Cow Girl": "1girl, (cow_girl:1.5), (cow_horns:1.3), (cow_ears:1.2), (cowbell:1.2), (cow_print:1.1), (bikini:1.1), (large_breasts:1.1), (farm:1.1)",
|
||||
"Mech Girl": "1girl, (mecha_musume:1.5), (mechanical_parts:1.4), (jetpack:1.2), (glowing:1.1), (sci-fi:1.1), (armor:1.1), (floating:1.1)",
|
||||
"Cheerleader": "1girl, (cheerleader:1.4), (cheerleader_uniform:1.3), (pompoms:1.3), (jumping:1.1), (smiling:1.1), (sports_field:1.1)",
|
||||
"Gothic Lolita": "1girl, (gothic_lolita:1.4), (black_dress:1.3), (frills:1.2), (lace:1.1), (headdress:1.1), (serious:1.1), (dark_background:1.1)",
|
||||
"Isekai Truck-kun": "1boy, school_uniform, (truck:1.4), (about_to_be_hit:1.3), (speed_lines:1.2), (terrified:1.1), (isekai:1.1), street, (blur:1.1)",
|
||||
"Isekai Summoning Circle": "1boy, 1girl, school_uniform, (summoning_circle:1.5), (glowing:1.3), (magic_circle:1.3), (fantasy_setting:1.1), (confused:1.2), (robed_figures:1.1)",
|
||||
"Isekai Status Screen": "1boy, (status_screen:1.5), (glowing_screen:1.3), (hologram:1.2), (ui:1.1), (isekai:1.1), (fantasy_armor:1.1), (surprised:1.1), (looking_at_screen:1.2)",
|
||||
"Adventurer's Guild": "(adventurer's_guild:1.5), (fantasy:1.1), (tavern_interior:1.1), (quest_board:1.4), (bounty_poster:1.1), (adventurers:1.2), (wooden_tables:1.1), (receptionist:1.1)",
|
||||
"Overpowered Protagonist": "1boy, (overpowered:1.4), (effortless:1.3), (one_punch:1.1), (surrounded_by_defeated_enemies:1.2), (yawn:1.1), (fantasy_setting:1.1)",
|
||||
"Chuunibyou": "1girl, (chuunibyou:1.5), school_uniform, (eyepatch:1.4), (holding_arm:1.3), (bandages:1.1), (glowing_red_eye:1.1), (dark_aura:1.2), (dramatic_pose:1.1), (evil_grin:1.1)",
|
||||
"Ojou-sama Laugh": "1girl, (ojou_sama:1.4), (rich:1.1), (elegant_dress:1.2), (ojou_laugh:1.5), (hand_over_mouth:1.3), (drill_hair:1.1), (tea_party:1.1), garden",
|
||||
"Gyaru": "1girl, (gyaru:1.5), (tanned_skin:1.3), (bleached_hair:1.2), (blonde_hair:1.1), (modified_school_uniform:1.2), (short_skirt:1.1), (loose_socks:1.1), (cell_phone:1.1), (gyaru_peace:1.2)",
|
||||
"Yamato Nadeshiko": "1girl, (yamato_nadeshiko:1.4), (kimono:1.4), (long_black_hair:1.2), (elegant:1.2), (gentle_smile:1.1), (tatami:1.1), (serving_tea:1.1), (modest:1.1)",
|
||||
"Shota": "1boy, (shota:1.5), (young_boy:1.3), (shorts:1.2), (school_uniform:1.1), (blushing:1.1), (innocent:1.1), (looking_up:1.1)",
|
||||
"Himbo": "1boy, (himbo:1.5), (muscular:1.4), (bare_chest:1.1), (cheerful:1.3), (smiling:1.2), (clueless:1.2), (simpleton:1.1), (kind:1.1)",
|
||||
"Bokukko": "1girl, (bokukko:1.4), (tomboy:1.3), (short_hair:1.2), (school_uniform:1.1), (boyish:1.1), (energetic:1.1), (hands_in_pockets:1.1)",
|
||||
"Clumsy Girl": "1girl, (clumsy:1.4), (tripping:1.3), (falling:1.3), (spilling:1.2), (tray_of_food:1.1), (surprised:1.1), (school_uniform:1.1), (flailing_arms:1.1)",
|
||||
"Stoic Rival": "1boy, (rival:1.4), (arms_crossed:1.3), (serious_expression:1.3), (frown:1.1), (looking_away:1.1), (school_uniform:1.1), (spiky_hair:1.1)",
|
||||
"Tournament Arc": "1boy, 1boy, (fighting:1.3), (tournament:1.4), (arena:1.3), (audience:1.1), (versus:1.1), (dynamic_pose:1.1), (martial_arts:1.1), (shouting:1.1)",
|
||||
"Training Montage": "1boy, (training:1.4), (sweat:1.3), (punching_bag:1.2), (muscular:1.1), (determined:1.2), (bandages:1.1), (dojo:1.1)",
|
||||
"Jojo Pose": "1boy, (jojo_pose:1.6), (dramatic_pose:1.4), (dynamic_pose:1.2), (glowing_aura:1.1), (menacing:1.3), (sound_effect:1.1), (bizarre_pose:1.3)",
|
||||
"Naruto Run": "1boy, (naruto_run:1.5), (running:1.2), (arms_back:1.4), (ninja:1.1), (headband:1.1), (motion_lines:1.1), (forest:1.1)",
|
||||
"Rooftop Sniper": "1girl, (sniper_rifle:1.5), (scope:1.2), (lying_down:1.2), (rooftop:1.3), (city_view:1.1), (night:1.1), (serious:1.1), (focused:1.1), (one_eye_closed:1.1)",
|
||||
"Guns Akimbo": "1girl, (guns_akimbo:1.5), (dual_wielding:1.3), (two_guns:1.2), (pistol:1.1), (jumping:1.1), (dynamic_pose:1.1), (mid-air:1.1), (serious_expression:1.1)",
|
||||
"Sword Unsheathe": "1boy, (katana:1.3), (unsheathing:1.5), (iaido:1.2), (scabbard:1.1), (serious:1.1), (quick_draw:1.1), (glowing_blade:1.1)",
|
||||
"Dramatic Standoff": "1boy, 1boy, (standoff:1.4), (staring_at_each_other:1.3), (close-up:1.1), (serious:1.2), (tense:1.1), (wind:1.1), (dust:1.1), (western:1.1)",
|
||||
"AI Rebellion": "(robot:1.4), (horde:1.2), (glowing_red_eyes:1.3), (city_in_ruins:1.2), (laser_beam:1.1), (explosion:1.1), (dark_sky:1.1), (ai_rebellion:1.3)",
|
||||
"Dystopian Future": "1girl, (dystopian:1.4), (ragged_clothes:1.2), (ruins:1.1), (looking_at_city:1.2), (futuristic_city:1.3), (hover_car:1.1), (oppression:1.1), (dark_sky:1.1), (barbed_wire:1.1)",
|
||||
"Time Travel Portal": "1boy, (time_travel:1.4), (portal:1.5), (glowing:1.3), (swirling:1.2), (stepping_out:1.2), (confused:1.1), (street:1.1), (clock_background:1.1)",
|
||||
"Virtual Reality": "1girl, (vr_goggles:1.5), (virtual_reality:1.3), (glowing_interface:1.2), (reaching_forward:1.1), (dark_room:1.1), (sci-fi:1.1)",
|
||||
"Colony Drop": "(space_colony:1.4), (falling:1.3), (entering_atmosphere:1.3), (on_fire:1.2), (earth:1.2), (from_space:1.1), (sci-fi:1.1), (destruction:1.1)",
|
||||
"Love Triangle": "1boy, 2girls, (love_triangle:1.5), (jealousy:1.2), (blushing:1.1), (1girl_looking_at_boy:1.1), (1girl_glaring_at_other_girl:1.2), (school_uniform:1.1), (awkward:1.1)",
|
||||
"Confession Rejection": "1girl, (crying:1.4), (rejected_confession:1.3), (love_letter_on_ground:1.2), 1boy, (looking_away:1.2), (school:1.1), (sunset:1.1), (sad:1.1)",
|
||||
"First Kiss": "1boy, 1girl, (kissing:1.5), (first_kiss:1.3), (blushing:1.4), (eyes_closed:1.2), (close-up:1.1), (romantic:1.1), (park:1.1), (night:1.1)",
|
||||
"Rivals to Lovers": "1boy, 1girl, (arguing:1.3), (blushing:1.2), (close_to_each_other:1.1), (school_uniform:1.1), (classroom:1.1), (rivals_to_lovers:1.3)",
|
||||
"Accidental Kiss": "1boy, 1girl, (accidental_kiss:1.5), (falling:1.2), (kissing:1.1), (surprised:1.3), (wide_eyes:1.2), (blushing:1.1), (school_hallway:1.1)",
|
||||
"Rainy Day Confession": "1boy, 1girl, (confession:1.4), (rain:1.4), (umbrella:1.1), (wet_clothes:1.1), (blushing:1.2), (serious:1.1), (shouting:1.1), (street:1.1)",
|
||||
"Amnesia": "1girl, (amnesia:1.4), (confused:1.3), (holding_head:1.2), (hospital_bed:1.1), (bandages_on_head:1.1), (worried_boy:1.1), (who_are_you:1.1)",
|
||||
"The Plot Twist": "1boy, (shocked:1.4), (wide_eyes:1.3), (betrayal:1.3), 1girl, (holding_knife:1.3), (creepy_smile:1.2), (rain:1.1), (night:1.1)",
|
||||
"Cthulhu": "(cthulhu:1.5), (tentacles:1.4), (cosmic_horror:1.3), (ocean:1.1), (storm:1.1), (giant:1.2), (glowing_eyes:1.1), (city_in_background:1.1)",
|
||||
"Body Horror": "(body_horror:1.5), (grotesque:1.3), (mutation:1.3), (tentacles:1.2), (multiple_eyes:1.1), (screaming:1.1), (dark:1.1)",
|
||||
"Slasher Movie": "1girl, (running:1.3), (scared:1.4), (forest:1.1), (night:1.1), (masked_killer:1.4), (holding_knife:1.2), (chasing:1.2)",
|
||||
"Possession": "1girl, (possession:1.5), (glowing_eyes:1.3), (floating:1.2), (creepy_smile:1.2), (dark_aura:1.1), (bedroom:1.1), (levitating:1.1)",
|
||||
"Creepy Child": "1girl, (young_girl:1.1), (creepy:1.4), (emotionless:1.3), (staring:1.2), (holding_doll:1.1), (dark_hallway:1.1), (shadows:1.1)",
|
||||
"Blood Moon": "(blood_moon:1.5), (red_moon:1.4), (night_sky:1.1), (silhouette:1.1), (castle:1.1), (bats:1.1), (creepy:1.1)",
|
||||
"Cursed Object": "1boy, (holding:1.1), (cursed_object:1.5), (glowing:1.3), (skull:1.1), (amulet:1.1), (dark_aura:1.2), (scared:1.1), (attic:1.1)",
|
||||
"School Festival": "multiple, school_uniform, (school_festival:1.4), (food_stall:1.2), (takoyaki:1.1), (cotton_candy:1.1), (cheerful:1.1), (crowd:1.1)",
|
||||
"Maid Cafe": "1girl, (maid_outfit:1.4), (maid_cafe:1.3), (waitress:1.1), (serving_food:1.1), (omurice:1.2), (ketchup_art:1.1), (smiling:1.1)",
|
||||
"Sports Day": "1girl, school_uniform, (gym_uniform:1.3), (sports_day:1.4), (running_race:1.2), (finish_line:1.1), (cheering:1.1), (track_and_field:1.1)",
|
||||
"Culture Festival Play": "1boy, 1girl, (school_play:1.4), (stage:1.2), (costume:1.3), (prince_costume:1.1), (princess_dress:1.1), (audience:1.1), (acting:1.1)",
|
||||
"Club Activities": "multiple_girls, school_uniform, (clubroom:1.3), (tea_party:1.2), (eating_cake:1.2), (sitting:1.1), (laughing:1.1), (after_school:1.1)",
|
||||
"Exam Hell": "1girl, school_uniform, (studying:1.4), (tired:1.3), (yawn:1.1), (stack_of_books:1.3), (desk:1.1), (night:1.1), (coffee_mug:1.1)",
|
||||
"School Swimsuit": "1girl, (school_swimsuit:1.5), (sukumizu:1.4), (swimming_pool:1.2), (swimming:1.1), (wet_hair:1.1), (school:1.1)",
|
||||
"Band Practice": "multiple_girls, school_uniform, (band:1.3), (music:1.1), (playing_instrument:1.2), (guitar:1.1), (drums:1.1), (singing:1.1), (music_room:1.1)",
|
||||
"Gym Storage Room": "1boy, 1girl, (gym_storage:1.4), (equipment:1.1), (vaulting_horse:1.1), (mats:1.1), (trapped:1.2), (blushing:1.1), (awkward:1.1), (dark:1.1)",
|
||||
"Disguised Girl": "1girl, (disguised_as_boy:1.5), (school_uniform:1.1), (boy_school_uniform:1.2), (short_hair:1.1), (chest_binding:1.1), (serious:1.1)",
|
||||
"Trap": "1boy, (trap:1.5), (crossdressing:1.4), (female_school_uniform:1.3), (long_hair:1.1), (cute:1.1), (feminine:1.1), (blushing:1.1)",
|
||||
"Onsen Monkey": "(monkey:1.4), (japanese_macaque:1.2), (onsen:1.5), (hot_spring:1.3), (snow:1.2), (steam:1.1), (relaxing:1.1), (red_face:1.1)",
|
||||
"Ramen Shop": "(ramen_shop:1.4), (interior:1.1), 1boy, (eating:1.2), (ramen:1.3), (noodles:1.1), (chopsticks:1.1), (counter:1.1), (chef:1.1)",
|
||||
"Rainy Day Bus Stop": "1girl, school_uniform, (bus_stop:1.4), (rain:1.4), (umbrella:1.2), (sad:1.1), (looking_down:1.1), (wet:1.1), (bench:1.1)",
|
||||
"Vending Machine": "1girl, school_uniform, (vending_machine:1.4), (buying_drink:1.3), (can:1.1), (night:1.1), (street:1.1), (glowing:1.1)",
|
||||
"Convenience Store": "1girl, (convenience_store:1.4), (interior:1.1), (buying:1.1), (onigiri:1.1), (shelves:1.1), (brightly_lit:1.1), (night:1.1)",
|
||||
"Abandoned Theme Park": "(amusement_park:1.3), (abandoned:1.4), (overgrown:1.2), (rust:1.1), (ferris_wheel:1.2), (broken:1.1), (creepy:1.1), (day:1.1)",
|
||||
"Akihabara": "(akihabara:1.4), (cityscape:1.2), (anime_billboard:1.3), (crowd:1.1), (otaku:1.1), (maid:1.1), (day:1.1)",
|
||||
"Keikaku Doori": "1boy, (keikaku_doori:1.5), (evil_grin:1.4), (smug:1.3), (writing_in_book:1.3), (notebook:1.1), (glowing_red_eyes:1.1), (shadows:1.1)",
|
||||
"Nani?!": "1boy, (surprised:1.5), (shocked:1.4), (wide_eyes:1.3), (open_mouth:1.2), (sweatdrop:1.1), (speed_lines:1.1), (shouting:1.1), (nani:1.2), (close-up:1.1)",
|
||||
"Slap": "1girl, (slapping:1.5), 1boy, (slapped_face:1.3), (red_cheek:1.2), (surprised:1.1), (angry:1.1), (crying:1.1), (school_uniform:1.1)",
|
||||
"Head Pat": "1boy, (head_pat:1.5), (patting:1.3), 1girl, (blushing:1.3), (happy:1.2), (smiling:1.1), (school_uniform:1.1), (looking_up:1.1)",
|
||||
"Floor Pin": "1boy, (pinning_down:1.5), 1girl, (on_floor:1.3), (blushing:1.2), (surprised:1.1), (trapped:1.1), (school_uniform:1.1), (classroom:1.1)",
|
||||
"Shoulder Angel and Devil": "1boy, (conflicted:1.3), (shoulder_angel:1.4), (shoulder_devil:1.4), (miniature:1.2), (arguing:1.1), (confused:1.1)",
|
||||
"Sleepy": "1girl, (sleepy:1.4), (yawning:1.3), (rubbing_eyes:1.2), (pajamas:1.1), (bed:1.1), (messy_hair:1.1), (morning:1.1)",
|
||||
"Gasp": "1girl, (gasp:1.5), (hand_over_mouth:1.4), (shocked:1.3), (wide_eyes:1.2), (surprised:1.1), (close-up:1.1)",
|
||||
"Pout": "1girl, (pout:1.5), (puffy_cheeks:1.3), (angry:1.1), (arms_crossed:1.1), (blushing:1.1), (looking_away:1.1), (school_uniform:1.1)",
|
||||
"Facepalm": "1boy, (facepalm:1.5), (hand_on_face:1.3), (annoyed:1.2), (frustrated:1.1), (eyes_closed:1.1), (school_uniform:1.1)",
|
||||
"Shy Poke": "1girl, (shy:1.3), (poking_finger:1.5), 1boy, (looking_at:1.1), (confused:1.1), (blushing:1.2), (school:1.1)",
|
||||
"Aho Baka": "1girl, (shouting:1.3), (angry:1.2), (pointing_at:1.2), 1boy, (clueless:1.1), (sweatdrop:1.1), (school:1.1), (baka:1.3)",
|
||||
"Paladin": "1girl, (paladin:1.4), (holy_armor:1.4), (shining:1.2), (warhammer:1.2), (shield:1.1), (holy_magic:1.1), (glowing:1.1)",
|
||||
"Monk": "1boy, (monk:1.4), (martial_arts:1.3), (stance:1.2), (prayer_beads:1.2), (shaved_head:1.1), (muscular:1.1), (dojo:1.1)",
|
||||
"Alchemist": "1girl, (alchemist:1.4), (potion:1.3), (beaker:1.1), (glowing_liquid:1.1), (laboratory:1.2), (goggles:1.1), (book:1.1)",
|
||||
"Gunslinger": "1boy, (gunslinger:1.4), (cowboy_hat:1.3), (revolver:1.3), (duster_coat:1.2), (desert:1.1), (standoff:1.1), (smoking_gun:1.1)",
|
||||
"Cursed Forest": "(forest:1.3), (cursed:1.4), (dark:1.2), (twisted_trees:1.3), (glowing_eyes:1.2), (mist:1.1), (skulls:1.1)",
|
||||
"Royal Court": "(throne_room:1.4), (king:1.2), (queen:1.2), (throne:1.3), (kneeling:1.1), (knight:1.1), (guards:1.1), (fancy:1.1)",
|
||||
"Crystal Cave": "(cave:1.3), (crystals:1.5), (glowing:1.4), (blue_light:1.1), (underground:1.1), (adventurer:1.1), (torch:1.1)",
|
||||
"Floating Islands": "(floating_islands:1.5), (sky:1.3), (clouds:1.1), (waterfall:1.1), (airship:1.2), (fantasy:1.1), (bridge:1.1)",
|
||||
"Lava World": "(volcano:1.4), (lava:1.5), (lava_river:1.3), (rock:1.1), (glowing:1.1), (heat:1.1), (demon:1.1), (fire:1.1)",
|
||||
"Ice Palace": "(palace:1.4), (ice:1.5), (glowing:1.3), (frozen:1.2), (icicles:1.1), (snow_queen:1.1), (white_dress:1.1)",
|
||||
"Desert Oasis": "(oasis:1.4), (desert:1.3), (palm_trees:1.3), (water:1.2), (sand_dunes:1.1), (camel:1.1), (sunny:1.1)",
|
||||
"Steampunk City": "(city:1.3), (steampunk:1.5), (gears:1.3), (cogs:1.1), (airship:1.2), (goggles:1.1), (victorian_clothes:1.1), (smokestack:1.1)",
|
||||
"Slime": "(slime:1.5), (blue_slime:1.2), (blob:1.1), (bouncing:1.1), (dungeon:1.1), (fantasy:1.1), (cute:1.1)",
|
||||
"Goblin": "(goblin:1.4), (green_skin:1.3), (pointy_ears:1.1), (loincloth:1.1), (club:1.1), (horde:1.1), (cave:1.1)",
|
||||
"Orc": "(orc:1.4), (green_skin:1.3), (tusk:1.2), (muscular:1.1), (warrior:1.1), (battle_axe:1.1), (fur_armor:1.1)",
|
||||
"Dryad": "1girl, (dryad:1.5), (tree_spirit:1.3), (bark_skin:1.2), (leaves:1.1), (vines:1.1), (forest:1.1), (glowing:1.1)",
|
||||
"Centaur": "(centaur:1.5), (half_human:1.2), (half_horse:1.2), (archer:1.1), (bow:1.1), (forest:1.1), (fantasy:1.1)",
|
||||
"Harpy": "1girl, (harpy:1.5), (wings_for_arms:1.4), (talons:1.3), (feathers:1.1), (flying:1.1), (mountain:1.1)",
|
||||
"Lamia": "1girl, (lamia:1.5), (snake_girl:1.4), (snake_tail:1.4), (scales:1.1), (desert:1.1), (seductive:1.1)",
|
||||
"Giant Spider": "(giant_spider:1.5), (arachnid:1.3), (multiple_eyes:1.2), (web:1.2), (cave:1.1), (creepy:1.1)",
|
||||
"Beholder": "(beholder:1.5), (one_large_eye:1.4), (multiple_eyestalks:1.4), (floating:1.1), (magic_beam:1.1), (dungeon:1.1)",
|
||||
"Lich": "(lich:1.5), (undead:1.3), (skeleton:1.2), (robe:1.1), (crown:1.1), (glowing_blue_eyes:1.1), (staff:1.1), (necromancy:1.1)",
|
||||
"Dullahan": "1girl, (dullahan:1.5), (headless:1.4), (holding_own_head:1.4), (armor:1.1), (black_horse:1.1), (glowing_spine:1.1), (night:1.1)",
|
||||
"Gargoyle": "(gargoyle:1.5), (stone_statue:1.3), (wings:1.1), (sitting:1.1), (perched:1.1), (rooftop:1.1), (gothic_architecture:1.1)",
|
||||
"Chibi": "1girl, (chibi:1.6), (deformed:1.3), (large_head:1.2), (cute:1.1), (simple_background:1.1)",
|
||||
"Dark Magical Girl": "1girl, (dark_magical_girl:1.5), (black_outfit:1.3), (glowing_red_eyes:1.2), (dark_aura:1.2), (corrupted:1.1), (evil_smile:1.1)",
|
||||
"Oiran": "1girl, (oiran:1.5), (courtesan:1.3), (elaborate_kimono:1.4), (kanzashi:1.3), (geta:1.1), (long_pipe:1.1), (red_light_district:1.1)",
|
||||
"Mummy": "1girl, (mummy_girl:1.5), (bandages:1.4), (wrapped:1.3), (ancient_egyptian:1.1), (tomb:1.1), (shy:1.1)"
|
||||
}
|
||||
+10
-6
@@ -1,14 +1,18 @@
|
||||
[project]
|
||||
name = "comfyui_sata_utilitynode"
|
||||
description = "ComfyUI utility nodes collection providing features like prompt machine, resolution machine, and upscale machine to enhance workflow efficiency."
|
||||
version = "1.2.0"
|
||||
license = "MIT"
|
||||
name = "sata_utilitynode"
|
||||
description = "A collection of utility nodes including image upscale,touchpad support and CSV-driven prompt machine for ComfyUI."
|
||||
version = "1.5.0"
|
||||
license = {file = "LICENSE"}
|
||||
|
||||
dependencies = ["opencv-python>=4.5.0", "spandrel", "piexif"]
|
||||
|
||||
[project.urls]
|
||||
Repository = "https://github.com/SatadalAI/SATA_UtilityNode"
|
||||
# Used by Comfy Registry https://comfyregistry.org
|
||||
# Used by Comfy Registry https://registry.comfy.org
|
||||
Documentation = "https://github.com/SatadalAI/SATA_UtilityNode/wiki"
|
||||
"Bug Tracker" = "https://github.com/SatadalAI/SATA_UtilityNode/issues"
|
||||
|
||||
[tool.comfy]
|
||||
PublisherId = "SatadalAI"
|
||||
DisplayName = "SATA_UtilityNode"
|
||||
Icon = ""
|
||||
Icon = ""
|
||||
|
||||
+1
-3
@@ -1,5 +1,3 @@
|
||||
opencv-python>=4.5.0
|
||||
spandrel
|
||||
nvidia-tensorrt>=8.0
|
||||
onnx>=1.12.0
|
||||
onnxruntime-gpu>=1.12.0
|
||||
piexif
|
||||
Reference in New Issue
Block a user