aleph65 commited on
Commit
c99d238
·
verified ·
1 Parent(s): 705c355

Revert 705c3555cb: restore Amateur-Photo lora config for qwen-edit-turbo (the Qwen4Play image was never actually built/pushed; docs referenced a nonexistent qwen-edit-turbo-latest tag)

Browse files
README.md CHANGED
@@ -56,8 +56,7 @@ neither is set.
56
  The `serverless/` folder in the HF repo holds RunPod serverless workers that
57
  run these workflows as an API (models baked into per-family images for fast
58
  cold starts). Current endpoint: `qwen-edit-turbo` (`dom5lwr0o5wq6u`), image
59
- `plx1029/comfyui-serverless:qwen-edit-turbo-latest` (Qwen4Play lora baked in,
60
- on by default). See `serverless/README.md`.
61
 
62
  ## How this stays up to date
63
 
 
56
  The `serverless/` folder in the HF repo holds RunPod serverless workers that
57
  run these workflows as an API (models baked into per-family images for fast
58
  cold starts). Current endpoint: `qwen-edit-turbo` (`dom5lwr0o5wq6u`), image
59
+ `plx1029/comfyui-serverless:qwen-edit-turbo-v1`. See `serverless/README.md`.
 
60
 
61
  ## How this stays up to date
62
 
serverless/Dockerfile CHANGED
@@ -8,7 +8,7 @@
8
  # -f serverless/Dockerfile \
9
  # --secret id=hf_token,env=HF_TOKEN \
10
  # --build-arg ENDPOINT=qwen-edit-turbo \
11
- # -t plx1029/comfyui-serverless:qwen-edit-turbo-latest .
12
  #
13
  # Layer order mirrors build.sh: custom nodes + models first (heavy, rarely
14
  # change), serverless code last (tiny, changes often) — so code iterations
@@ -45,7 +45,7 @@ RUN --mount=type=secret,id=hf_token HF_TOKEN=$(cat /run/secrets/hf_token) \
45
  RUN --mount=type=secret,id=hf_token HF_TOKEN=$(cat /run/secrets/hf_token) \
46
  hf download aleph65/ComfyUI models/loras/Qwen_LoRA_Skin_Fix_v2.safetensors --local-dir /workspace/ComfyUI
47
  RUN --mount=type=secret,id=hf_token HF_TOKEN=$(cat /run/secrets/hf_token) \
48
- hf download aleph65/ComfyUI models/loras/Qwen4Play_v2.safetensors --local-dir /workspace/ComfyUI
49
 
50
  # ---- serverless code (top layer: cheap to rebuild) ----
51
  COPY apply_patches.sh /workspace/apply_patches.sh
 
8
  # -f serverless/Dockerfile \
9
  # --secret id=hf_token,env=HF_TOKEN \
10
  # --build-arg ENDPOINT=qwen-edit-turbo \
11
+ # -t plx1029/comfyui-serverless:qwen-edit-turbo-v1 .
12
  #
13
  # Layer order mirrors build.sh: custom nodes + models first (heavy, rarely
14
  # change), serverless code last (tiny, changes often) — so code iterations
 
45
  RUN --mount=type=secret,id=hf_token HF_TOKEN=$(cat /run/secrets/hf_token) \
46
  hf download aleph65/ComfyUI models/loras/Qwen_LoRA_Skin_Fix_v2.safetensors --local-dir /workspace/ComfyUI
47
  RUN --mount=type=secret,id=hf_token HF_TOKEN=$(cat /run/secrets/hf_token) \
48
+ hf download aleph65/ComfyUI models/loras/Qwen_LoRA_Amateur_Photo_v1.safetensors --local-dir /workspace/ComfyUI
49
 
50
  # ---- serverless code (top layer: cheap to rebuild) ----
51
  COPY apply_patches.sh /workspace/apply_patches.sh
serverless/README.md CHANGED
@@ -8,7 +8,7 @@ Images: `plx1029/comfyui-serverless` on Docker Hub. Current endpoint:
8
 
