Add analysis profiles with distance/proximity-aware axes

A discrete verdict collapses magnitude and a generic axis can hide what you're
calibrating (a blowjob where the head is 20cm away still reads sexual_act=oral ->
MATCH). New 'profile' input selects an act-specialized axis set (general / oral /
penetration / handjob / solo) whose act-critical axes capture distance explicitly
(mouth_genital_distance: touching/<5cm/10-20cm/>20cm, oral_depth, insertion_depth,
stroke_position, ...). axes now overrides the profile when set. agent_bridge gains
--profile; workflows + docs updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-27 00:48:46 +02:00
parent 06992506d7
commit 887dfc0bbb
6 changed files with 95 additions and 7 deletions
+21
View File
@@ -56,6 +56,27 @@ Each axis carries a one-line definition in the prompt (so e.g. `gender_mix` is a
not a position). Coarse axes blur the differences that matter for adult imagery; the act /
pose cluster is split into many axes so the agent gets specific, actionable targets.
## Analysis profiles (pick the axis set for the act)
A discrete verdict collapses *magnitude*, and a generic axis can hide the very thing you're
calibrating: for a blowjob, `sexual_act` reads "oral" in both ref and gen → MATCH, even if
in the gen the head is 20 cm from the penis. So the judge has **analysis profiles** — act-
specialized axis sets whose act-critical axes are **distance/proximity-aware**:
| profile | adds (beyond the shared identity/body/render base) |
|---|---|
| `general` | sexual_act, body_orientation, limb_arrangement, penetration, contact_points, genital_visibility, pose |
| `oral` | **mouth_genital_contact**, **mouth_genital_distance** (touching / <5cm / 1020cm / >20cm), **oral_depth** (tip/half/throat), tongue, hand_on_shaft, gaze_up |
| `penetration` | insertion_depth (tip/shallow/half/hilt), insertion_angle, body_orientation, limb_arrangement, … |
| `handjob` | hand_on_shaft, grip_style, stroke_position (base/mid/tip), mouth_genital_contact, … |
| `solo` | self_touch_location, toy_use, insertion_depth, … |
Now "mouth on the tip" vs "head 20 cm away" is a concrete, scored difference
(`mouth_genital_distance: mismatch ref:[contact] gen:[far >20cm]`) — the magnitude lives
in the `ref`/`gen` text. Set `profile` on the node (or `agent_bridge.py --profile oral`),
or override entirely with a custom `axes` list. Profiles are easy to extend in
`PROFILES`/`AXIS_DEFS` in `nodes/qwen_judge.py`.
## Step 0 — first pass (describe / bootstrap)
The very first iteration has no generated image yet, so the judge runs in **describe