137 lines
5.0 KiB
Markdown
137 lines
5.0 KiB
Markdown
# Clothing Seed Axis Design
|
|
|
|
## Goal
|
|
|
|
Allow a workflow to keep the same category, content item, pose, role, person,
|
|
scene, expression, composition, and branch structure while rerolling only the
|
|
clothing/outfit choices.
|
|
|
|
## Current Problem
|
|
|
|
Clothing currently shares the `content` seed axis in several places. That means a
|
|
user cannot change clothes without also risking changes to content-driven prompt
|
|
selection. In scene pairs, this is especially confusing because a softcore branch
|
|
content seed can pick the outfit that the hardcore branch later inherits through
|
|
clothing continuity.
|
|
|
|
The previous layer-seed fix made the visible seed authoritative, but it did not
|
|
separate clothing from content. A visible `content` seed is still doing two jobs:
|
|
content selection and clothing selection.
|
|
|
|
## Design
|
|
|
|
Add a new first-class `clothing` seed axis.
|
|
|
|
The `clothing` axis controls:
|
|
|
|
- prompt clothing mode selection, such as full, minimal, or random;
|
|
- clothing/outfit item selection for normal prompt rows;
|
|
- softcore branch outfit selection;
|
|
- pair partner outfit selection;
|
|
- scene wardrobe outfit selection where the wardrobe layer needs a seed;
|
|
- hard branch clothing continuity when it derives from the soft branch outfit.
|
|
|
|
The `content` axis continues to control:
|
|
|
|
- category item selection;
|
|
- content templates and item text;
|
|
- content-derived item axis values;
|
|
- pose-category content when an existing category treats the content item as
|
|
pose-driven metadata.
|
|
|
|
Changing only `clothing_seed` should not change non-clothing prompt content.
|
|
|
|
## Seed Vocabulary
|
|
|
|
Update the shared seed policy:
|
|
|
|
- Add `clothing` to `SEED_LOCK_AXES`.
|
|
- Add a deterministic salt for `clothing`.
|
|
- Add aliases for `clothing_seed`, `outfit_seed`, and `wardrobe_seed`.
|
|
- Keep `item_seed` as a `content` alias because it describes content item
|
|
selection, not clothing.
|
|
- Add `clothing` to reroll-axis choices.
|
|
- Add `content_clothing` for workflows that intentionally reroll both content
|
|
and clothes together.
|
|
- Add `clothing_pose` for workflows that keep content stable but reroll clothes,
|
|
pose, and role together.
|
|
|
|
`content_pose` should remain content + pose + role. It should not include
|
|
clothing after this split.
|
|
|
|
## Scene Layer Behavior
|
|
|
|
Update scene layer seed mappings:
|
|
|
|
- `wardrobe` defaults to the `clothing` axis.
|
|
- `softcore_branch` defaults to `clothing`, `pose`, and `role` only when no
|
|
explicit reroll axis is selected.
|
|
- `hardcore_branch` remains `pose` and `role` by default.
|
|
- Explicit reroll axes use the shared vocabulary, including `clothing`,
|
|
`content_clothing`, and `clothing_pose`.
|
|
|
|
This keeps the branch seed UI useful while making clothes-only rerolls obvious.
|
|
|
|
## Prompt Flow
|
|
|
|
Normal prompt rows should use separate RNGs:
|
|
|
|
- `content_rng` for category/subcategory item and content-template choices.
|
|
- `clothing_rng` for clothing mode and outfit choices.
|
|
- Existing pose, role, person, scene, expression, and composition RNGs remain
|
|
unchanged.
|
|
|
|
Scene pair rows should use separate RNGs:
|
|
|
|
- soft branch clothing/outfit selection uses the soft branch `clothing` axis;
|
|
- soft branch pose uses the soft branch `pose` axis;
|
|
- hard branch content behavior remains independent from soft branch clothing;
|
|
- hard branch clothing continuity reads the selected soft branch outfit, so a
|
|
clothing-only reroll changes inherited clothing but leaves the hard branch pose
|
|
and content seeds alone.
|
|
|
|
## Compatibility
|
|
|
|
Existing workflows should continue to load.
|
|
|
|
Compatibility rules:
|
|
|
|
- Existing configs without `clothing_seed` fall back to the same effective base
|
|
seed behavior as before.
|
|
- `outfit_seed` should map to `clothing` going forward.
|
|
- `content_seed` should not control clothing once `clothing_seed` or
|
|
`outfit_seed` is present.
|
|
- The visible scene layer seed remains authoritative for all seed modes.
|
|
- `seed_trace` should include `clothing` when the clothing axis is configured or
|
|
emitted by row generation.
|
|
|
|
This is a behavior improvement, not a schema break.
|
|
|
|
## Testing
|
|
|
|
Add smoke coverage proving:
|
|
|
|
- `seed_reroll_axis_choices()` includes `clothing`, `content_clothing`, and
|
|
`clothing_pose`.
|
|
- `build_seed_lock_config_json(..., reroll_axis="clothing")` changes only
|
|
`clothing_seed`.
|
|
- `build_seed_lock_config_json(..., reroll_axis="content_clothing")` changes
|
|
both `content_seed` and `clothing_seed`.
|
|
- `content_pose` does not change `clothing_seed`.
|
|
- In a scene pair, changing only the soft branch clothing seed changes the
|
|
softcore outfit and inherited hard clothing state.
|
|
- The same scene pair keeps non-clothing content, pose, role, person, scene, and
|
|
composition seeds stable under a clothes-only reroll.
|
|
- Legacy `outfit_seed` is honored as a clothing seed.
|
|
|
|
## Out Of Scope
|
|
|
|
This design does not add a second visible seed widget to the existing scene layer
|
|
seed node. The node still has one visible seed field; the selected reroll axis
|
|
decides what that seed controls.
|
|
|
|
This design does not rewrite all prompt category data to distinguish fashion
|
|
categories from non-fashion content categories. It only separates RNG control
|
|
for clothing choices that the code already treats as clothing or outfit
|
|
selection.
|