9
  | endpoint | image tag | RunPod endpoint id | contents |
10
  |---|---|---|---|
11
- | qwen-edit-turbo | `qwen-edit-turbo-latest` | `dom5lwr0o5wq6u` | Qwen-Image-Edit-2511 **bf16** + Lightning 4/8-step loras + Skin-Fix/Qwen4Play loras, workflow `qwen-edit-turbo-v4` |
12
  | qwen-edit-nsfw | `qwen-edit-nsfw-v1` | `tplcz9jtzihoxa` | Qwen-Rapid-AIO-NSFW v11.4 + next-scene lora, RES4LYF sampler, workflow `qwen-edit-nsfw` |
13
  | faceswap-lissie | `faceswap-lissie-v1` | `qkeibkeoefcrk3` | Flux-2-Klein 9B + Qwen3-8B TE + bfs-head/lissie loras + Qwen3-VL-4B + RMBG-2.0 (baked), workflow `new-faceswap-lissie-v4` |
14
 
@@ -21,10 +21,6 @@ image via `"workflow"`, or a fully custom API-format graph via
21
 
22
  Serverless-specific workflow tweaks (baked copies under `endpoints/*/workflows/`
23
  differ from `workflows/api/` in exactly these ways):
24
- - `qwen-edit-turbo` (since the `latest` tag; `-v1` had Amateur-Photo instead):
25
- lora slot 2 of the "User LoRAs" node is `Qwen4Play_v2` and **enabled by
26
- default** (params `lora_qwen4play` / `lora_qwen4play_strength` toggle it);
27
- the Amateur-Photo lora is not in the image anymore.
28
  - `qwen-edit-nsfw`: removed the KJNodes `WidgetToString` node (it reads
29
  UI-only metadata and crashes headless); the Image-Saver metadata node gets a
30
  static model-name string instead. Behavior is otherwise identical.
 
8
 
9
  | endpoint | image tag | RunPod endpoint id | contents |
10
  |---|---|---|---|
11
+ | qwen-edit-turbo | `qwen-edit-turbo-v1` | `dom5lwr0o5wq6u` | Qwen-Image-Edit-2511 **bf16** + Lightning 4/8-step loras + Skin-Fix/Amateur loras, workflow `qwen-edit-turbo-v4` |
12
  | qwen-edit-nsfw | `qwen-edit-nsfw-v1` | `tplcz9jtzihoxa` | Qwen-Rapid-AIO-NSFW v11.4 + next-scene lora, RES4LYF sampler, workflow `qwen-edit-nsfw` |
13
  | faceswap-lissie | `faceswap-lissie-v1` | `qkeibkeoefcrk3` | Flux-2-Klein 9B + Qwen3-8B TE + bfs-head/lissie loras + Qwen3-VL-4B + RMBG-2.0 (baked), workflow `new-faceswap-lissie-v4` |
14
 
 
21
 
22
  Serverless-specific workflow tweaks (baked copies under `endpoints/*/workflows/`
23
  differ from `workflows/api/` in exactly these ways):
 
 
 
 
24
  - `qwen-edit-nsfw`: removed the KJNodes `WidgetToString` node (it reads
25
  UI-only metadata and crashes headless); the Image-Saver metadata node gets a
26
  static model-name string instead. Behavior is otherwise identical.
serverless/client/qwen-edit-turbo-v4.json CHANGED
@@ -342,8 +342,8 @@
342
  "strengthTwo": null
343
  },
344
  "lora_2": {
345
- "lora": "Qwen4Play_v2.safetensors",
346
- "on": true,
347
  "strength": 1,
348
  "strengthTwo": null
349
  },
@@ -755,4 +755,4 @@
755
  ]
756
  }
757
  }
758
- }
 
342
  "strengthTwo": null
343
  },
344
  "lora_2": {
345
+ "lora": "Qwen_LoRA_Amateur_Photo_v1.safetensors",
346
+ "on": false,
347
  "strength": 1,
348
  "strengthTwo": null
349
  },
 
755
  ]
756
  }
757
  }
