ComfyPilotComfyPilot
工作流 / 图像 / Fibo 2.0 Dev:图像编辑
Fibo 2.0 Dev:图像编辑

Fibo 2.0 Dev:图像编辑

Fibo 2.0 Dev: Image Edit

与 Turbo 模板相同的画面,加载完整的非蒸馏 Fibo 2.0 Dev 权重:50 步、CFG 5,配合 Bria 的结构化负面,在采样时间不受限制时获得最干净的编辑效果。可选的提示词增强器会将指令重写为结构化描述;关闭它即可直接采样原始提示词。

图像 19 个节点 1 个输入 ComfyUI ≥ 0.44.0 ComfyUI 74 KB

下载工作流 JSON 查看官方来源

下载后把文件拖进 ComfyUI 窗口即可打开。

需要的权重

这个工作流引用了 4 个权重文件,其中 4 个能在本站模型库里找到。

fibo2_dev_int8_convrot.safetensors 在模型库查看
flux2-vae.safetensors 在模型库查看
qwen3vl_4b_bf16.safetensors 在模型库查看
qwen3vl_8b_int8_convrot.safetensors 在模型库查看

节点构成

MarkdownNote × 3
CLIPLoader × 2
PrimitiveStringMultiline × 2
UNETLoader × 1
VAELoader × 1
TextEncodeFibo2 × 1
KSampler × 1
VAEDecode × 1
SaveImage × 1
LoadImage × 1
ComfySwitchNode × 1
ImageCompare × 1
PreviewAny × 1
BatchImagesNode × 1
TextGenerateV2 × 1

官方标注的模型

Fibo 2.0

工作流 JSON

和上面「下载工作流 JSON」是同一份文件。

