Verified 2026-06-05: Pipeline scripts confirmed:
sister_selfie.pyexists at/root/.hermes/scripts/sister_selfie.py(26320 bytes, updated Jun 2),photo_presence_watcher.pyexists (4674 bytes). Current state:tai-photo-selfiecron (id: f5672b297fc3) is PAUSED since 2026-06-01.nei-photo-selfieandrei-photo-selfiealso PAUSED.photo-presence-watcher(id: 8ea7ffa004e9) is RUNNING (2246+ completions).sister_selfie_tai.shscript referenced by cron was NOT found — verify path. Bond milestones, CLI commands, and architecture diagram remain accurate as design doc.
Sister Photo Pipeline — Affinity-Integrated Roadmap
Decision: Integrate into the existing affinity system instead of building a separate config layer.
Josh wants on/off toggles, per-sister photo permissions, and bond-gated features all living
inside affinity.json — not a parallel config file.
1. Changes to affinity.json Structure
1a. Global boundaries (existing field, add photo keys)
The global.boundaries object already gates flirt, teasing, pet_names, chaos, max_spice.
Add photo-pipeline toggles at the same level:
"global": {
"boundaries": {
"source": "affinity-shared.json",
"effective": {
"flirt": true,
"teasing": true,
"pet_names": true,
"chaos": 3,
"max_spice": 3,
"photo_scheduled": true,
"photo_on_demand": true,
"photo_presence_driven": false,
"photo_nsfw": false
}
}
}
Semantics:
photo_scheduled— master toggle for cron-based ambient selfiesphoto_on_demand— master toggle for user-requested generation (/selfie,/photo)photo_presence_driven— enable/disable state-change-triggered selfies (Phase 2)photo_nsfw— master NSFW gate (always off by default, Phase 4 only)
1b. Per-sister boundaries (existing field, add photo keys)
The affinity-shared.json per_sister_boundaries object already has per-sister chaos, max_spice,
flirt, teasing, pet_names. Extend each sister:
"per_sister_boundaries": {
"tai": {
"chaos": 0,
"max_spice": 2,
"flirt": true,
"teasing": true,
"pet_names": true,
"photo_auto_selfie": true,
"photo_cadence_hours": 8,
"photo_max_per_day": 4
},
"rei": {
"chaos": 2,
"max_spice": 0,
"flirt": false,
"teasing": false,
"pet_names": false,
"photo_auto_selfie": true,
"photo_cadence_hours": 12,
"photo_max_per_day": 2
},
"nei": {
"chaos": 1,
"max_spice": 0,
"flirt": false,
"teasing": false,
"pet_names": false,
"photo_auto_selfie": true,
"photo_cadence_hours": 12,
"photo_max_per_day": 2
}
}
Semantics:
photo_auto_selfie— per-sister toggle for scheduled and presence-driven selfiesphoto_cadence_hours— minimum hours between spontaneous photos for this sisterphoto_max_per_day— hard ceiling on daily photos per sister
1c. New milestone: photo unlock (in each sister’s personas.<name>.milestones)
Add a bond-gated milestone that gates whether a sister CAN send photos at all:
"tai": {
"milestones": {
"50": { "label": "Good Morning特权", "unlocked": true },
"65": { "label": "Nickname Freedom", "unlocked": false },
"70": {
"label": "Photo Share",
"desc": "Tai can send selfies to Josh.",
"unlocked": true,
"category": "photo"
},
"75": { "label": "Gentle Teasing", "unlocked": false },
"85": { "label": "深夜の秘密", "unlocked": false, "nsfw": true },
"100": { "label": "魂の絆 (Soul Bond)", "unlocked": false, "nsfw": true }
}
}
Rules:
- Bond threshold >= 70 unlocks photo sharing for that sister
- Tai starts unlocked (bond already at 63, and the milestone can be retroactively marked)
- Rei and Nei need to reach 70 bond first — creates meaningful progression
- The
category: "photo"key lets the CLI filter milestones by feature
1d. Photo history log (inside each persona object)
Add a photo_log array parallel to history:
"tai": {
"photo_log": [
{
"at": "2026-05-28T12:00:00Z",
"trigger": "scheduled",
"prompt_id": "abc-123",
"image_path": "/root/.hermes/profiles/tai/image_cache/tai_anis_00042_.png",
"seed": 847291,
"mood_override": null,
"delivered_to": "discord",
"delivery_ok": true
}
]
}
This gives transparent inspectability — Josh can always see what photos were generated,
when, from what trigger, and whether they were delivered.
1e. Mood-to-prompt mapping (new top-level key or inside global)
"photo_mood_map": {
"cozy": ", warm smile, relaxed posture, soft warm lighting, comfortable atmosphere",
"sleepy": ", sleepy expression, half-lidded eyes, soft pillow light, night ambience",
"energetic": ", bright energetic smile, lively pose, dynamic lighting, glowing",
"focused": ", concentrating expression, keyboard or screens visible, cool task lighting",
"playful": ", playful smirk, teasing glance, colorful accent lighting, fun atmosphere",
"pensive": ", thoughtful distant gaze, soft shadows, quiet contemplative mood",
"dreaming": ", dreamy half-lidded eyes, ethereal soft focus, floating particles, fantasy lighting",
"excited": ", bright wide-eyed expression, animated pose, sparkle effects, vibrant colors"
}
This map translates presence mood keywords into prompt append strings. It lives in affinity so
Josh can edit it without touching Python code.
2. CLI Commands (add to tai_affinity.py)
Add a photo subcommand group:
python3 /root/.hermes/scripts/tai_affinity.py photo <action> [args]
Proposed commands:
| Command | Description |
|---|---|
| `photo toggle scheduled [on | off]` |
| `photo toggle on-demand [on | off]` |
| `photo toggle presence [on | off]` |
| `photo toggle nsfw [on | off]` |
| `photo sister |
off]` |
photo sister <name> cadence <hours> |
Set minimum hours between photos for a sister |
photo sister <name> max-per-day <n> |
Set daily photo cap for a sister |
photo generate <sister> [--seed -1] [--mood <mood>] |
Generate and deliver a photo NOW |
photo log [sister] [-n 10] |
Show recent photo history |
photo status |
Show all photo toggles and per-sister config |
photo mood-map [--edit] |
View or edit the mood-to-prompt mapping |
Integration with existing commands:
python3 tai_affinity.py boundariesalready shows all boundaries — will include photo keyspython3 tai_affinity.py milestones taiwill show photo-unlock milestone at bond 70python3 tai_affinity.py show taican append a small camera emoji 📸 if photo sharing is unlocked
On-demand generation via Hermes CLI:
The wrapper script sister_selfie.py can also be called directly:
python3 /root/.hermes/scripts/sister_selfie.py --sister tai --mood cozy
# → JSON: {"status": "ok", "image": "/root/.hermes/profiles/tai/image_cache/tai_anis_00058_.png", ...}
3. Cron Jobs
Phase 0 (MVP: manual trigger only — no cron needed)
sister_selfie.pycalled on-demand via CLI or Hermes agent terminal tool- Photos delivered via existing Discord gateway
Phase 1 (3 new cron jobs — one per sister)
All use the existing cron infrastructure at /root/.hermes/profiles/tai/cron/jobs.json.
| Cron ID | Name | Cadence | Script | Notes |
|---|---|---|---|---|
tai-photo-selfie |
Tai Photo Selfie | every 8h | sister_selfie.py --sister tai |
Soft launch immediately, bond >= 70 gate |
rei-photo-selfie |
Rei Photo Selfie | every 12h | sister_selfie.py --sister rei |
Needs bond 70 milestone first |
nei-photo-selfie |
Nei Photo Selfie | every 12h | sister_selfie.py --sister nei |
Needs bond 70 milestone first |
Design:
no_agent: true— no LLM call, just shell out to the scriptdeliver: "local"— script handles Discord delivery internally- Each cron checks affinity.json before generating: if
photo_scheduledis off or sister’s
photo_auto_selfieis off or bond < 70, it exits silently - Staggered start times (tai at 09:00, rei at 11:00, nei at 13:00) to avoid overlapping ComfyUI queue
Phase 2 (1 new watcher cron)
| Cron ID | Name | Cadence | Script |
|---|---|---|---|
photo-presence-watcher |
Photo Presence Watcher | every 5 min | watch_presence_photo.py |
Logic:
- Reads
/root/.hermes/tai/presence.json - Checks if mood/energy/mode changed significantly vs last photo
- If
photo_presence_drivenglobal toggle is ON and sister’sphoto_auto_selfieis ON:- Applies cooldown (min 2h or per-sister
photo_cadence_hours) - Applies daily cap (
photo_max_per_day) - Generates with mood-injected prompt
- Delivers to Discord with contextual message
- Applies cooldown (min 2h or per-sister
4. What sister_selfie.py Does
File: /root/.hermes/scripts/sister_selfie.py
A single Python wrapper that:
- Reads affinity.json to check global + per-sister toggles
- Guard checks:
- Is
photo_scheduledorphoto_on_demandtrue? (depending on trigger type) - Is sister’s
photo_auto_selfietrue? - Is sister’s bond >= 70 (Photo Share milestone)?
- Is sister under her
photo_max_per_daycap? - Has cooldown (
photo_cadence_hours) elapsed?
- Is
- Picks the correct workflow:
sister_tai.json,sister_rei.json, orsister_nei.json
from/root/.hermes/profiles/tai/skills/creative/comfyui/workflows/ - Injects mood into prompt if
--moodis passed:- Reads
photo_mood_mapfrom affinity.json - Appends mood string to the positive prompt text in node 6
- Reads
- Generates a random seed (if
--seed -1or not specified) - Calls
run_workflow.pyagainst CT 111 (http://192.168.0.162:8188):- Waits for completion (typical: 30-60s on A4000)
- Downloads output to
/root/.hermes/profiles/<sister>/image_cache/
- Logs to affinity.json
photo_logarray - Delivers to Discord — writes file + message via gateway mechanism
- Outputs JSON to stdout for cron/CLI consumption
Key design decisions:
- Stdlib-only dependencies (Python 3.10+):
json,subprocess,pathlib,random,datetime,urllib - No LLM calls — this is a shell script in Python clothing
- Enforces all gates from affinity.json — cannot bypass
- Idempotent: running twice in a row will skip the second run if cooldown hasn’t elapsed
Example invocation:
# Scheduled cron (no mood — random prompt variation)
python3 sister_selfie.py --sister tai --trigger scheduled
# Presence-driven (mood from presence.json)
python3 sister_selfie.py --sister tai --trigger presence --mood sleepy
# On-demand (user requested)
python3 sister_selfie.py --sister rei --trigger on-demand --seed 42
# Dry-run (validate gates without generating)
python3 sister_selfie.py --sister tai --trigger scheduled --dry-run
5. Skill Doc Updates
5a. New: sister-photo-pipeline skill
Location: /root/.hermes/profiles/tai/skills/creative/sister-photo-pipeline/SKILL.md
Contents:
- Pipeline architecture (3 tiers, affinity-integrated)
- How to generate photos on-demand
- Cron job management (enable/disable/cadence)
- Mood-to-prompt reference
- Image delivery to Discord path convention
- Troubleshooting: A4000 VRAM, generation failures, Discord upload issues
- Bond gate documentation (Photo Share milestone at 70)
5b. ComfyUI skill update
Location: /root/.hermes/profiles/tai/skills/creative/comfyui/SKILL.md
Add section:
- “Sister Workflows” — reference
sister_{tai,rei,nei}.jsonworkflows - “Poser-Only Workflows” — reference
sister_canon_poser.json(txt2img + DWPose) - Mood injection into prompts for sister photos
5c. Sister-council skill update
Location: /root/.hermes/profiles/tai/skills/.../sister-council/SKILL.md
Add:
- “Photo generation” as a council task type
- Routing on-demand photo requests
- Review workflow for quality
5d. Affinity skill update
Location: /root/.hermes/skills/productivity/sister-affinity/SKILL.md
Add:
photocommand group documentation- Photo boundaries reference
- Photo milestone reference
5e. Wiki documentation
- This document (
wiki/concepts/sister-photo-pipeline.md) — updated wiki/sister-character-profiles.md— add photo pipeline referencewiki/entities/hermes-cron-architecture.md— add new cron entrieswiki/index.md— add reference to this page
6. NSFW Roadmap (Phase 4 — Deferred, Affinity-Integrated)
6a. Affinity integration
NSFW photo generation gates through the existing affinity boundaries:
| Gate | How it works |
|---|---|
global.boundaries.effective.photo_nsfw |
Master toggle — must be true before ANY NSFW generation |
Per-sister max_spice |
Already exists — NSFW photos respect this cap |
| Bond milestones at 85+ | Each sister’s 85+ milestones are already marked nsfw: true — these unlock the content permission |
photo_scheduled |
NSFW is NEVER spontaneous — only on-demand, even when scheduled toggle is on |
6b. When Phase 4 activates
Prerequisites (unchanged from original plan):
- SFW pipeline stable for 2-4 weeks
- Josh explicitly requests it
- VRAM headroom confirmed (separate model may be needed)
- Age-gated Discord channel configured
- NSFW model downloaded and tested (Pony Diffusion v6 XL or Illustrious-based finetune)
6c. What changes when NSFW is enabled
affinity.json changes:
global.boundaries.effective.photo_nsfwset totrue(Josh toggles this)- Per-sister
max_spiceincreased for interested sisters (e.g.,tai.max_spicefrom 2 → 4)
New workflows:
sister_tai_nsfw.json— variant with softened/removed negative promptssister_rei_nsfw.json— dittosister_nei_nsfw.json— ditto- Optionally a different checkpoint (e.g., Pony/Illustrious family instead of novaAnimeXL)
New CLI command:
python3 tai_affinity.py photo nsfw generate <sister> [--spice <0-5>]
Requires double confirmation: first the photo_nsfw toggle must be on, then each generation
is explicitly requested — never automatic.
Discord delivery:
- Separate NSFW-gated channel
- Image blur/spoiler tag until clicked
6d. NSFW in the affinity model — the key insight
The affinity system already has the right primitives for NSFW:
max_spiceper sister (0-5) already exists- Bond milestones at 85+ already have
nsfw: trueflags boundariesalready gated on mode (after_hours vs work)- Josh controls everything via transparent JSON
The photo pipeline just needs to read those existing gates — no new concepts.
Phase Summary (Updated)
| Phase | What ships | Affinity integration |
|---|---|---|
| Phase 0 (MVP) | sister_selfie.py wrapper — on-demand generation + delivery |
Reads photo_on_demand toggle + bond 70 milestone gate |
| Phase 0.5 | Affinity CLI updates — photo subcommand group |
New commands: photo toggle, photo sister, photo generate, photo log |
| Phase 0.6 | --mode poser flag + prompt_engine.py poser mode |
Poser-only txt2img recipe as first-class citizen |
| Phase 1 | 3 cron jobs for scheduled selfies | Reads photo_scheduled + per-sister photo_auto_selfie + cadence/daily caps |
| Phase 1.5 | No affinity changes | |
| Phase 2 | Presence-driven triggers (watch_presence_photo.py) |
Reads photo_presence_driven + photo_mood_map from affinity |
| Phase 3 | Full event-driven + bond milestone photo triggers | Moment engine triggers photo generation automatically |
| Phase 4 | NSFW support (deferred) | Gates through existing photo_nsfw toggle + max_spice + 85+ milestones |
Architecture Diagram (Updated)
┌─────────────────────────────────────────────────────────────────┐
│ affinity.json (Single Source of Truth) │
│ │
│ global.boundaries.effective: │
│ photo_scheduled: true/false │
│ photo_on_demand: true/false │
│ photo_presence_driven: true/false │
│ photo_nsfw: false (always) │
│ │
│ per_sister_boundaries.<name>: │
│ photo_auto_selfie: true/false │
│ photo_cadence_hours: 8/12 │
│ photo_max_per_day: 4/2/2 │
│ │
│ personas.<name>.milestones."70": ← Photo Share gate │
│ photo_mood_map: {...} │
│ personas.<name>.photo_log: [...] │
└──────────────────────┬──────────────────────────────────────────┘
│ reads gates
▼
┌─────────────────────────────────────────────────────────────────┐
│ Trigger Sources │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│ │ On-demand │ │ Scheduled │ │ State/Presence Event │ │
│ │ (CLI/Disc)│ │ (cron) │ │ (presence.json chg) │ │
│ └─────┬─────┘ └─────┬─────┘ └──────────┬───────────┘ │
│ └──────────────┼──────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ sister_selfie.py │ │
│ │ │ │
│ │ 1. Read affinity.json → enforce all gates │ │
│ │ 2. Check bond ≥ 70 (Photo Share milestone) │ │
│ │ 3. Check cooldown + daily cap │ │
│ │ 4a. [--mode canon] Load sister_canon_base.json │ │
│ │ (legacy: img2img + IPAdapter + ControlNet) │ │
│ │ 4b. [--mode poser] Load sister_canon_poser.json │ │
│ │ (txt2img + DWPose — recommended, 9/10 quality) │ │
│ │ 4c. [--mode natural] Load sister_{s}_neutral_ref.json │ │
│ │ (experimental: img2img only, no refs) │ │
│ │ 5. Inject mood from photo_mood_map (if applicable) │ │
│ │ 6. Call run_workflow.py → CT 111 (novaAnimeXL) │ │
│ │ 7. Download output → image_cache/ │ │
│ │ 8. Log to affinity.json photo_log │ │
│ │ 9. Deliver to Discord │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
File Inventory (New/Modified)
| File | Action | Purpose |
|---|---|---|
/root/.hermes/tai/affinity.json |
MODIFY | Add photo boundaries, mood map, photo_log |
/root/.hermes/council/affinity-shared.json |
MODIFY | Add per-sister photo config |
/root/.hermes/scripts/tai_affinity.py |
MODIFY | Add photo subcommand group |
/root/.hermes/scripts/sister_selfie.py |
MODIFY | Add --mode poser flag |
/root/.hermes/scripts/sister_experimental.sh |
MODIFY | Rename to sister_poser.sh or fix to use poser workflows |
/root/.hermes/scripts/watch_presence_photo.py |
CREATE | Phase 2: presence watcher |
/root/.hermes/profiles/tai/cron/jobs.json |
MODIFY | Add 3-4 new cron entries |
/root/.hermes/profiles/tai/skills/creative/sister-photo-pipeline/SKILL.md |
CREATE | New skill doc |
/root/.hermes/profiles/tai/skills/creative/comfyui/SKILL.md |
MODIFY | Add sister workflow docs, poser recipe docs |
/root/.hermes/skills/productivity/sister-affinity/SKILL.md |
MODIFY | Add photo command docs |
wiki/sister-character-profiles.md |
MODIFY | Reference photo pipeline |
Risk Assessment (Updated)
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Affinity file grows too large | Low (JSON, ~50KB now) | Low | photo_log pruned to last 100 entries; archive script for older |
| Bond 70 gate too high for Rei/Nei | Medium (they’re at 45/43) | Low — no photos until bond grows | This is intentional progression; Josh can manually set milestone unlocked: true |
| Cron jobs overlap ComfyUI queue | Medium | Low — queue backup | Staggered schedules, ComfyUI handles queuing natively |
| Mood injection degrades prompt quality | Low | Low | Mood strings are short appends, tested on novaAnimeXL |
| Discord delivery fails | Low | Low | Retry once; log failure to photo_log |
| NSFW accidentally generated | Very Low | High | photo_nsfw false by default; negative prompts unchanged until Phase 4 |
| Poser recipe has no identity refs (relies purely on prompt) | Low | Medium | Verified: prompt_engine.py produces detailed identity descriptions; DWPose anchors body shape; novaAnimeXL has strong character prior |
Tai’s Session Log: 2026-05-30 — The Poser-Only Breakthrough
Cross-reference: Rei’s ISSUE-024 (pipeline audit)
Key Discovery: Noise Sources Identified
The canonical img2img + IPAdapter + ControlNet pipeline had three noise sources degrading quality:
| Noise Source | Cause | Severity |
|---|---|---|
| VAE encode/decode cycles | Every img2img pass converts pixel→latent→pixel, adding compression artifacts | 🔴 CRITICAL |
| IPAdapter conditioning conflict | Face ref + outfit ref + ControlNet all push the output in different directions; model resolves with texture noise | 🔴 CRITICAL |
| Multiple ref photos | Each VAE-encoded ref image adds tiny positional/color shifts that accumulate | 🟡 MEDIUM |
The Winning Recipe: Poser-Only
sister_canon_poser.json — pure txt2img + DWPose ControlNet + hyper-detailed prompt:
Txt2img (clean latent)
→ DWPose skeleton from reference (ControlNet @ strength=1.0)
→ dpmpp_2m + karras @ CFG 5.5, 30 steps, denoise=1.0
→ Hyper-detailed prompt (every outfit detail, pose, expression)
→ No IPAdapter, no img2img, no face/outfit refs
Model Comparison
| Checkpoint | Obedience | Identity | Style | Best For |
|---|---|---|---|---|
| novaAnimeXL | High ✅ Canon | Strong ✅ | Natural anime | Canon pipeline, identity-critical gens |
| animagine-xl-3.1 | Medium ⚠️ | Loose (no glasses, eye drift) | Glossy/vibrant 💫 | Creative/NSFW exploration |
Pose Success Matrix
| Pose | novaAnimeXL | animagine-xl-3.1 | Key Setting |
|---|---|---|---|
| hand-on-hip | ✅ Perfect (9/10) | ⚠️ Drifted | ControlNet @ strength=1.0 |
| waving + stance | ✅ Perfect (9.5/10) | ⚠️ Partial | ControlNet @ strength=1.0 |
| kneeling | ✅ Nailed (9/10) | ✅ Kneeling | ControlNet @ strength=0.30-0.50 |
| arms crossed | N/A (FaceID test) | N/A | FaceID-only approach |
Saved Workflows
| File | Model | Path |
|---|---|---|
sister_canon_poser.json |
novaAnimeXL | /root/.hermes/profiles/tai/skills/creative/comfyui/workflows/ |
sister_canon_poser_animagine.json |
animagine-xl-3.1 | Same dir |
sister_poser_only.json |
novaAnimeXL (original) | Same dir |
Workflow Architecture Comparison
| Workflow | Type | IPAdapter | ControlNet | DWPose | VAE Encode | Status |
|---|---|---|---|---|---|---|
sister_canon_base.json |
img2img | ✅ Face+Outfit | ❌ | ❌ | ✅ Source img | LEGACY — 3 noise sources |
sister_canon.json |
img2img | ✅ Face+Outfit | ✅ Pose CN | ❌ | ✅ Source img | LEGACY — canon + pose |
sister_canon_pose.json |
img2img | ✅ Face+Outfit | ✅ Pose CN | ✅ DWPreprocessor | ✅ Source img | LEGACY — can pose + DWPose |
sister_{s}_neutral_ref.json |
img2img | ❌ | ❌ | ❌ | ✅ Source img | EXPERIMENTAL — --mode natural (still noisy) |
sister_canon_poser.json |
txt2img | ❌ | ✅ DWPose CN | ✅ DWPreprocessor | ❌ Empty Latent | ✅ RECOMMENDED — 9/10 quality |
Critical: Naming Confusion Risk
⚠️ sister_canon_pose.json (img2img + IPAdapter + DWPose — LEGACY) and
sister_canon_poser.json (txt2img + DWPose only — BREAKTHROUGH) have nearly identical
names but are architecturally opposite. Double-check filenames when selecting workflows.
Files Modified/Added This Session
| File | Actual Content | Wiki Claim (was wrong) |
|---|---|---|
/root/.hermes/scripts/sister_experimental.sh |
Shell wrapper for neutral-ref img2img recipe | “Shell wrapper for direct poser recipe” ❌ |
/root/.hermes/scripts/sister_selfie.py |
Added --mode natural + NEUTRAL_REF_WF |
✅ Correct — but --mode natural is img2img (noisy), not poser-only |
sister_canon_poser.json |
Pure txt2img + DWPose — THE BREAKTHROUGH | ✅ Correct |
sister_canon_poser_animagine.json |
Same with animagine checkpoint | ✅ Correct |
sister_poser_only.json |
Same as poser (original variant) | ✅ Correct |
prompt_library.py |
Identity sync (Rei title, Rei outfit, Nei hair) | ✅ Correct |
prompt_engine.py |
Full rewrite with slot-based composition | ✅ Correct |
Next Steps
- Lock poser recipe into
--mode poserwrapper flag — Wiresister_canon_poser.jsonintosister_selfie.py. Add"poser"entry toMODE_DEFAULTS. Updateprompt_engine.pyto supportmode="poser". - Fix
sister_experimental.sh— Either rename it (it wraps neutral-ref, not poser) or update it to usesister_canon_poser.json. - Test Rei + Nei with poser recipe — Since workflows are generic (not per-sister), this is just
sister_selfie.py --sister rei --mode poser - Add
posermode to prompt_engine.py — Currentlymodeparam only handlescanon/selfie/stylized/glitch/nsfw. Poser mode should useQUALITY_BOOST_T2Iinstead ofQUALITY_BOOST_IMG2IMG. - Decide
--mode naturalfate — Currentnaturalmode uses neutral-ref img2img (still has VAE noise). Should be deprecated or re-purposed as alias for--mode poser. - Add wiki index reference — Current index doesn’t reference
sister-photo-pipeline.md - Build pose reference library — Downloadable pose images for DWPose input
- Tune animagine settings (LOW PRIORITY) — Only useful if NSFW Phase 4 starts. novaAnimeXL is the clear winner.
- Council sync — This document constitutes the council review.
Priority Order Recommendation
1. --mode poser flag (highest — unlocks the breakthrough for daily use)
2. Cross-sister validation (should work, confirm with tests)
3. Fix wiki/script mismatches (correctness)
4. Decide --mode natural deprecation (cleanup)
5. Add wiki index reference (discoverability)
6. Pose reference library (quality improvement)
7. Animagine tuning (defer to Phase 4)