758
+ }
serverless/client/qwen_edit_async.py CHANGED
@@ -63,10 +63,9 @@ def build_input(args):
63
  if args.lora_skin_fix:
64
  params["lora_skin_fix"] = True
65
  params["lora_skin_fix_strength"] = args.lora_skin_fix_strength
66
- if args.no_lora_qwen4play:
67
- params["lora_qwen4play"] = False
68
- if args.lora_qwen4play_strength is not None:
69
- params["lora_qwen4play_strength"] = args.lora_qwen4play_strength
70
 
71
  payload = {"images": images, "params": params}
72
  if args.workflow:
@@ -111,8 +110,8 @@ def main():
111
  ap.add_argument("--output-max-dim", type=int)
112
  ap.add_argument("--lora-skin-fix", action="store_true")
113
  ap.add_argument("--lora-skin-fix-strength", type=float, default=1.0)
114
- ap.add_argument("--no-lora-qwen4play", action="store_true")
115
- ap.add_argument("--lora-qwen4play-strength", type=float, default=None)
116
  ap.add_argument("--workflow")
117
  ap.add_argument("--set", action="append", metavar="NODE.INPUT=VALUE")
118
  ap.add_argument("--workflow-json")
 
63
  if args.lora_skin_fix:
64
  params["lora_skin_fix"] = True
65
  params["lora_skin_fix_strength"] = args.lora_skin_fix_strength
66
+ if args.lora_amateur:
67
+ params["lora_amateur"] = True
68
+ params["lora_amateur_strength"] = args.lora_amateur_strength
 
69
 
70
  payload = {"images": images, "params": params}
71
  if args.workflow:
 
110
  ap.add_argument("--output-max-dim", type=int)
111
  ap.add_argument("--lora-skin-fix", action="store_true")
112
  ap.add_argument("--lora-skin-fix-strength", type=float, default=1.0)
113
+ ap.add_argument("--lora-amateur", action="store_true")
114
+ ap.add_argument("--lora-amateur-strength", type=float, default=1.0)
115
  ap.add_argument("--workflow")
116
  ap.add_argument("--set", action="append", metavar="NODE.INPUT=VALUE")
117
  ap.add_argument("--workflow-json")
serverless/client/qwen_edit_sync.py CHANGED
@@ -21,9 +21,8 @@ All arguments:
21
  --input-max-dim max size of the main image fed to the model (default 2048)
22
  --ref-max-dim max size of the reference image (default 1024)
23
  --output-max-dim upscale target for the result (default 2560)
24
- --lora-skin-fix / --lora-skin-fix-strength enable the optional skin-fix lora
25
- --no-lora-qwen4play disable the Qwen4Play lora (on by default)
26
- --lora-qwen4play-strength override its strength (default 1.0)
27
  --workflow which baked workflow to run (default qwen-edit-turbo-v4)
28
  --set NODE.INPUT=VALUE raw graph override, repeatable (advanced)
29
  --workflow-json FILE full API-format graph passthrough (advanced)
@@ -60,10 +59,9 @@ def build_input(args):
60
  if args.lora_skin_fix:
61
  params["lora_skin_fix"] = True
62
  params["lora_skin_fix_strength"] = args.lora_skin_fix_strength
63
- if args.no_lora_qwen4play:
64
- params["lora_qwen4play"] = False
65
- if args.lora_qwen4play_strength is not None:
66
- params["lora_qwen4play_strength"] = args.lora_qwen4play_strength
67
 
68
  payload = {"images": images, "params": params}
69
  if args.workflow:
@@ -108,8 +106,8 @@ def main():
108
  ap.add_argument("--output-max-dim", type=int)
109
  ap.add_argument("--lora-skin-fix", action="store_true")
110
  ap.add_argument("--lora-skin-fix-strength", type=float, default=1.0)
111
- ap.add_argument("--no-lora-qwen4play", action="store_true")
112
- ap.add_argument("--lora-qwen4play-strength", type=float, default=None)
113
  ap.add_argument("--workflow")
