# Generating deck assets with ComfyUI

Use this when ComfyUI is generating internal visuals for an HTML-first pitch deck.

## Asset strategy

Generate images as mood/visual anchors, not as literal UI screenshots unless the workflow is designed for clean text. Generic SD/SDXL-style txt2img often invents unreadable glyphs in dashboard/feed/timeline concepts.

Safe deck asset categories:

- premium editorial hero image
- abstract activity rhythm
- feed or calendar mood board
- identity-control / mirror concept
- creation desk / production mood
- approval or validation mood image
- abstract business dashboard
- pilot timeline mood image

## Prompting rules

Positive prompts:

- name the visual role: `premium editorial portrait`, `abstract dashboard`, `luxury content studio`, `30 day pilot timeline concept`
- specify non-explicit creator/fashion context when relevant
- specify `no readable text` for UI-like concepts
- ask for premium/cinematic/high-fashion mood rather than platform-specific UI

Negative prompt should include:

```text
text, watermark, logo, words, letters, signature, low quality, blurry, distorted face, extra fingers, bad anatomy, nude, explicit, pornographic, cheap, plastic skin, overprocessed, cartoon, anime
```

## Post-processing UI-like generations

If generated dashboards, feeds, tablets, or timelines contain fake text:

1. Do not present the fake text as real UI.
2. Convert them to mood visuals by applying light blur, reduced contrast, and color harmonization.
3. Overlay them in the HTML deck with labels/captions that explain the concept.
4. Prefer JPG quality 85-90 for web deck delivery.

Example Pillow post-process:

```python
from PIL import Image, ImageFilter, ImageEnhance
im = Image.open(src).convert('RGB')
im = im.filter(ImageFilter.GaussianBlur(radius=2.8))
im = ImageEnhance.Contrast(im).enhance(0.88)
im = ImageEnhance.Color(im).enhance(1.12)
im.save(dst, quality=88, optimize=True)
```

## Integration checklist

- Save originals under a durable asset directory, e.g. `deck_assets/<deck_name>/`.
- Save web derivatives under `deck_assets/<deck_name>_web/`.
- Reference images with relative paths from the HTML file so static serving works.
- Verify with desktop and iPhone screenshots after insertion.
- If the deck will be public, keep images tasteful, non-explicit, and free of recognizable third-party logos.

## Explicit content in decks

When the deck is for a private pitch (e.g. OnlyFans/creator services) and the
user requests explicit/nude example images:

- **Use Z-Image Turbo** (uncensored) for explicit content. See
  `references/z-image-turbo-local.md` for the working API workflow.
- **Nano Banana 2 will refuse or soften** explicit prompts due to Gemini
  safety filters. It works for artistic/suggestive nudes but not for
  explicit content.
- Generate 3+ variants and let the user choose via Telegram delivery
  (send each image individually for review).
- Do NOT blur or post-process explicit images unless the user asks.
- Keep the deck HTML serving on a private URL (Tailscale Funnel with
  restricted access) if it contains explicit content.
