Keep the v1 Image tab on its dual-branch template. The host agent follows Desktop's live port so Coolify stays on :8198. Co-authored-by: Cursor <cursoragent@cursor.com>
3.1 KiB
3.1 KiB
Image v1 vs Image v2
Image edit (v1) and Image v2 are siblings. v1 is unchanged. Do not mute-fix workflow_flux2_klein_edit.json (the dual-branch template that deletes 75:* or 92:* at runtime).
| Image edit (v1) | Image v2 | |
|---|---|---|
| Tab | Image edit | Image v2 |
| Route | POST /api/edit |
POST /api/v2/generate and POST /v2/generate |
| Graphs | One file, prune unused branch | klein_v2_edit.json or klein_v2_compose.json |
| Second still | Optional; switches branch | Compose only; required. Mismatch is a 400 |
| LoRAs | Optional user picker | SNOFS + Consistency, four strengths |
| Defaults | 20 steps, CFG 1 | 24 steps, CFG 4 (turbo: 8 / 1) |
Poll v2 jobs the same way as v1: GET /api/generate/{id}/stream and GET /api/generate/{id}.
Modes
- edit — one image + text. Task is
scene. Sendingimage_bis rejected. - compose — two images + text.
image_bis required. No silent one-image fallback.
Compose tasks:
- identity — person from A; B reinforces the face; prompt changes pose/scene
- outfit — person, body, pose, background from A; clothing only from B
- face_lock — body/pose/scene from A; face from B
- scene — A is the edit image; B is style/background
Dummy test: Compose + two unrelated photos + “keep everything the same” must change the output. If it matches old v1 gens, still B is not connected.
Nodes the mapper patches
Both graphs:
| Node | Role |
|---|---|
1 |
Load Image A (inputs.image) |
2 / 23 |
Scale to MP, lanczos (megapixels) |
7 |
SNOFS LoRA (lora_name, strength_model, strength_clip) |
8 |
Consistency LoRA (lora_name, strength_model, strength_clip) |
9 |
Positive CLIPTextEncode.text (role header + user prompt) |
10 |
Negative CLIPTextEncode.text |
15 |
Seed |
17 |
Steps (Flux2Scheduler; Klein-native, euler sampler) |
18 |
CFG |
21 |
SaveImage prefix |
Compose only:
| Node | Role |
|---|---|
22 |
Load Image B |
23 |
Scale B |
24 |
VAE encode B |
25 / 26 |
Second ReferenceLatent (B fused into pos/neg) |
If image_b is sent and the executed graph has fewer than two LoadImage nodes, the job fails.
Default sliders
| Slider | Default |
|---|---|
| SNOFS Model | 0.65 |
| SNOFS CLIP | 0.35 |
| Consistency Model | 0.70 |
| Consistency CLIP | 0.70 |
| Steps | 24 (turbo 8) |
| CFG | 4 (turbo 1) |
| Scale to MP | 1.0 lanczos |
There is no Denoise slider. This is reference-latent Klein, not inpaint.
NSFW identity vs outfit swap
- identity / face_lock — keep Consistency at 0.70 / 0.70 so the face from A (identity) or B (face_lock) holds. Do not drop SNOFS CLIP below ~0.30 or the skin/body read falls apart.
- outfit — keep SNOFS Model ~0.65 so cloth reads; do not raise it past ~0.85 or it starts rewriting the body from A. Consistency stays at 0.70 so the person in A does not become the person in B.
- scene / edit — start at the table defaults. Turbo is for drafts only.
Presets on this tab store sliders + mode + task only. They do not load v1 LoRA stacks or a cached latent.