114
  ap.add_argument("--set", action="append", metavar="NODE.INPUT=VALUE")
115
  ap.add_argument("--workflow-json")
 
21
  --input-max-dim max size of the main image fed to the model (default 2048)
22
  --ref-max-dim max size of the reference image (default 1024)
23
  --output-max-dim upscale target for the result (default 2560)
24
+ --lora-skin-fix / --lora-amateur enable the optional loras
25
+ --lora-skin-fix-strength / --lora-amateur-strength (default 1.0)
 
26
  --workflow which baked workflow to run (default qwen-edit-turbo-v4)
27
  --set NODE.INPUT=VALUE raw graph override, repeatable (advanced)
28
  --workflow-json FILE full API-format graph passthrough (advanced)
 
59
  if args.lora_skin_fix:
60
  params["lora_skin_fix"] = True
61
  params["lora_skin_fix_strength"] = args.lora_skin_fix_strength
62
+ if args.lora_amateur:
63
+ params["lora_amateur"] = True
64
+ params["lora_amateur_strength"] = args.lora_amateur_strength
 
65
 
66
  payload = {"images": images, "params": params}
67
  if args.workflow:
 
106
  ap.add_argument("--output-max-dim", type=int)
107
  ap.add_argument("--lora-skin-fix", action="store_true")
108
  ap.add_argument("--lora-skin-fix-strength", type=float, default=1.0)
109
+ ap.add_argument("--lora-amateur", action="store_true")
110
+ ap.add_argument("--lora-amateur-strength", type=float, default=1.0)
111
  ap.add_argument("--workflow")
112
  ap.add_argument("--set", action="append", metavar="NODE.INPUT=VALUE")
113
  ap.add_argument("--workflow-json")
serverless/endpoints/qwen-edit-turbo/endpoint.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "qwen-edit-turbo",
3
- "description": "Qwen-Image-Edit-2511 bf16 + Lightning 4/8-step turbo + Qwen4Play (qwen-edit-turbo-v4)",
4
  "default_workflow": "qwen-edit-turbo-v4",
5
  "hf_repo": "aleph65/ComfyUI",
6
  "models": [
@@ -10,7 +10,7 @@
10
  "models/loras/Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors",
11
  "models/loras/Qwen-Image-Edit-2511-Lightning-8steps-V1.0-bf16.safetensors",
12
  "models/loras/Qwen_LoRA_Skin_Fix_v2.safetensors",
13
- "models/loras/Qwen4Play_v2.safetensors"
14
  ],
