Tune Krea2 POV doggy prompts

This commit is contained in:
2026-06-29 01:05:36 +02:00
parent ef3b983712
commit bb53967df4
5 changed files with 183 additions and 7 deletions
+67
View File
@@ -0,0 +1,67 @@
# Krea2 POV Pose Atlas
Local reference root:
`/media/unraid/davinci/Qwen_edit_lora/POV/dataset_v2`
Use this dataset as the pose-geometry reference for POV prompt tuning. The pose
folders contain rendered POV examples; matching `_control` folders contain the
solo/control image for the same pose family. Ignore `bg` and `*_bg` folders for
pose analysis; they are background plates without people.
## Inventory
| Family | Pose images | Control images | First sample |
| --- | ---: | ---: | --- |
| cowgirl | 63 | 63 | `5.cowgirl/100_cowgirl.png` |
| cowgirl alt | 62 | 62 | `5.cowgirl_alt/101_cowgirl_alt.png` |
| reverse cowgirl | 58 | 58 | `cowgirl_reverse/101_cowgirl_reverse.png` |
| reverse cowgirl alt | 50 | 50 | `cowgirl_reversere_alt/100_cowgirl_reversere_alt.png` |
| doggy | 57 | 57 | `doggy/101_doggy.png` |
| doggy alt | 45 | 45 | `doggy_alt/100_doggy_alt.png` |
| missionary | 74 | 74 | `missionary/101_missionary.png` |
| missionary folded | 12 | 12 | `missionary_folded/16_missionary_folded.png` |
| sixty-nine | 29 | 29 | `69/105_sixtynine.png` |
| ballsucking | 25 | 25 | `ballsucking/101_ballsucking.png` |
| blowjob laying | 42 | 42 | `blowjob_laying/101_blowjob_laying.png` |
| blowjob side | 17 | 17 | `blowjob_side/103_blowjob_side.png` |
| blowjob sitting | 27 | 27 | `blowjob_sitting/100_blowjob_sitting.png` |
| blowjob top view | 17 | 17 | `blowjob_top_view/102_blowjob_top_view.png` |
| boobjob | 11 | 11 | `boobjob/100_boobjob.png` |
| handjob | 24 | 24 | `handjob/18_handjob.png` |
| footjob | 2 | 2 | `footjob/59_footjob.png` |
| fingering | 10 | 10 | `fingering/103_fingering.png` |
| spread | 55 | 55 | `spread/100_spread_.png` |
| ready | 19 | 19 | `ready/105_ready_.png` |
| wand | 7 | 7 | `wand/106_wand_.png` |
## Tuning Method
For each pose family:
1. Sample 5-10 pose images and 2-3 control images.
2. Write a compact geometry summary using only repeated visual facts.
3. Test one prompt variant with a fixed seed.
4. Test the same wording on a second seed or character.
5. Patch generator defaults only when the wording improvement repeats or the
generated prompt is structurally wrong before rendering.
6. Record the evidence in `docs/krea2-prompt-guide.md`.
## Confirmed Notes
### Doggy / Rear-Entry
Dataset references show that visible POV thighs, lower torso, or pelvis can be
correct. They should be treated as natural foreground cues, not automatic
failures.
Better Krea2 wording:
- `top-down POV doggy position from behind`
- `camera looks down over the viewer's hands onto the woman's raised hips`
- `woman is on all fours with chest low, forearms folded, cheek turned sideways`
- `back arched, hips raised high toward the camera`
- `viewer hands hold her hips with natural lower-body POV cues in the foreground`
Avoid using visible shoes or lower legs as the standing cue. In seed `65`, that
wording pulled Krea2 toward oral contact and weakened rear-entry geometry.
+43
View File
@@ -36,6 +36,11 @@ image can justify a prompt-only retry when the mismatch is obvious, but a
generator rule needs either repeated evidence or a generated prompt that is
structurally wrong before rendering.
When a workflow batches soft/hard prompts through an index switch, sidecar text
files may not be the exact prompt used for each rendered image. If the sidecar
and image disagree, inspect the PNG workflow metadata and the final text encode
input before patching the generator.
When reviewing an eval payload, log:
- emitted seed,
@@ -140,6 +145,44 @@ Avoid:
- making `the viewer` the first subject before the visible character is
established.
For POV climax wording, the fluid target must follow the pose before expression
tokens. Rear-entry, doggy, bent-over, face-down, and on-all-fours poses should
target the ass, thighs, and lower back even if the expression detail mentions
face, lips, mouth, or tongue.
Evidence:
- Dataset seed `52` generated an internally contradictory prompt: on-all-fours
rear-view positioning paired with a face/chest ejaculation target.
- Corrected seed `52` and follow-up seed `5202` both rendered the rear-view
target consistently when the wording used `across her ass, thighs, and lower
back` and kept the clothing state tied to the lower garment.
### POV Doggy / Rear-Entry
For doggy-style POV, visible viewer thighs, lower torso, or pelvis can be
correct. Real POV references often show them. The useful target is not removing
the viewer body, but making the body cues read as a standing or crouched
first-person viewpoint instead of a vague seated pose.
To push the reference closer to a standing or crouched man looking down, use a
top-down rear-entry structure:
- `top-down standing POV doggy position from behind`
- `camera looks down over the viewer's extended hands onto the woman's raised hips`
- `woman is on all fours with chest low, forearms folded, cheek turned sideways`
- `rear-entry penetration visible between raised hips`
- `face and mouth remain far ahead, clearly separated from the penis`
Do not use visible shoes or lower legs as the standing cue. Seed `65` showed
that adding shoes/lower legs made Krea2 drift into oral contact and lose the
rear-entry geometry.
Do not over-prompt `viewer torso and thighs outside frame`; seeds `65` and
`6602` showed Krea2 still draws lower-body POV cues, and real references support
that. Prefer framing them as plausible foreground body cues rather than trying
to suppress them.
## Style
Style should describe rendering, not camera mechanics.
+23
View File
@@ -67,6 +67,29 @@ The request is sent on stdin. The command also receives:
- Seed control/reproducibility
- Overall Krea2 image usefulness
## POV Pose Atlas
Use `/media/unraid/davinci/Qwen_edit_lora/POV/dataset_v2` as the local
reference atlas for POV pose geometry. The top-level pose folders contain real
POV examples, and matching `_control` folders contain solo/control versions.
Ignore `bg` and `*_bg` folders for pose rules; they are background plates
without people. Treat the pose image folders as the primary source for body
geometry; captions are optional and are not present for every folder.
Suggested workflow:
1. Choose one pose family, for example `doggy`, `doggy_alt`, `cowgirl`, or
`missionary`.
2. Sample 5-10 real pose images and their control images.
3. Write the repeated geometry as a compact prompt rule.
4. Run one fixed-seed Krea2 prompt using that rule.
5. Repeat on a second seed or character before changing generator defaults.
6. If the prompt itself is structurally contradictory before rendering, patch
immediately and add a regression test.
For POV doggy, the atlas shows that visible viewer thighs, lower torso, or
pelvis can be correct. Do not treat them as automatic failures.
## Seed Contract
The seed is transport metadata, not prompt text. When the graph emits a seed, an
+24 -5
View File
@@ -36,12 +36,30 @@ def _clean(value: Any) -> str:
def pov_ejaculation_target(context: str) -> str:
if any(token in context for token in ("face", "mouth", "lips", "tongue", "chin")):
return "onto her face and chest"
if any(token in context for token in ("lower back", "ass", "rear-entry", "face-down", "bent-over", "doggy")):
if any(
token in context
for token in (
"lower back",
"ass",
"rear-entry",
"rear entry",
"face-down",
"face down",
"bent-over",
"bent over",
"doggy",
"on all fours",
"hips high",
"hips raised",
"raised ass",
"behind her",
)
):
return "across her ass, thighs, and lower back"
if any(token in context for token in ("pussy", "open thighs", "thighs", "legs open")):
return "across her pussy and thighs"
if any(token in context for token in ("face", "mouth", "lips", "tongue", "chin")):
return "onto her face and chest"
return "onto her body"
@@ -444,8 +462,9 @@ def pov_hardcore_pose_sentence(
)
if "doggy" in position_context or "all fours" in position_context or "rear-entry" in position_context:
return sentence(
"The woman is seen from behind with her ass raised toward the POV viewer, on all fours directly in front of him with hips high and back arched; "
f"the viewer looks down at her raised ass with his hands on her hips in the foreground {contact}"
"Top-down POV doggy position from behind: the camera looks down over the viewer's hands onto the woman's raised hips; "
f"the woman is on all fours with chest low, forearms folded, cheek turned sideways far ahead, back arched, and hips raised high toward the camera; "
f"the viewer's hands hold her hips with natural lower-body POV cues in the foreground {contact}"
)
if "kneeling" in position_context:
return sentence(
+26 -2
View File
@@ -55,6 +55,7 @@ import node_tooltips # noqa: E402
import krea_cast # noqa: E402
import krea_action_details # noqa: E402
import krea_action_context # noqa: E402
import krea_pov_actions # noqa: E402
import krea_configured_cast_formatter # noqa: E402
import krea_format_route # noqa: E402
import krea_formatter # noqa: E402
@@ -6942,6 +6943,28 @@ def smoke_pov_oral_position_routes() -> None:
_expect(term in prompt, f"{name} Krea prompt missing {term!r}: {prompt}")
def smoke_pov_climax_target_policy() -> None:
context = (
"doggy rear-entry on all fours with hips raised and ass toward the camera; "
"mouth, face, lips, and tongue appear only in expression detail"
)
target = krea_pov_actions.pov_ejaculation_target(context)
_expect(
target == "across her ass, thighs, and lower back",
f"rear-entry climax target should beat face-expression tokens, got {target!r}",
)
phrase = krea_pov_actions.pov_action_phrase(
"Man A ejaculates semen onto Woman A's face and chest; visible semen lands while her mouth stays open",
["Man A"],
role_graph="Woman A is on all fours directly in front of Man A with hips raised while Man A is positioned behind her.",
hard_item="cumshot with mouth and face expression",
composition="first-person rear-view frame looking down at the woman's raised ass",
axis_values={"position": "doggy style position"},
).lower()
_expect("face and chest" not in phrase, f"POV rear-entry climax kept incompatible face/chest target: {phrase}")
_expect("across her ass, thighs, and lower back" in phrase, f"POV rear-entry climax lost rear target: {phrase}")
def smoke_pov_penetration_position_routes() -> None:
cases = [
(
@@ -6966,7 +6989,7 @@ def smoke_pov_penetration_position_routes() -> None:
"pov_penetration_doggy",
"doggy",
("woman a is on all fours", "man a is positioned behind her"),
("ass raised toward the pov viewer", "on all fours", "penetrates her pussy"),
("top-down pov doggy position", "on all fours", "forearms folded", "penetrates her pussy"),
),
(
"pov_penetration_edge_supported",
@@ -7030,7 +7053,7 @@ def smoke_pov_anal_position_routes() -> None:
"pov_anal_doggy",
"doggy",
("on all fours", "positioned behind her"),
("on all fours directly in front", "penetrates her ass"),
("top-down pov doggy position", "on all fours", "forearms folded", "penetrates her ass"),
),
(
"pov_anal_bent_over",
@@ -9658,6 +9681,7 @@ SMOKE_CASES: list[tuple[str, Callable[[], None]]] = [
("krea_pov_penetration_route", smoke_krea_pov_penetration_route),
("pov_outercourse_position_routes", smoke_pov_outercourse_position_routes),
("pov_oral_position_routes", smoke_pov_oral_position_routes),
("pov_climax_target_policy", smoke_pov_climax_target_policy),
("pov_penetration_position_routes", smoke_pov_penetration_position_routes),
("pov_anal_position_routes", smoke_pov_anal_position_routes),
("double_front_back_route", smoke_double_front_back_route),