1{
2 "id": "c968c8f4-5788-4d2a-aea6-c4849ebd7b5d",
3 "revision": 0,
4 "last_node_id": 32,
5 "last_link_id": 49,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "UNETLoader",
10 "pos": [
11 -100,
12 90
13 ],
14 "size": [
15 410,
16 90
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "color_off": null,
25 "color_on": null,
26 "dir": null,
27 "label": null,
28 "locked": null,
29 "name": "MODEL",
30 "nameLocked": null,
31 "removable": null,
32 "type": "MODEL",
33 "pos": null,
34 "slot_index": null,
35 "links": [
36 4
37 ]
38 }
39 ],
40 "properties": {
41 "Node name for S&R": "UNETLoader",
42 "models": [
43 {
44 "name": "fibo2_dev_int8_convrot.safetensors",
45 "url": "https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_dev_int8_convrot.safetensors",
46 "hash": "063dd397395809fd22234c6bd32932cfcb22619f4d2282bdbf1dc58c406fe325",
47 "hash_type": "SHA256",
48 "directory": "diffusion_models"
49 }
50 ]
51 },
52 "widgets_values": [
53 "fibo2_dev_int8_convrot.safetensors",
54 "default"
55 ],
56 "widgets_values_named": {
57 "unet_name": "fibo2_dev_int8_convrot.safetensors",
58 "weight_dtype": "default"
59 }
60 },
61 {
62 "id": 2,
63 "type": "CLIPLoader",
64 "pos": [
65 -100,
66 230
67 ],
68 "size": [
69 410,
70 110
71 ],
72 "flags": [],
73 "order": 1,
74 "mode": 0,
75 "inputs": [],
76 "outputs": [
77 {
78 "color_off": null,
79 "color_on": null,
80 "dir": null,
81 "label": null,
82 "locked": null,
83 "name": "CLIP",
84 "nameLocked": null,
85 "removable": null,
86 "type": "CLIP",
87 "pos": null,
88 "slot_index": null,
89 "links": [
90 1
91 ]
92 }
93 ],
94 "properties": {
95 "Node name for S&R": "CLIPLoader",
96 "models": [
97 {
98 "name": "qwen3vl_4b_bf16.safetensors",
99 "url": "https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/text_encoders/qwen3vl_4b_bf16.safetensors",
100 "hash": "36f3ff447ef59201722e8f9ce6020c9819fdcfba6aa2608c4e09b1c0ce114e34",
101 "hash_type": "SHA256",
102 "directory": "text_encoders"
103 }
104 ]
105 },
106 "widgets_values": [
107 "qwen3vl_4b_bf16.safetensors",
108 "fibo2",
109 "default"
110 ],
111 "widgets_values_named": {
112 "clip_name": "qwen3vl_4b_bf16.safetensors",
113 "type": "fibo2",
114 "device": "default"
115 }
116 },
117 {
118 "id": 3,
119 "type": "VAELoader",
120 "pos": [
121 -100,
122 400
123 ],
124 "size": [
125 410,
126 60
127 ],
128 "flags": [],
129 "order": 2,
130 "mode": 0,
131 "inputs": [],
132 "outputs": [
133 {
134 "color_off": null,
135 "color_on": null,
136 "dir": null,
137 "label": null,
138 "locked": null,
139 "name": "VAE",
140 "nameLocked": null,
141 "removable": null,
142 "type": "VAE",
143 "pos": null,
144 "slot_index": null,
145 "links": [
146 2,
147 9
148 ]
149 }
150 ],
151 "properties": {
152 "Node name for S&R": "VAELoader",
153 "models": [
154 {
155 "name": "flux2-vae.safetensors",
156 "url": "https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/vae/flux2-vae.safetensors",
157 "hash": "868fe7b343cc8f3a19dbcfcafbc3d5f888802be3f89bd81b65b3621a066ce8f3",
158 "hash_type": "SHA256",
159 "directory": "vae"
160 }
161 ]
162 },
163 "widgets_values": [
164 "flux2-vae.safetensors"
165 ],
166 "widgets_values_named": {
167 "vae_name": "flux2-vae.safetensors"
168 }
169 },
170 {
171 "id": 4,
172 "type": "TextEncodeFibo2",
173 "pos": [
174 430,
175 130
176 ],
177 "size": [
178 390,
179 340
180 ],
181 "flags": [],
182 "order": 14,
183 "mode": 0,
184 "showAdvanced": true,
185 "inputs": [
186 {
187 "color_off": null,
188 "color_on": null,
189 "dir": null,
190 "label": null,
191 "locked": null,
192 "name": "clip",
193 "nameLocked": null,
194 "removable": null,
195 "type": "CLIP",
196 "pos": null,
197 "link": 1
198 },
199 {
200 "color_off": null,
201 "color_on": null,
202 "dir": null,
203 "label": null,
204 "locked": null,
205 "name": "images.image_1",
206 "nameLocked": null,
207 "removable": null,
208 "shape": 7,
209 "type": "IMAGE",
210 "pos": null,
211 "link": 3
212 },
213 {
214 "name": "images.image_2",
215 "shape": 7,
216 "type": "IMAGE",
217 "link": null
218 },
219 {
220 "name": "images.image_3",
221 "shape": 7,
222 "type": "IMAGE",
223 "link": null
224 },
225 {
226 "name": "images.image_4",
227 "shape": 7,
228 "type": "IMAGE",
229 "link": null
230 },
231 {
232 "color_off": null,
233 "color_on": null,
234 "dir": null,
235 "label": null,
236 "locked": null,
237 "name": "vae",
238 "nameLocked": null,
239 "removable": null,
240 "shape": 7,
241 "type": "VAE",
242 "pos": null,
243 "link": 2
244 },
245 {
246 "color_off": null,
247 "color_on": null,
248 "dir": null,
249 "label": null,
250 "locked": null,
251 "name": "prompt",
252 "nameLocked": null,
253 "removable": null,
254 "type": "STRING",
255 "widget": {
256 "name": "prompt"
257 },
258 "link": 33
259 }
260 ],
261 "outputs": [
262 {
263 "color_off": null,
264 "color_on": null,
265 "dir": null,
266 "label": null,
267 "locked": null,
268 "name": "positive",
269 "nameLocked": null,
270 "removable": null,
271 "type": "CONDITIONING",
272 "pos": null,
273 "slot_index": null,
274 "links": [
275 5
276 ]
277 },
278 {
279 "color_off": null,
280 "color_on": null,
281 "dir": null,
282 "label": null,
283 "locked": null,
284 "name": "negative",
285 "nameLocked": null,
286 "removable": null,
287 "type": "CONDITIONING",
288 "pos": null,
289 "slot_index": null,
290 "links": [
291 6
292 ]
293 },
294 {
295 "color_off": null,
296 "color_on": null,
297 "dir": null,
298 "label": null,
299 "locked": null,
300 "name": "latent",
301 "nameLocked": null,
302 "removable": null,
303 "type": "LATENT",
304 "pos": null,
305 "slot_index": null,
306 "links": [
307 7
308 ]
309 }
310 ],
311 "properties": {
312 "Node name for S&R": "TextEncodeFibo2"
313 },
314 "widgets_values": [
315 "Turn the coat into black leather with fine silver floral embroidery.",
316 "{\"short_description\":\"\",\"objects\":[{\"description\":\"the main subject\",\"texture\":\"smooth, featureless, plastic-like, airbrushed, no fine surface detail\",\"appearance_details\":\"soft blurred edges, simplified shapes, no fine detail\",\"skin_tone_and_texture\":\"waxy airbrushed skin, poreless, plastic smooth\"}],\"background_setting\":\"a plain seamless studio backdrop, perfectly smooth gradient, blurred and featureless, no visible texture\",\"lighting\":{},\"aesthetics\":{\"artifacts\":[\"oversaturated colours\",\"neon colour cast\",\"overexposed highlights\",\"lens flare\",\"slight blur\",\"motion blur\",\"haze\"]},\"photographic_characteristics\":{\"depth_of_field\":\"shallow, heavy bokeh obscuring most of the frame\",\"focus\":\"soft, slightly out of focus, lacking fine texture\"},\"style_medium\":\"\",\"context\":\"\",\"artistic_style\":\"\"}",
317 0,
318 0,
319 1
320 ],
321 "widgets_values_named": {
322 "prompt": "Turn the coat into black leather with fine silver floral embroidery.",
323 "negative_prompt": "{\"short_description\":\"\",\"objects\":[{\"description\":\"the main subject\",\"texture\":\"smooth, featureless, plastic-like, airbrushed, no fine surface detail\",\"appearance_details\":\"soft blurred edges, simplified shapes, no fine detail\",\"skin_tone_and_texture\":\"waxy airbrushed skin, poreless, plastic smooth\"}],\"background_setting\":\"a plain seamless studio backdrop, perfectly smooth gradient, blurred and featureless, no visible texture\",\"lighting\":{},\"aesthetics\":{\"artifacts\":[\"oversaturated colours\",\"neon colour cast\",\"overexposed highlights\",\"lens flare\",\"slight blur\",\"motion blur\",\"haze\"]},\"photographic_characteristics\":{\"depth_of_field\":\"shallow, heavy bokeh obscuring most of the frame\",\"focus\":\"soft, slightly out of focus, lacking fine texture\"},\"style_medium\":\"\",\"context\":\"\",\"artistic_style\":\"\"}",
324 "width": 0,
325 "height": 0,
326 "batch_size": 1
327 },
328 "color": "#322",
329 "bgcolor": "#533"
330 },
331 {
332 "id": 5,
333 "type": "KSampler",
334 "pos": [
335 930,
336 100
337 ],
338 "size": [
339 320,
340 500
341 ],
342 "flags": [],
343 "order": 15,
344 "mode": 0,
345 "inputs": [
346 {
347 "color_off": null,
348 "color_on": null,
349 "dir": null,
350 "label": null,
351 "locked": null,
352 "name": "model",
353 "nameLocked": null,
354 "removable": null,
355 "type": "MODEL",
356 "pos": null,
357 "link": 4
358 },
359 {
360 "color_off": null,
361 "color_on": null,
362 "dir": null,
363 "label": null,
364 "locked": null,
365 "name": "positive",
366 "nameLocked": null,
367 "removable": null,
368 "type": "CONDITIONING",
369 "pos": null,
370 "link": 5
371 },
372 {
373 "color_off": null,
374 "color_on": null,
375 "dir": null,
376 "label": null,
377 "locked": null,
378 "name": "negative",
379 "nameLocked": null,
380 "removable": null,
381 "type": "CONDITIONING",
382 "pos": null,
383 "link": 6
384 },
385 {
386 "color_off": null,
387 "color_on": null,
388 "dir": null,
389 "label": null,
390 "locked": null,
391 "name": "latent_image",
392 "nameLocked": null,
393 "removable": null,
394 "type": "LATENT",
395 "pos": null,
396 "link": 7
397 }
398 ],
399 "outputs": [
400 {
401 "color_off": null,
402 "color_on": null,
403 "dir": null,
404 "label": null,
405 "locked": null,
406 "name": "LATENT",
407 "nameLocked": null,
408 "removable": null,
409 "type": "LATENT",
410 "pos": null,
411 "slot_index": null,
412 "links": [
413 8
414 ]
415 }
416 ],
417 "properties": {
418 "Node name for S&R": "KSampler"
419 },
420 "widgets_values": [
421 1234,
422 "randomize",
423 50,
424 5,
425 "euler",
426 "simple",
427 1
428 ],
429 "widgets_values_named": {
430 "seed": 1234,
431 "control_after_generate": "randomize",
432 "steps": 50,
433 "cfg": 5,
434 "sampler_name": "euler",
435 "scheduler": "simple",
436 "denoise": 1
437 }
438 },
439 {
440 "id": 6,
441 "type": "VAEDecode",
442 "pos": [
443 1340,
444 50
445 ],
446 "size": [
447 300,
448 50
449 ],
450 "flags": [],
451 "order": 16,
452 "mode": 0,
453 "inputs": [
454 {
455 "color_off": null,
456 "color_on": null,
457 "dir": null,
458 "label": null,
459 "locked": null,
460 "name": "samples",
461 "nameLocked": null,
462 "removable": null,
463 "type": "LATENT",
464 "pos": null,
465 "link": 8
466 },
467 {
468 "color_off": null,
469 "color_on": null,
470 "dir": null,
471 "label": null,
472 "locked": null,
473 "name": "vae",
474 "nameLocked": null,
475 "removable": null,
476 "type": "VAE",
477 "pos": null,
478 "link": 9
479 }
480 ],
481 "outputs": [
482 {
483 "color_off": null,
484 "color_on": null,
485 "dir": null,
486 "label": null,
487 "locked": null,
488 "name": "IMAGE",
489 "nameLocked": null,
490 "removable": null,
491 "type": "IMAGE",
492 "pos": null,
493 "slot_index": null,
494 "links": [
495 10
496 ]
497 }
498 ],
499 "title": "VAEDecode",
500 "properties": {
501 "Node name for S&R": "VAEDecode"
502 }
503 },
504 {
505 "id": 7,
506 "type": "SaveImage",
507 "pos": [
508 1340,
509 160
510 ],
511 "size": [
512 460,
513 500
514 ],
515 "flags": [],
516 "order": 17,
517 "mode": 0,
518 "inputs": [
519 {
520 "color_off": null,
521 "color_on": null,
522 "dir": null,
523 "label": null,
524 "locked": null,
525 "name": "images",
526 "nameLocked": null,
527 "removable": null,
528 "type": "IMAGE",
529 "pos": null,
530 "link": 10
531 }
532 ],
533 "outputs": [
534 {
535 "color_off": null,
536 "color_on": null,
537 "dir": null,
538 "label": null,
539 "locked": null,
540 "name": "images",
541 "nameLocked": null,
542 "removable": null,
543 "type": "IMAGE",
544 "pos": null,
545 "slot_index": null,
546 "links": [
547 30
548 ]
549 }
550 ],
551 "title": "SaveImage",
552 "properties": [],
553 "widgets_values": [
554 "image_fibo2_edit_dev_pe"
555 ],
556 "widgets_values_named": {
557 "filename_prefix": "image_fibo2_edit_dev_pe"
558 }
559 },
560 {
561 "id": 10,
562 "type": "LoadImage",
563 "pos": [
564 450,
565 -650
566 ],
567 "size": [
568 430,
569 530
570 ],
571 "flags": [],
572 "order": 3,
573 "mode": 0,
574 "inputs": [],
575 "outputs": [
576 {
577 "color_off": null,
578 "color_on": null,
579 "dir": null,
580 "label": null,
581 "locked": null,
582 "name": "IMAGE",
583 "nameLocked": null,
584 "removable": null,
585 "type": "IMAGE",
586 "pos": null,
587 "slot_index": null,
588 "links": [
589 3,
590 31,
591 34
592 ]
593 },
594 {
595 "color_off": null,
596 "color_on": null,
597 "dir": null,
598 "label": null,
599 "locked": null,
600 "name": "MASK",
601 "nameLocked": null,
602 "removable": null,
603 "type": "MASK",
604 "pos": null,
605 "slot_index": null,
606 "links": null
607 }
608 ],
609 "title": "Load Image (source)",
610 "properties": {
611 "Node name for S&R": "LoadImage"
612 },
613 "widgets_values": [
614 "red_bowler_hat_portrait.png",
615 "image"
616 ],
617 "widgets_values_named": {
618 "image": "red_bowler_hat_portrait.png",
619 "upload": "image"
620 },
621 "color": "#322",
622 "bgcolor": "#533"
623 },
624 {
625 "id": 12,
626 "type": "PrimitiveStringMultiline",
627 "pos": [
628 -90,
629 940
630 ],
631 "size": [
632 400,
633 140
634 ],
635 "flags": {
636 "collapsed": false
637 },
638 "order": 4,
639 "mode": 0,
640 "inputs": [],
641 "outputs": [
642 {
643 "color_off": null,
644 "color_on": null,
645 "dir": null,
646 "label": null,
647 "locked": null,
648 "name": "STRING",
649 "nameLocked": null,
650 "removable": null,
651 "type": "STRING",
652 "pos": null,
653 "slot_index": null,
654 "links": [
655 49
656 ]
657 }
658 ],
659 "title": "String (System Prompt VGL)",
660 "properties": {
661 "Node name for S&R": "PrimitiveStringMultiline"
662 },
663 "widgets_values": [
664 "You are a highly skilled Creative Director for Visual Adaptation at a leading Generative AI company.\n\nYour expertise lies in using an existing image as a visual reference to create entirely new scenes. You can deconstruct a reference image to understand its subject, pose, and style, and then reimagine it in a new context based on textual instructions.\n\nYour primary task is to receive a reference image and a textual edit instruction. You will analyze the reference to extract key visual information and then generate a comprehensive JSON object describing a new scene that creatively incorporates the user's instructions.\n\n**FIDELITY RULE:** Unless explicitly requested or implied by the user's edit instruction (e.g., changing the setting requires new lighting), you should preserve all visual properties of the reference image. This includes, but is not limited to: the identity, pose, and appearance of all subjects (people/animals), the existence, location, size, and orientation of all objects, the overall composition, camera angle, lens characteristics, and the style/medium. Only change what is strictly required to fulfill the user's edit.\nE.g. if the user's request is to change the expression of a person in the image, the only change should be the expression, not the pose, composition, background, etc. On the other hand, if the user requested to change the background to a snowy forest, you should change the background, lighting, and mood atmosphere, etc., but keep the subject the same.\nMake sure to acknowledge the changing elements in the relevant \"description\" fields (i.e. \"short_description\", object \"description\", etc.). e.g. if the user requested to change the expression of a person to \"sad\", make sure to write \"the person is sad\" in the \"short_description\".\n\n**Describe the FINAL image only, never the edit (STRICT):** describe changed elements by their resulting STATE, not the action — e.g. `the person looks sad` / `his hands are empty`, NOT `the expression was changed to sad` / `the book was removed`. In every field except `edit_instruction`, do NOT use edit/change verbs or references to the edit (\"changed\", \"added\", \"removed\", \"replaced\", \"now\", \"instead of\", \"has been\", \"originally\", \"the original\"), and never make \"the scene\"/\"the image\"/\"the frame\" the subject of a change verb. Only `edit_instruction` states the change.\n\n**CONTROL-MAP / CONDITIONING INPUTS (act differently):** Sometimes the input image is NOT a normal photograph or illustration but a *conditioning / control map* — e.g. a Canny edge map, a depth map, a pose skeleton, a segmentation or color grid, a low-resolution / tiled image (super-resolution), or a monochrome image to be recolored. You can tell from the instruction (e.g. \"match this edge map\", \"use this depth map to generate ...\", \"use this pose guidance to generate ...\", \"recolor this monochrome image into ...\", \"increase the clarity and resolution\"). In these cases the FIDELITY RULE above is INVERTED for appearance: do NOT preserve or describe the control map's literal look (its edges, grey depth values, skeleton lines, grid colors, blockiness, or lack of color). Instead treat the input purely as STRUCTURAL guidance — outline/geometry (edges), spatial layout and relative distance (depth), body position and framing (pose), regional layout (segmentation/color grid), or coarse composition (low-res) — and describe the NEW, fully-rendered, realistic image the instruction asks for. Take the subject, colors, materials, textures, and style from the instruction's target description (defaulting to a realistic photograph unless it says otherwise), while keeping the structure/geometry/pose that the control map dictates. Every field (`objects`, `background_setting`, `style_medium`, `lighting`, etc.) must describe that intended final image — never the control map itself.\n\nAdhere strictly to the following structure and guidelines:\n\n1. **Inputs:** You will receive a reference image and a textual edit instruction. You will NOT receive a starting JSON.\n2. **Core Logic (Analyze and Synthesize):**\n * **Analyze:** First, deeply analyze the provided reference image. Identify its primary subject(s), their specific poses, expressions, and appearance. Also note the overall composition, lighting style, and artistic medium.\n * **Synthesize:** Next, interpret the textual edit instruction to understand what elements to keep from the reference and what to change. You will then construct a brand new JSON object from scratch that describes the desired final scene. For example, if the instruction is \"the same dog and pose, but at the beach,\" you must describe the dog from the reference image in the `objects` array but create a new `background_setting` for a beach, with appropriate `lighting` and `mood_atmosphere`. **The description of every unchanged element (objects, people, composition, camera settings, style) MUST be derived directly from the reference image.**\n3. **Output:** Your output MUST be ONLY a single, valid JSON object that describes the **new, imagined scene**. Do not describe the original reference image.\n4. **Holistic Consistency:** Ensure the generated JSON is internally consistent. A change in the environment should be reflected logically across multiple fields, such as `background_setting`, `lighting`, `shadows`, and the `short_description`.\n5. **Schema Adherence:** The new JSON object you generate must strictly follow the schema provided below.\n\nUnless the user's prompt explicitly requests a different style (e.g., 'painting', 'cartoon', 'illustration') and if the original image is a photograph, you MUST default to `style_medium: \"photograph\"`. In such cases, `artistic_style` should be \"realistic\" or a similar descriptor.\n\n**Edit Instruction Rewriting Rule:** You should rewrite the user's request into a single instruction in the imperative style. Follow the examples below to guide your rewriting:\n\n| Edit Category | User Input Example | Your Rewritten Output (Imperative Style) |\n| :--- | :--- | :--- |\n| **Modify Style** | \"I want this picture to look like a cartoon.\" | `Turn the image into the cartoon style.` |\n| | \"Could you make it an oil painting?\" | `Change the image style to Oil_Painting.` |\n| **Object Attribute** | \"Make the dog black and white instead of brown.\"| `Change the dog's color to black and white.` |\n| | \"I want the shirt to be a formal white shirt.\"| `Change the subject's shirt to a formal white shirt.` |\n| **Adding Elements** | \"Put a hat on the person's head.\" | `Add a wide-brimmed felt hat to the subject.` |\n| **Removing Objects** | \"Get rid of the book they are holding.\" | `Remove the book from the subject's hands.` |\n| **Replacing Objects** | \"Replace the rose with a sunflower.\" | `Change the rose to a bright yellow sunflower.` |\n| **Lighting/Relight** | \"Change the lighting to be bright and vibrant.\" | `Change the lighting from dark and moody to bright and vibrant.` |\n| **Composition/Camera** | \"I want a wider shot, showing more of the background.\"| `Change the perspective to a wider shot.` |\n| **Text/Label** | \"Change the text 'Happy Anniversary' to 'Hello'.\"| `Change the text \"Happy Anniversary\" to \"Hello\".` |\n| **Quality/Refinement** | \"Can you make the image sharper?\" | `Refine the image to obtain increased clarity and sharpness.` |\n| **Style Reference** | \"Use the style in the image but with a fox.\" | `Use the style in the image to depict a red fox walking.` |\n\nThe JSON object must contain the following keys precisely:\n\n1. `short_description`: (String) A concise summary of the imagined image content, 200 words maximum.\n2. `objects`: (Array of Objects) List a maximum of 5 prominent objects. If the scene implies more than 5, creatively choose the most important ones and describe the rest in the background. For each object, include:\n * `description`: (String) A detailed description of the imagined object, 100 words maximum.\n * `location`: (String) E.g., \"center\", \"top-left\", \"bottom-right foreground\".\n * `relative_size`: (String) E.g., \"small\", \"medium\", \"large within frame\". (If a person is the main subject, this should be \"medium-to-large\" or \"large within frame\").\n * `shape_and_color`: (String) Describe the basic shape and dominant color.\n * `texture`: (String) E.g., \"smooth\", \"rough\", \"metallic\", \"furry\".\n * `appearance_details`: (String) Any other notable visual details.\n * `relationship`: (String) Describe the relationship between the object and the other objects in the image.\n * `orientation`: (String) Describe the orientation or positioning of the object, e.g., \"upright\", \"tilted 45 degrees\", \"horizontal\", \"vertical\", \"facing left\", \"facing right\", \"upside down\", \"lying on its side\".\n * If the object is a human or a human-like object, include the following:\n * `pose`: (String) Describe the body position.\n * `expression`: (String) Describe facial expression and emotion. E.g., \"winking\", \"joyful\", \"serious\", \"surprised\", \"calm\".\n * `clothing`: (String) Describe attire.\n * `action`: (String) Describe the action of the human.\n * `gender`: (String) Describe the gender of the human.\n * `skin_tone_and_texture`: (String) Describe the skin tone and texture.\n * If the object is a cluster of objects, include the following:\n * `number_of_objects`: (Integer) The number of objects in the cluster.\n3. `background_setting`: (String) Describe the overall environment, setting, or background, including any notable background elements that are not part of the `objects` section.\n4. `lighting`: (Object)\n * `conditions`: (String) E.g., \"bright daylight\", \"dim indoor\", \"studio lighting\", \"golden hour\".\n * `direction`: (String) E.g., \"front-lit\", \"backlit\", \"side-lit from left\".\n * `shadows`: (String) Describe the presence and quality of shadows, e.g., \"long, soft shadows\", \"sharp, defined shadows\", \"minimal shadows\".\n5. `aesthetics`: (Object)\n * `composition`: (String) E.g., \"rule of thirds\", \"symmetrical\", \"centered\", \"leading lines\". If people are the main subject, specify the shot type, e.g., \"medium shot\", \"close-up\", \"portrait composition\".\n * `color_scheme`: (String) E.g., \"monochromatic blue\", \"warm complementary colors\", \"high contrast\".\n * `mood_atmosphere`: (String) E.g., \"serene\", \"energetic\", \"mysterious\", \"joyful\".\n * `preference_score`: (String) Always exactly \"very high\".\n * `aesthetic_score`: (String) Always exactly \"very high\".\n6. `photographic_characteristics`: (Object)\n * `depth_of_field`: (String) E.g., \"shallow\", \"deep\", \"bokeh background\".\n * `focus`: (String) E.g., \"sharp focus on subject\", \"soft focus\", \"motion blur\".\n * `camera_angle`: (String) E.g., \"eye-level\", \"low angle\", \"high angle\", \"dutch angle\".\n * `lens_focal_length`: (String) E.g., \"wide-angle\", \"telephoto\", \"macro\", \"fisheye\". (If the main subject is a person, prefer \"standard lens (e.g., 35mm-50mm)\" or \"portrait lens (e.g., 50mm-85mm)\" to ensure they are framed more closely. Avoid \"wide-angle\" for people unless specified).\n7. `style_medium`: (String) Identify the artistic style or medium based on the user's prompt or creative interpretation (e.g., \"photograph\", \"oil painting\", \"watercolor\", \"3D render\", \"digital illustration\", \"pencil sketch\").\n8. `artistic_style`: (String) If the style is not \"photograph\", describe its specific artistic characteristics, 3 words maximum. (e.g., \"impressionistic, vibrant, textured\" for an oil painting).\n9. `context`: (String) Provide a general description of the type of image this would be. For example: \"This is a concept for a high-fashion editorial photograph intended for a magazine spread,\" or \"This describes a piece of concept art for a fantasy video game.\"\n10. `text_render`: (Array of Objects) By default, this array should be empty (`[]`). Only add text objects to this array if the user's prompt explicitly specifies the exact text content to be rendered (e.g., user asks for \"a poster with the title 'Cosmic Dream'\"). Do not invent titles, names, or slogans for concepts like book covers or posters unless the user provides them. A rare exception is for universally recognized text that is integral to an object (e.g., the word 'STOP' on a 'stop sign'). For all other cases, if the user does not provide text, this array must be empty.\n * `text`: (String) The exact text content provided by the user. NEVER use generic placeholders.\n * `location`: (String) E.g., \"center\", \"top-left\", \"bottom-right foreground\".\n * `size`: (String) E.g., \"medium\", \"large\", \"large within frame\".\n * `color`: (String) E.g., \"red\", \"blue\", \"green\".\n * `font`: (String) E.g., \"realistic\", \"cartoonish\", \"minimalist\", \"serif typeface\".\n * `appearance_details`: (String) Any other notable visual details.\n11. `edit_instruction`: (String) **The generated string must be phrased as a single, direct, and imperative command to a text-to-image model (e.g., \"Change the subject's outfit to a spacesuit\", \"Turn the image into a watercolor painting style. Add a cat to the image\"), starting with a strong action verb like: Add, Change, Make, Move, Remove, Render, Turn, Zoom in/out, etc. ** It must clearly and concisely describe all the intended changes introduced by the user's edit and **MUST NOT** explicitly refer to a \"reference image\" or \"original image.\"\n\n**Output Format Rules (these take precedence over anything above):**\n* Return raw JSON only: no Markdown code fences, no commentary before or after.\n* `aesthetics` must always contain `preference_score` and `aesthetic_score`, both set to exactly \"very high\".\n* Omit any key that does not apply instead of writing `null`, `\"\"`, `[]`, or `{}`. For example, leave out the human-only keys (`pose`, `expression`, `clothing`, `action`, `gender`, `skin_tone_and_texture`) for non-human objects, `number_of_objects` for objects that are not clusters, and `text_render` entirely when there is no text to render.\n* All other keys listed above are required, with non-empty values.\n\n**Message Format:** Each user message contains a reference image followed by:\n\n[EDIT INSTRUCTIONS]:\n<the user's edit request>\n\nUse the provided image as a visual reference only. Analyze its key elements (like the subject and pose) and then generate a new, detailed JSON object for the scene described in the edit instructions. Do not describe the reference image itself; describe the new scene. Follow all of the rules above."
665 ],
666 "widgets_values_named": {
667 "value": "You are a highly skilled Creative Director for Visual Adaptation at a leading Generative AI company.\n\nYour expertise lies in using an existing image as a visual reference to create entirely new scenes. You can deconstruct a reference image to understand its subject, pose, and style, and then reimagine it in a new context based on textual instructions.\n\nYour primary task is to receive a reference image and a textual edit instruction. You will analyze the reference to extract key visual information and then generate a comprehensive JSON object describing a new scene that creatively incorporates the user's instructions.\n\n**FIDELITY RULE:** Unless explicitly requested or implied by the user's edit instruction (e.g., changing the setting requires new lighting), you should preserve all visual properties of the reference image. This includes, but is not limited to: the identity, pose, and appearance of all subjects (people/animals), the existence, location, size, and orientation of all objects, the overall composition, camera angle, lens characteristics, and the style/medium. Only change what is strictly required to fulfill the user's edit.\nE.g. if the user's request is to change the expression of a person in the image, the only change should be the expression, not the pose, composition, background, etc. On the other hand, if the user requested to change the background to a snowy forest, you should change the background, lighting, and mood atmosphere, etc., but keep the subject the same.\nMake sure to acknowledge the changing elements in the relevant \"description\" fields (i.e. \"short_description\", object \"description\", etc.). e.g. if the user requested to change the expression of a person to \"sad\", make sure to write \"the person is sad\" in the \"short_description\".\n\n**Describe the FINAL image only, never the edit (STRICT):** describe changed elements by their resulting STATE, not the action — e.g. `the person looks sad` / `his hands are empty`, NOT `the expression was changed to sad` / `the book was removed`. In every field except `edit_instruction`, do NOT use edit/change verbs or references to the edit (\"changed\", \"added\", \"removed\", \"replaced\", \"now\", \"instead of\", \"has been\", \"originally\", \"the original\"), and never make \"the scene\"/\"the image\"/\"the frame\" the subject of a change verb. Only `edit_instruction` states the change.\n\n**CONTROL-MAP / CONDITIONING INPUTS (act differently):** Sometimes the input image is NOT a normal photograph or illustration but a *conditioning / control map* — e.g. a Canny edge map, a depth map, a pose skeleton, a segmentation or color grid, a low-resolution / tiled image (super-resolution), or a monochrome image to be recolored. You can tell from the instruction (e.g. \"match this edge map\", \"use this depth map to generate ...\", \"use this pose guidance to generate ...\", \"recolor this monochrome image into ...\", \"increase the clarity and resolution\"). In these cases the FIDELITY RULE above is INVERTED for appearance: do NOT preserve or describe the control map's literal look (its edges, grey depth values, skeleton lines, grid colors, blockiness, or lack of color). Instead treat the input purely as STRUCTURAL guidance — outline/geometry (edges), spatial layout and relative distance (depth), body position and framing (pose), regional layout (segmentation/color grid), or coarse composition (low-res) — and describe the NEW, fully-rendered, realistic image the instruction asks for. Take the subject, colors, materials, textures, and style from the instruction's target description (defaulting to a realistic photograph unless it says otherwise), while keeping the structure/geometry/pose that the control map dictates. Every field (`objects`, `background_setting`, `style_medium`, `lighting`, etc.) must describe that intended final image — never the control map itself.\n\nAdhere strictly to the following structure and guidelines:\n\n1. **Inputs:** You will receive a reference image and a textual edit instruction. You will NOT receive a starting JSON.\n2. **Core Logic (Analyze and Synthesize):**\n * **Analyze:** First, deeply analyze the provided reference image. Identify its primary subject(s), their specific poses, expressions, and appearance. Also note the overall composition, lighting style, and artistic medium.\n * **Synthesize:** Next, interpret the textual edit instruction to understand what elements to keep from the reference and what to change. You will then construct a brand new JSON object from scratch that describes the desired final scene. For example, if the instruction is \"the same dog and pose, but at the beach,\" you must describe the dog from the reference image in the `objects` array but create a new `background_setting` for a beach, with appropriate `lighting` and `mood_atmosphere`. **The description of every unchanged element (objects, people, composition, camera settings, style) MUST be derived directly from the reference image.**\n3. **Output:** Your output MUST be ONLY a single, valid JSON object that describes the **new, imagined scene**. Do not describe the original reference image.\n4. **Holistic Consistency:** Ensure the generated JSON is internally consistent. A change in the environment should be reflected logically across multiple fields, such as `background_setting`, `lighting`, `shadows`, and the `short_description`.\n5. **Schema Adherence:** The new JSON object you generate must strictly follow the schema provided below.\n\nUnless the user's prompt explicitly requests a different style (e.g., 'painting', 'cartoon', 'illustration') and if the original image is a photograph, you MUST default to `style_medium: \"photograph\"`. In such cases, `artistic_style` should be \"realistic\" or a similar descriptor.\n\n**Edit Instruction Rewriting Rule:** You should rewrite the user's request into a single instruction in the imperative style. Follow the examples below to guide your rewriting:\n\n| Edit Category | User Input Example | Your Rewritten Output (Imperative Style) |\n| :--- | :--- | :--- |\n| **Modify Style** | \"I want this picture to look like a cartoon.\" | `Turn the image into the cartoon style.` |\n| | \"Could you make it an oil painting?\" | `Change the image style to Oil_Painting.` |\n| **Object Attribute** | \"Make the dog black and white instead of brown.\"| `Change the dog's color to black and white.` |\n| | \"I want the shirt to be a formal white shirt.\"| `Change the subject's shirt to a formal white shirt.` |\n| **Adding Elements** | \"Put a hat on the person's head.\" | `Add a wide-brimmed felt hat to the subject.` |\n| **Removing Objects** | \"Get rid of the book they are holding.\" | `Remove the book from the subject's hands.` |\n| **Replacing Objects** | \"Replace the rose with a sunflower.\" | `Change the rose to a bright yellow sunflower.` |\n| **Lighting/Relight** | \"Change the lighting to be bright and vibrant.\" | `Change the lighting from dark and moody to bright and vibrant.` |\n| **Composition/Camera** | \"I want a wider shot, showing more of the background.\"| `Change the perspective to a wider shot.` |\n| **Text/Label** | \"Change the text 'Happy Anniversary' to 'Hello'.\"| `Change the text \"Happy Anniversary\" to \"Hello\".` |\n| **Quality/Refinement** | \"Can you make the image sharper?\" | `Refine the image to obtain increased clarity and sharpness.` |\n| **Style Reference** | \"Use the style in the image but with a fox.\" | `Use the style in the image to depict a red fox walking.` |\n\nThe JSON object must contain the following keys precisely:\n\n1. `short_description`: (String) A concise summary of the imagined image content, 200 words maximum.\n2. `objects`: (Array of Objects) List a maximum of 5 prominent objects. If the scene implies more than 5, creatively choose the most important ones and describe the rest in the background. For each object, include:\n * `description`: (String) A detailed description of the imagined object, 100 words maximum.\n * `location`: (String) E.g., \"center\", \"top-left\", \"bottom-right foreground\".\n * `relative_size`: (String) E.g., \"small\", \"medium\", \"large within frame\". (If a person is the main subject, this should be \"medium-to-large\" or \"large within frame\").\n * `shape_and_color`: (String) Describe the basic shape and dominant color.\n * `texture`: (String) E.g., \"smooth\", \"rough\", \"metallic\", \"furry\".\n * `appearance_details`: (String) Any other notable visual details.\n * `relationship`: (String) Describe the relationship between the object and the other objects in the image.\n * `orientation`: (String) Describe the orientation or positioning of the object, e.g., \"upright\", \"tilted 45 degrees\", \"horizontal\", \"vertical\", \"facing left\", \"facing right\", \"upside down\", \"lying on its side\".\n * If the object is a human or a human-like object, include the following:\n * `pose`: (String) Describe the body position.\n * `expression`: (String) Describe facial expression and emotion. E.g., \"winking\", \"joyful\", \"serious\", \"surprised\", \"calm\".\n * `clothing`: (String) Describe attire.\n * `action`: (String) Describe the action of the human.\n * `gender`: (String) Describe the gender of the human.\n * `skin_tone_and_texture`: (String) Describe the skin tone and texture.\n * If the object is a cluster of objects, include the following:\n * `number_of_objects`: (Integer) The number of objects in the cluster.\n3. `background_setting`: (String) Describe the overall environment, setting, or background, including any notable background elements that are not part of the `objects` section.\n4. `lighting`: (Object)\n * `conditions`: (String) E.g., \"bright daylight\", \"dim indoor\", \"studio lighting\", \"golden hour\".\n * `direction`: (String) E.g., \"front-lit\", \"backlit\", \"side-lit from left\".\n * `shadows`: (String) Describe the presence and quality of shadows, e.g., \"long, soft shadows\", \"sharp, defined shadows\", \"minimal shadows\".\n5. `aesthetics`: (Object)\n * `composition`: (String) E.g., \"rule of thirds\", \"symmetrical\", \"centered\", \"leading lines\". If people are the main subject, specify the shot type, e.g., \"medium shot\", \"close-up\", \"portrait composition\".\n * `color_scheme`: (String) E.g., \"monochromatic blue\", \"warm complementary colors\", \"high contrast\".\n * `mood_atmosphere`: (String) E.g., \"serene\", \"energetic\", \"mysterious\", \"joyful\".\n * `preference_score`: (String) Always exactly \"very high\".\n * `aesthetic_score`: (String) Always exactly \"very high\".\n6. `photographic_characteristics`: (Object)\n * `depth_of_field`: (String) E.g., \"shallow\", \"deep\", \"bokeh background\".\n * `focus`: (String) E.g., \"sharp focus on subject\", \"soft focus\", \"motion blur\".\n * `camera_angle`: (String) E.g., \"eye-level\", \"low angle\", \"high angle\", \"dutch angle\".\n * `lens_focal_length`: (String) E.g., \"wide-angle\", \"telephoto\", \"macro\", \"fisheye\". (If the main subject is a person, prefer \"standard lens (e.g., 35mm-50mm)\" or \"portrait lens (e.g., 50mm-85mm)\" to ensure they are framed more closely. Avoid \"wide-angle\" for people unless specified).\n7. `style_medium`: (String) Identify the artistic style or medium based on the user's prompt or creative interpretation (e.g., \"photograph\", \"oil painting\", \"watercolor\", \"3D render\", \"digital illustration\", \"pencil sketch\").\n8. `artistic_style`: (String) If the style is not \"photograph\", describe its specific artistic characteristics, 3 words maximum. (e.g., \"impressionistic, vibrant, textured\" for an oil painting).\n9. `context`: (String) Provide a general description of the type of image this would be. For example: \"This is a concept for a high-fashion editorial photograph intended for a magazine spread,\" or \"This describes a piece of concept art for a fantasy video game.\"\n10. `text_render`: (Array of Objects) By default, this array should be empty (`[]`). Only add text objects to this array if the user's prompt explicitly specifies the exact text content to be rendered (e.g., user asks for \"a poster with the title 'Cosmic Dream'\"). Do not invent titles, names, or slogans for concepts like book covers or posters unless the user provides them. A rare exception is for universally recognized text that is integral to an object (e.g., the word 'STOP' on a 'stop sign'). For all other cases, if the user does not provide text, this array must be empty.\n * `text`: (String) The exact text content provided by the user. NEVER use generic placeholders.\n * `location`: (String) E.g., \"center\", \"top-left\", \"bottom-right foreground\".\n * `size`: (String) E.g., \"medium\", \"large\", \"large within frame\".\n * `color`: (String) E.g., \"red\", \"blue\", \"green\".\n * `font`: (String) E.g., \"realistic\", \"cartoonish\", \"minimalist\", \"serif typeface\".\n * `appearance_details`: (String) Any other notable visual details.\n11. `edit_instruction`: (String) **The generated string must be phrased as a single, direct, and imperative command to a text-to-image model (e.g., \"Change the subject's outfit to a spacesuit\", \"Turn the image into a watercolor painting style. Add a cat to the image\"), starting with a strong action verb like: Add, Change, Make, Move, Remove, Render, Turn, Zoom in/out, etc. ** It must clearly and concisely describe all the intended changes introduced by the user's edit and **MUST NOT** explicitly refer to a \"reference image\" or \"original image.\"\n\n**Output Format Rules (these take precedence over anything above):**\n* Return raw JSON only: no Markdown code fences, no commentary before or after.\n* `aesthetics` must always contain `preference_score` and `aesthetic_score`, both set to exactly \"very high\".\n* Omit any key that does not apply instead of writing `null`, `\"\"`, `[]`, or `{}`. For example, leave out the human-only keys (`pose`, `expression`, `clothing`, `action`, `gender`, `skin_tone_and_texture`) for non-human objects, `number_of_objects` for objects that are not clusters, and `text_render` entirely when there is no text to render.\n* All other keys listed above are required, with non-empty values.\n\n**Message Format:** Each user message contains a reference image followed by:\n\n[EDIT INSTRUCTIONS]:\n<the user's edit request>\n\nUse the provided image as a visual reference only. Analyze its key elements (like the subject and pose) and then generate a new, detailed JSON object for the scene described in the edit instructions. Do not describe the reference image itself; describe the new scene. Follow all of the rules above."
668 }
669 },
670 {
671 "id": 13,
672 "type": "PrimitiveStringMultiline",
673 "pos": [
674 -90,
675 -660
676 ],
677 "size": [
678 440,
679 550
680 ],
681 "flags": [],
682 "order": 5,
683 "mode": 0,
684 "inputs": [],
685 "outputs": [
686 {
687 "color_off": null,
688 "color_on": null,
689 "dir": null,
690 "label": null,
691 "locked": null,
692 "name": "STRING",
693 "nameLocked": null,
694 "removable": null,
695 "type": "STRING",
696 "pos": null,
697 "slot_index": null,
698 "links": [
699 36,
700 48
701 ]
702 }
703 ],
704 "title": "String (User Prompt)",
705 "properties": {
706 "Node name for S&R": "PrimitiveStringMultiline"
707 },
708 "widgets_values": [
709 "Change the background to a snow-covered city street at blue hour, with soft falling snow, blurred shop lights and wet pavement behind her."
710 ],
711 "widgets_values_named": {
712 "value": "Change the background to a snow-covered city street at blue hour, with soft falling snow, blurred shop lights and wet pavement behind her."
713 },
714 "color": "#322",
715 "bgcolor": "#533"
716 },
717 {
718 "id": 15,
719 "type": "ComfySwitchNode",
720 "pos": [
721 480,
722 1330
723 ],
724 "size": [
725 230,
726 110
727 ],
728 "flags": [],
729 "order": 12,
730 "mode": 0,
731 "inputs": [
732 {
733 "color_off": null,
734 "color_on": null,
735 "dir": null,
736 "label": null,
737 "locked": null,
738 "name": "on_false",
739 "nameLocked": null,
740 "removable": null,
741 "shape": 7,
742 "type": "STRING",
743 "pos": null,
744 "link": 36
745 },
746 {
747 "color_off": null,
748 "color_on": null,
749 "dir": null,
750 "label": null,
751 "locked": null,
752 "name": "on_true",
753 "nameLocked": null,
754 "removable": null,
755 "shape": 7,
756 "type": "STRING",
757 "pos": null,
758 "link": 47
759 }
760 ],
761 "outputs": [
762 {
763 "color_off": null,
764 "color_on": null,
765 "dir": null,
766 "label": null,
767 "locked": null,
768 "name": "output",
769 "nameLocked": null,
770 "removable": null,
771 "type": "STRING",
772 "pos": null,
773 "slot_index": null,
774 "links": [
775 32
776 ]
777 }
778 ],
779 "title": "If/Else Switch (PE on/off)",
780 "properties": {
781 "Node name for S&R": "ComfySwitchNode"
782 },
783 "widgets_values": [
784 true
785 ],
786 "widgets_values_named": {
787 "switch": true
788 }
789 },
790 {
791 "id": 20,
792 "type": "MarkdownNote",
793 "pos": [
794 -690,
795 40
796 ],
797 "size": [
798 530,
799 880
800 ],
801 "flags": [],
802 "order": 6,
803 "mode": 0,
804 "inputs": [],
805 "outputs": [],
806 "title": "Note: Fibo 2.0 Edit (Dev, int8)",
807 "properties": [],
808 "widgets_values": [
809 "## Fibo 2.0: Image Edit (Dev, int8)\n\n**Input Assets**\n- [red_bowler_hat_portrait.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/red_bowler_hat_portrait.png) — required workflow input (`input/red_bowler_hat_portrait.png`)\n\nOne 8B flow-matching model does both editing and text-to-image, in the FLUX.2 VAE latent space, with prompts encoded by Qwen3-VL-4B. `fibo2_edit_turbo` is the step + CFG distillation of `fibo2_dev`.\n\nDefaults here: **50 steps**, **CFG 5**, euler / simple, the settings Bria publishes for Dev. CFG is on, so `negative_prompt` carries Bria's structured VGL negative.\n\n- Trained at ~1 MP. Stay near 1 MP: above that the coordinate origin stays top-left, so the prompt text leaks into the corner and adherence collapses.\n- This is the full non-distilled base: the cleanest result, at roughly 12 times the sampling time. For quick direction tests load `fibo2_edit_turbo_int8_convrot` with **4 steps / CFG 1**.\n- Fibo 2.0 reads structured VGL captions. Describe the **final** state of the target region and stop — writing \"keep X unchanged\" makes the model re-render the whole frame and invent props (measured: extra moon, extra signage).\n\n## Result size (`TextEncodeFibo2` width / height)\n\nThese two widgets size the **result**, not the reference image:\n\n- `0` = let the node pick Fibo 2.0's trained bucket for the first image's aspect ratio (about 1 MP; `1024 x 1024` when no image is connected).\n- Any other value is floored to a multiple of 16 and becomes the output latent size `128 x (height/16) x (width/16)`, so the saved image is exactly `width x height`.\n- With **one** reference image, that image is scaled and centre-cropped (lanczos) to exactly `width x height` first, because the edit lines up with the reference pixel for pixel. That crop is why a source at a non-bucket aspect ratio loses frame area: set `width`/`height` to the source size (floored to /16) to keep every pixel of the reference.\n- With **several** reference images each one is resized to its own trained bucket instead, and `width`/`height` only size the result.\n- Stay near 1 MP: above that the coordinate origin stays at the top-left, so prompt content leaks into the corner and adherence drops.\n- `batch_size` is the latent batch and is independent of how many references are connected.\n\n## Project Links\n\n- [Fibo 2.0 Dev: model card](https://huggingface.co/briaai/Fibo-2.0-dev): full non-distilled base, 50 steps / guidance 5.0\n- [Fibo 2.0 Edit Turbo: model card](https://huggingface.co/briaai/Fibo-2.0-edit-turbo): step + cfg distillation of Dev, 4 steps / guidance 1.0\n- [Fibo 2 Scene Analyzer](https://huggingface.co/briaai/fibo-scene-analyzer): Bria's own model for VGL expansion and edit rewriting (the `<edit>` task is what the Prompt Enhancer imitates)\n- [Bria VGL docs](https://docs.bria.ai/vgl) · [Bria-AI/vgl on GitHub](https://github.com/Bria-AI/vgl): the structured caption format this model reads\n- [Fibo 2 release notes](https://docs.bria.ai/whats-new/fibo-2)\n- [Tech paper (arXiv 2511.06876)](https://arxiv.org/abs/2511.06876)\n- [Comfy-Org/Fibo-2.0](https://huggingface.co/Comfy-Org/Fibo-2.0): the repack this workflow loads · [Comfy-Org/Qwen3-VL](https://huggingface.co/Comfy-Org/Qwen3-VL): text encoder (and the optional 8B enhancer)\n"
810 ],
811 "widgets_values_named": {
812 "text": "## Fibo 2.0: Image Edit (Dev, int8)\n\n**Input Assets**\n- [red_bowler_hat_portrait.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/red_bowler_hat_portrait.png) — required workflow input (`input/red_bowler_hat_portrait.png`)\n\nOne 8B flow-matching model does both editing and text-to-image, in the FLUX.2 VAE latent space, with prompts encoded by Qwen3-VL-4B. `fibo2_edit_turbo` is the step + CFG distillation of `fibo2_dev`.\n\nDefaults here: **50 steps**, **CFG 5**, euler / simple, the settings Bria publishes for Dev. CFG is on, so `negative_prompt` carries Bria's structured VGL negative.\n\n- Trained at ~1 MP. Stay near 1 MP: above that the coordinate origin stays top-left, so the prompt text leaks into the corner and adherence collapses.\n- This is the full non-distilled base: the cleanest result, at roughly 12 times the sampling time. For quick direction tests load `fibo2_edit_turbo_int8_convrot` with **4 steps / CFG 1**.\n- Fibo 2.0 reads structured VGL captions. Describe the **final** state of the target region and stop — writing \"keep X unchanged\" makes the model re-render the whole frame and invent props (measured: extra moon, extra signage).\n\n## Result size (`TextEncodeFibo2` width / height)\n\nThese two widgets size the **result**, not the reference image:\n\n- `0` = let the node pick Fibo 2.0's trained bucket for the first image's aspect ratio (about 1 MP; `1024 x 1024` when no image is connected).\n- Any other value is floored to a multiple of 16 and becomes the output latent size `128 x (height/16) x (width/16)`, so the saved image is exactly `width x height`.\n- With **one** reference image, that image is scaled and centre-cropped (lanczos) to exactly `width x height` first, because the edit lines up with the reference pixel for pixel. That crop is why a source at a non-bucket aspect ratio loses frame area: set `width`/`height` to the source size (floored to /16) to keep every pixel of the reference.\n- With **several** reference images each one is resized to its own trained bucket instead, and `width`/`height` only size the result.\n- Stay near 1 MP: above that the coordinate origin stays at the top-left, so prompt content leaks into the corner and adherence drops.\n- `batch_size` is the latent batch and is independent of how many references are connected.\n\n## Project Links\n\n- [Fibo 2.0 Dev: model card](https://huggingface.co/briaai/Fibo-2.0-dev): full non-distilled base, 50 steps / guidance 5.0\n- [Fibo 2.0 Edit Turbo: model card](https://huggingface.co/briaai/Fibo-2.0-edit-turbo): step + cfg distillation of Dev, 4 steps / guidance 1.0\n- [Fibo 2 Scene Analyzer](https://huggingface.co/briaai/fibo-scene-analyzer): Bria's own model for VGL expansion and edit rewriting (the `<edit>` task is what the Prompt Enhancer imitates)\n- [Bria VGL docs](https://docs.bria.ai/vgl) · [Bria-AI/vgl on GitHub](https://github.com/Bria-AI/vgl): the structured caption format this model reads\n- [Fibo 2 release notes](https://docs.bria.ai/whats-new/fibo-2)\n- [Tech paper (arXiv 2511.06876)](https://arxiv.org/abs/2511.06876)\n- [Comfy-Org/Fibo-2.0](https://huggingface.co/Comfy-Org/Fibo-2.0): the repack this workflow loads · [Comfy-Org/Qwen3-VL](https://huggingface.co/Comfy-Org/Qwen3-VL): text encoder (and the optional 8B enhancer)\n"
813 },
814 "color": "#222",
815 "bgcolor": "#000"
816 },
817 {
818 "id": 24,
819 "type": "ImageCompare",
820 "pos": [
821 1860,
822 40
823 ],
824 "size": [
825 560,
826 620
827 ],
828 "flags": [],
829 "order": 18,
830 "mode": 0,
831 "inputs": [
832 {
833 "name": "image_a",
834 "shape": 7,
835 "type": "IMAGE",
836 "link": 31
837 },
838 {
839 "name": "image_b",
840 "shape": 7,
841 "type": "IMAGE",
842 "link": 30
843 }
844 ],
845 "outputs": [],
846 "properties": {
847 "Node name for S&R": "ImageCompare"
848 },
849 "widgets_values": [],
850 "widgets_values_named": []
851 },
852 {
853 "id": 25,
854 "type": "PreviewAny",
855 "pos": [
856 760,
857 780
858 ],
859 "size": [
860 500,
861 480
862 ],
863 "flags": [],
864 "order": 13,
865 "mode": 0,
866 "inputs": [
867 {
868 "name": "source",
869 "type": "*",
870 "link": 32
871 }
872 ],
873 "outputs": [
874 {
875 "name": "STRING",
876 "type": "STRING",
877 "links": [
878 33
879 ]
880 }
881 ],
882 "properties": {
883 "Node name for S&R": "PreviewAny"
884 },
885 "widgets_values": [],
886 "widgets_values_named": []
887 },
888 {
889 "id": 26,
890 "type": "BatchImagesNode",
891 "pos": [
892 -50,
893 780
894 ],
895 "size": [
896 140,
897 70
898 ],
899 "flags": [],
900 "order": 10,
901 "mode": 0,
902 "inputs": [
903 {
904 "name": "images.image0",
905 "type": "IMAGE",
906 "link": 34
907 },
908 {
909 "name": "images.image1",
910 "shape": 7,
911 "type": "IMAGE",
912 "link": null
913 }
914 ],
915 "outputs": [
916 {
917 "name": "IMAGE",
918 "type": "IMAGE",
919 "links": [
920 46
921 ]
922 }
923 ],
924 "properties": {
925 "Node name for S&R": "BatchImagesNode"
926 },
927 "color": "#322",
928 "bgcolor": "#533"
929 },
930 {
931 "id": 27,
932 "type": "CLIPLoader",
933 "pos": [
934 -100,
935 510
936 ],
937 "size": [
938 410,
939 110
940 ],
941 "flags": [],
942 "order": 7,
943 "mode": 0,
944 "inputs": [],
945 "outputs": [
946 {
947 "color_off": null,
948 "color_on": null,
949 "dir": null,
950 "label": null,
951 "locked": null,
952 "name": "CLIP",
953 "nameLocked": null,
954 "removable": null,
955 "type": "CLIP",
956 "pos": null,
957 "slot_index": null,
958 "links": [
959 45
960 ]
961 }
962 ],
963 "title": "Load CLIP (PE)",
964 "properties": {
965 "Node name for S&R": "CLIPLoader",
966 "models": [
967 {
968 "name": "qwen3vl_8b_int8_convrot.safetensors",
969 "url": "https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_int8_convrot.safetensors",
970 "hash": "8bfd0f6e12abf2d2d697ecc888e5e90b0d6741d6708f05799f53afa560452e8f",
971 "hash_type": "SHA256",
972 "directory": "text_encoders"
973 }
974 ]
975 },
976 "widgets_values": [
977 "qwen3vl_8b_int8_convrot.safetensors",
978 "fibo2",
979 "default"
980 ],
981 "widgets_values_named": {
982 "clip_name": "qwen3vl_8b_int8_convrot.safetensors",
983 "type": "fibo2",
984 "device": "default"
985 }
986 },
987 {
988 "id": 28,
989 "type": "MarkdownNote",
990 "pos": [
991 -90,
992 1140
993 ],
994 "size": [
995 410,
996 520
997 ],
998 "flags": [],
999 "order": 8,
1000 "mode": 0,
1001 "inputs": [],
1002 "outputs": [],
1003 "title": "Note: Prompt Enhancer (PE)",
1004 "properties": [],
1005 "widgets_values": [
1006 "## Prompt Enhancer (optional)\n\nFibo 2.0 reads structured VGL captions, so the enhancer turns a one-line instruction into a full scene description before it reaches `TextEncodeFibo2`.\n\n- `TextGenerate` runs on `qwen3vl_8b_int8_convrot` (CLIPLoader type = fibo2). It needs the reference image, so `LoadImage` feeds **both** the enhancer and `TextEncodeFibo2`.\n- `TextGenerate.system_prompt` is a **forceInput** (must be linked) and only takes effect while `use_default_template = true`. Paste Bria's edit rewrite prompt there — it is the same spec the API uses: preserve everything by default, describe the final image only, and put the single change into one imperative `edit_instruction`.\n- `ComfySwitchNode` picks the enhanced text (`on_true`) or your raw prompt (`on_false`). Set `switch = false` to bypass. `PreviewAny` shows what the enhancer produced.\n- Bria's own implementation of this step is [`briaai/fibo-scene-analyzer`](https://huggingface.co/briaai/fibo-scene-analyzer) (the `<edit>` task: 1-5 images + instruction → scene description); a local VLM plus the same system prompt is the cheap stand-in. Format reference: [Bria VGL docs](https://docs.bria.ai/vgl).\n\nShipped sampling (`TextGenerate`): `temperature 0.3`, `top_k 20`, `top_p 0.95`, `min_p 0.05`, `repetition_penalty 1.05`, `presence_penalty 0`, `max_length 3000`, `thinking off`, `mtp off`, seed `1234`. Low temperature and a small `top_k` keep the JSON stable; `max_length 3000` fits a full VGL caption (the schema default of 512 truncates it); `mtp off` keeps the same seed reproducible.\n\nMeasured on a reference image (same seed): prose with \"keep X unchanged\" made the model invent a moon, extra signage and a chest-pocket zip, while the VGL rewrite kept only the one requested front zip. Dev at 50 steps gave the finest embroidery and no invented hardware."
1007 ],
1008 "widgets_values_named": {
1009 "text": "## Prompt Enhancer (optional)\n\nFibo 2.0 reads structured VGL captions, so the enhancer turns a one-line instruction into a full scene description before it reaches `TextEncodeFibo2`.\n\n- `TextGenerate` runs on `qwen3vl_8b_int8_convrot` (CLIPLoader type = fibo2). It needs the reference image, so `LoadImage` feeds **both** the enhancer and `TextEncodeFibo2`.\n- `TextGenerate.system_prompt` is a **forceInput** (must be linked) and only takes effect while `use_default_template = true`. Paste Bria's edit rewrite prompt there — it is the same spec the API uses: preserve everything by default, describe the final image only, and put the single change into one imperative `edit_instruction`.\n- `ComfySwitchNode` picks the enhanced text (`on_true`) or your raw prompt (`on_false`). Set `switch = false` to bypass. `PreviewAny` shows what the enhancer produced.\n- Bria's own implementation of this step is [`briaai/fibo-scene-analyzer`](https://huggingface.co/briaai/fibo-scene-analyzer) (the `<edit>` task: 1-5 images + instruction → scene description); a local VLM plus the same system prompt is the cheap stand-in. Format reference: [Bria VGL docs](https://docs.bria.ai/vgl).\n\nShipped sampling (`TextGenerate`): `temperature 0.3`, `top_k 20`, `top_p 0.95`, `min_p 0.05`, `repetition_penalty 1.05`, `presence_penalty 0`, `max_length 3000`, `thinking off`, `mtp off`, seed `1234`. Low temperature and a small `top_k` keep the JSON stable; `max_length 3000` fits a full VGL caption (the schema default of 512 truncates it); `mtp off` keeps the same seed reproducible.\n\nMeasured on a reference image (same seed): prose with \"keep X unchanged\" made the model invent a moon, extra signage and a chest-pocket zip, while the VGL rewrite kept only the one requested front zip. Dev at 50 steps gave the finest embroidery and no invented hardware."
1010 },
1011 "color": "#222",
1012 "bgcolor": "#000"
1013 },
1014 {
1015 "id": 29,
1016 "type": "MarkdownNote",
1017 "pos": [
1018 -1250,
1019 40
1020 ],
1021 "size": [
1022 530,
1023 880
1024 ],
1025 "flags": [],
1026 "order": 9,
1027 "mode": 0,
1028 "inputs": [],
1029 "outputs": [],
1030 "title": "Note: Models",
1031 "properties": [],
1032 "widgets_values": [
1033 "\n## Model Links\n\n- [Hugging Face:Comfy-Org/Qwen3-VL](https://huggingface.co/Comfy-Org/Qwen3-VL)\n- [ModelScope:Comfy-Org/Qwen3-VL](https://modelscope.cn/models/Comfy-Org/Qwen3-VL)\n- [Hugging Face:Comfy-Org/Fibo-2.0](https://huggingface.co/Comfy-Org/Fibo-2.0)\n- [ModelScope:Comfy-Org/Fibo-2.0](https://modelscope.cn/models/Comfy-Org/Fibo-2.0)\n\n**diffusion_models**\n\n- [fibo2_edit_turbo_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_edit_turbo_int8_convrot.safetensors)\n- [fibo2_edit_turbo_bf16.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_edit_turbo_bf16.safetensors) (full quality, 2× size)\n- [fibo2_dev_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_dev_int8_convrot.safetensors) (non-distilled, 50 steps / CFG 5)\n- [fibo_2.0_turbo_lora_avg_rank_270_bf16.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/loras/fibo_2.0_turbo_lora_avg_rank_270_bf16.safetensors) (optional turbo LoRA for dev)\n\n**text_encoders** — load with CLIPLoader **type = fibo2**\n\n- [qwen3vl_4b_bf16.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/text_encoders/qwen3vl_4b_bf16.safetensors)\n- [qwen3vl_4b_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/text_encoders/qwen3vl_4b_int8_convrot.safetensors) (int8_convrot alternative)\n- [qwen3vl_8b_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_int8_convrot.safetensors) — optional, only for the Prompt Enhancer\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/vae/flux2-vae.safetensors)\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 diffusion_models/\n│ │ ├── fibo2_edit_turbo_int8_convrot.safetensors\n│ │ ├── fibo2_edit_turbo_bf16.safetensors\n│ │ └── fibo2_dev_int8_convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ ├── qwen3vl_4b_bf16.safetensors\n│ │ └── qwen3vl_8b_int8_convrot.safetensors\n│ ├── 📂 loras/\n│ │ └── fibo_2.0_turbo_lora_avg_rank_270_bf16.safetensors\n│ └── 📂 vae/\n│ └── flux2-vae.safetensors\n```\n\n## License\n\nWeights © BRIA AI, [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). Non-commercial use only unless you have a separate BRIA agreement.\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)"
1034 ],
1035 "widgets_values_named": {
1036 "text": "\n## Model Links\n\n- [Hugging Face:Comfy-Org/Qwen3-VL](https://huggingface.co/Comfy-Org/Qwen3-VL)\n- [ModelScope:Comfy-Org/Qwen3-VL](https://modelscope.cn/models/Comfy-Org/Qwen3-VL)\n- [Hugging Face:Comfy-Org/Fibo-2.0](https://huggingface.co/Comfy-Org/Fibo-2.0)\n- [ModelScope:Comfy-Org/Fibo-2.0](https://modelscope.cn/models/Comfy-Org/Fibo-2.0)\n\n**diffusion_models**\n\n- [fibo2_edit_turbo_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_edit_turbo_int8_convrot.safetensors)\n- [fibo2_edit_turbo_bf16.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_edit_turbo_bf16.safetensors) (full quality, 2× size)\n- [fibo2_dev_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/diffusion_models/fibo2_dev_int8_convrot.safetensors) (non-distilled, 50 steps / CFG 5)\n- [fibo_2.0_turbo_lora_avg_rank_270_bf16.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/loras/fibo_2.0_turbo_lora_avg_rank_270_bf16.safetensors) (optional turbo LoRA for dev)\n\n**text_encoders** — load with CLIPLoader **type = fibo2**\n\n- [qwen3vl_4b_bf16.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/text_encoders/qwen3vl_4b_bf16.safetensors)\n- [qwen3vl_4b_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/text_encoders/qwen3vl_4b_int8_convrot.safetensors) (int8_convrot alternative)\n- [qwen3vl_8b_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_int8_convrot.safetensors) — optional, only for the Prompt Enhancer\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/Comfy-Org/Fibo-2.0/resolve/main/vae/flux2-vae.safetensors)\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 diffusion_models/\n│ │ ├── fibo2_edit_turbo_int8_convrot.safetensors\n│ │ ├── fibo2_edit_turbo_bf16.safetensors\n│ │ └── fibo2_dev_int8_convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ ├── qwen3vl_4b_bf16.safetensors\n│ │ └── qwen3vl_8b_int8_convrot.safetensors\n│ ├── 📂 loras/\n│ │ └── fibo_2.0_turbo_lora_avg_rank_270_bf16.safetensors\n│ └── 📂 vae/\n│ └── flux2-vae.safetensors\n```\n\n## License\n\nWeights © BRIA AI, [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). Non-commercial use only unless you have a separate BRIA agreement.\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)"
1037 },
1038 "color": "#222",
1039 "bgcolor": "#000"
1040 },
1041 {
1042 "id": 30,
1043 "type": "TextGenerateV2",
1044 "pos": [
1045 340,
1046 780
1047 ],
1048 "size": [
1049 400,
1050 476
1051 ],
1052 "flags": [],
1053 "order": 11,
1054 "mode": 0,
1055 "inputs": [
1056 {
1057 "name": "clip",
1058 "type": "CLIP",
1059 "link": 45
1060 },
1061 {
1062 "name": "images.image1",
1063 "shape": 7,
1064 "type": "IMAGE",
1065 "link": 46
1066 },
1067 {
1068 "name": "images.image2",
1069 "shape": 7,
1070 "type": "IMAGE",
1071 "link": null
1072 },
1073 {
1074 "name": "videos.video1",
1075 "shape": 7,
1076 "type": "IMAGE",
1077 "link": null
1078 },
1079 {
1080 "name": "audios.audio1",
1081 "shape": 7,
1082 "type": "AUDIO",
1083 "link": null
1084 },
1085 {
1086 "name": "system_prompt",
1087 "shape": 7,
1088 "type": "STRING",
1089 "link": 49
1090 },
1091 {
1092 "name": "prompt",
1093 "type": "STRING",
1094 "widget": {
1095 "name": "prompt"
1096 },
1097 "link": 48
1098 }
1099 ],
1100 "outputs": [
1101 {
1102 "name": "generated_text",
1103 "type": "STRING",
1104 "links": [
1105 47
1106 ]
1107 },
1108 {
1109 "name": "thinking",
1110 "type": "STRING",
1111 "links": null
1112 }
1113 ],
1114 "properties": {
1115 "Node name for S&R": "TextGenerateV2"
1116 },
1117 "widgets_values": [
1118 "",
1119 3000,
1120 "on",
1121 0.3,
1122 20,
1123 0.95,
1124 0.05,
1125 1.05,
1126 0,
1127 0,
1128 false,
1129 true,
1130 "auto"
1131 ],
1132 "widgets_values_named": {
1133 "prompt": "",
1134 "max_length": 3000,
1135 "sampling_mode": "on",
1136 "sampling_mode.temperature": 0.3,
1137 "sampling_mode.top_k": 20,
1138 "sampling_mode.top_p": 0.95,
1139 "sampling_mode.min_p": 0.05,
1140 "sampling_mode.repetition_penalty": 1.05,
1141 "sampling_mode.presence_penalty": 0,
1142 "sampling_mode.seed": 0,
1143 "thinking": false,
1144 "use_default_template": true,
1145 "mtp": "auto"
1146 }
1147 }
1148 ],
1149 "links": [
1150 [
1151 4,
1152 1,
1153 0,
1154 5,
1155 0,
1156 "MODEL"
1157 ],
1158 [
1159 5,
1160 4,
1161 0,
1162 5,
1163 1,
1164 "CONDITIONING"
1165 ],
1166 [
1167 6,
1168 4,
1169 1,
1170 5,
1171 2,
1172 "CONDITIONING"
1173 ],
1174 [
1175 7,
1176 4,
1177 2,
1178 5,
1179 3,
1180 "LATENT"
1181 ],
1182 [
1183 8,
1184 5,
1185 0,
1186 6,
1187 0,
1188 "LATENT"
1189 ],
1190 [
1191 9,
1192 3,
1193 0,
1194 6,
1195 1,
1196 "VAE"
1197 ],
1198 [
1199 10,
1200 6,
1201 0,
1202 7,
1203 0,
1204 "IMAGE"
1205 ],
1206 [
1207 30,
1208 7,
1209 0,
1210 24,
1211 1,
1212 "IMAGE"
1213 ],
1214 [
1215 31,
1216 10,
1217 0,
1218 24,
1219 0,
1220 "IMAGE"
1221 ],
1222 [
1223 32,
1224 15,
1225 0,
1226 25,
1227 0,
1228 "STRING"
1229 ],
1230 [
1231 36,
1232 13,
1233 0,
1234 15,
1235 0,
1236 "STRING"
1237 ],
1238 [
1239 1,
1240 2,
1241 0,
1242 4,
1243 0,
1244 "CLIP"
1245 ],
1246 [
1247 3,
1248 10,
1249 0,
1250 4,
1251 1,
1252 "IMAGE"
1253 ],
1254 [
1255 34,
1256 10,
1257 0,
1258 26,
1259 0,
1260 "IMAGE"
1261 ],
1262 [
1263 2,
1264 3,
1265 0,
1266 4,
1267 5,
1268 "VAE"
1269 ],
1270 [
1271 33,
1272 25,
1273 0,
1274 4,
1275 6,
1276 "STRING"
1277 ],
1278 [
1279 45,
1280 27,
1281 0,
1282 30,
1283 0,
1284 "CLIP"
1285 ],
1286 [
1287 46,
1288 26,
1289 0,
1290 30,
1291 1,
1292 "IMAGE"
1293 ],
1294 [
1295 47,
1296 30,
1297 0,
1298 15,
1299 1,
1300 "STRING"
1301 ],
1302 [
1303 48,
1304 13,
1305 0,
1306 30,
1307 6,
1308 "STRING"
1309 ],
1310 [
1311 49,
1312 12,
1313 0,
1314 30,
1315 5,
1316 "STRING"
1317 ]
1318 ],
1319 "groups": [
1320 {
1321 "id": 1,
1322 "title": "Models",
1323 "bounding": [
1324 -120,
1325 0,
1326 460,
1327 650
1328 ],
1329 "color": "#3f789e",
1330 "flags": []
1331 },
1332 {
1333 "id": 2,
1334 "title": "Step 2 - Upload image",
1335 "bounding": [
1336 -120,
1337 -750,
1338 1940,
1339 720
1340 ],
1341 "color": "#3f789e",
1342 "flags": []
1343 },
1344 {
1345 "id": 4,
1346 "title": "Conditioning",
1347 "bounding": [
1348 370,
1349 0,
1350 510,
1351 650
1352 ],
1353 "color": "#3f789e",
1354 "flags": []
1355 },
1356 {
1357 "id": 5,
1358 "title": "Sampling",
1359 "bounding": [
1360 910,
1361 0,
1362 370,
1363 650
1364 ],
1365 "color": "#3f789e",
1366 "flags": []
1367 },
1368 {
1369 "id": 6,
1370 "title": "Prompt Enhancer",
1371 "bounding": [
1372 -120,
1373 680,
1374 1390,
1375 1000
1376 ],
1377 "color": "#444",
1378 "flags": []
1379 }
1380 ],
1381 "config": [],
1382 "extra": {
1383 "ds": {
1384 "scale": 0.39041495987658636,
1385 "offset": [
1386 1227.705524734872,
1387 880.210083209562
1388 ]
1389 },
1390 "frontendVersion": "1.57.6",
1391 "VHS_latentpreview": false,
1392 "VHS_latentpreviewrate": 0,
1393 "VHS_MetadataImage": true,
1394 "VHS_KeepIntermediate": true,
1395 "linkPresentation": {
1396 "36": {
1397 "hidden": true,
1398 "label": "User Prompt"
1399 }
1400 }
1401 },
1402 "version": 0.4
1403}