15
  "custom_nodes": [
16
  "rgthree-comfy",
 
1
  {
2
  "name": "qwen-edit-turbo",
3
+ "description": "Qwen-Image-Edit-2511 bf16 + Lightning 4/8-step turbo (qwen-edit-turbo-v4)",
4
  "default_workflow": "qwen-edit-turbo-v4",
5
  "hf_repo": "aleph65/ComfyUI",
6
  "models": [
 
10
  "models/loras/Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors",
11
  "models/loras/Qwen-Image-Edit-2511-Lightning-8steps-V1.0-bf16.safetensors",
12
  "models/loras/Qwen_LoRA_Skin_Fix_v2.safetensors",
13
+ "models/loras/Qwen_LoRA_Amateur_Photo_v1.safetensors"
14
  ],
15
  "custom_nodes": [
16
  "rgthree-comfy",
serverless/endpoints/qwen-edit-turbo/params/qwen-edit-turbo-v4.json CHANGED
@@ -1,91 +1,24 @@
1
  {
2
  "params": {
3
- "prompt": {
4
- "node": "40",
5
- "input": "prompt"
6
- },
7
- "image": {
8
- "node": "20",
9
- "input": "image",
10
- "type": "image"
11
- },
12
- "image_ref": {
13
- "node": "30",
14
- "input": "image",
15
- "type": "image"
16
- },
17
- "use_ref": {
18
- "node": "56",
19
- "input": "value"
20
- },
21
- "mode": {
22
- "node": "5",
23
- "input": "value",
24
- "choices": {
25
- "turbo-4": 1,
26
- "turbo-8": 2,
27
- "quality": 3
28
- }
29
- },
30
- "seed": {
31
- "node": "43",
32
- "input": "seed"
33
- },
34
- "input_max_dim": {
35
- "node": "21",
36
- "input": "value"
37
- },
38
- "ref_max_dim": {
39
- "node": "31",
40
- "input": "value"
41
- },
42
- "upscale_input": {
43
- "node": "15",
44
- "input": "value"
45
- },
46
- "downscale_input": {
47
- "node": "16",
48
- "input": "value"
49
- },
50
- "upscale_output": {
51
- "node": "46",
52
- "input": "value"
53
- },
54
- "output_max_dim": {
55
- "node": "47",
56
- "input": "value"
57
- },
58
- "lora_skin_fix": {
59
- "node": "52",
60
- "input": "lora_1",
61
- "subkey": "on"
62
- },
63
- "lora_skin_fix_strength": {
64
- "node": "52",
65
- "input": "lora_1",
66
- "subkey": "strength"
67
- },
68
- "lora_qwen4play": {
69
- "node": "52",
70
- "input": "lora_2",
71
- "subkey": "on"
72
- },
73
- "lora_qwen4play_strength": {
74
- "node": "52",
75
- "input": "lora_2",
76
- "subkey": "strength"
77
- }
78
  },
79
- "defaults": {
80
- "mode": "turbo-8"
81
- },
82
- "image_slots": [
83
- "image",
84
- "image_ref"
85
- ],
86
- "when_image_absent": {
87
- "image_ref": {
88
- "use_ref": false
89
- }
90
- }
91
  }
 
1
  {
2
  "params": {
3
+ "prompt": {"node": "40", "input": "prompt"},
4
+ "image": {"node": "20", "input": "image", "type": "image"},
5
+ "image_ref": {"node": "30", "input": "image", "type": "image"},
6
+ "use_ref": {"node": "56", "input": "value"},
7
+ "mode": {"node": "5", "input": "value",
8
+ "choices": {"turbo-4": 1, "turbo-8": 2, "quality": 3}},
9
+ "seed": {"node": "43", "input": "seed"},
10
+ "input_max_dim": {"node": "21", "input": "value"},
11
+ "ref_max_dim": {"node": "31", "input": "value"},
12
+ "upscale_input": {"node": "15", "input": "value"},
13
+ "downscale_input": {"node": "16", "input": "value"},
14
+ "upscale_output": {"node": "46", "input": "value"},
15
+ "output_max_dim": {"node": "47", "input": "value"},
16
+ "lora_skin_fix": {"node": "52", "input": "lora_1", "subkey": "on"},
17
+ "lora_skin_fix_strength": {"node": "52", "input": "lora_1", "subkey": "strength"},
18
+ "lora_amateur": {"node": "52", "input": "lora_2", "subkey": "on"},
19
+ "lora_amateur_strength": {"node": "52", "input": "lora_2", "subkey": "strength"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  },
21
+ "defaults": {"mode": "turbo-8"},
22
+ "image_slots": ["image", "image_ref"],
23
+ "when_image_absent": {"image_ref": {"use_ref": false}}
 
 
 
 
 
 
 
 
 
24
  }
serverless/endpoints/qwen-edit-turbo/workflows/qwen-edit-turbo-v4.json CHANGED
@@ -342,8 +342,8 @@
342
  "strengthTwo": null
343
  },
344
  "lora_2": {
345
- "lora": "Qwen4Play_v2.safetensors",
346
- "on": true,
347
  "strength": 1,
348
  "strengthTwo": null
349
  },
@@ -755,4 +755,4 @@
755
  ]
756
  }
757
  }
758
- }
 
342
  "strengthTwo": null
343
  },
344
  "lora_2": {
345
+ "lora": "Qwen_LoRA_Amateur_Photo_v1.safetensors",
346
+ "on": false,
347
  "strength": 1,
348
  "strengthTwo": null
349
  },
 
755
  ]
756
  }
757
  }
758
+ }