{"id": "c9f1a6b3-2e7d-4c5a-8b4f-gmanski-mosslayout", "revision": 0, "last_node_id": 15, "last_link_id": 14, "nodes": [{"id": 1, "type": "MarkdownNote", "pos": [-1600, -420], "size": [560, 820], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [], "properties": {"Node name for S&R": "MarkdownNote"}, "widgets_values": ["## Gmanski MOSS (Layout)\n\n**Tell MOSS where things go.** Draw boxes on the **Layout** node (text boxes render their text; object boxes get a caption), and **MOSS-Image Layout Prompt** turns them plus your scene description into the JSON layout prompt the model was trained on. Posters, covers, thumbnails, title cards - the things Krea 2 and H3 cannot letter reliably.\n\n### Run it\n1. Set width/height on **Layout** (the boxes live in those pixels; keep the same values on the Layout Prompt node).\n2. Edit the example boxes: `text` boxes carry `text` + `desc`; object boxes carry `desc`. Number the boxes that are people in **character_boxes** (e.g. \"2\").\n3. Edit the scene description, queue. Result: `output/Gmanski/moss_layout_00001.png`.\n\n### Notes\n- Same sampler recipe and optional turbo / character LoRA slots as Gmanski MOSS.\n- The preview output of the Layout node shows the boxes - connect a PreviewImage to check placement before a long run.\n\n### Models\n`gmanski-packs install moss`.\n"], "title": "Read me: Gmanski MOSS (Layout)", "color": "#432", "bgcolor": "#653"}, {"id": 2, "type": "UNETLoader", "pos": [500, 700], "size": [440, 90], "flags": {}, "order": 1, "mode": 0, "inputs": [{"name": "unet_name", "type": "COMBO", "link": null, "widget": {"name": "unet_name"}}, {"name": "weight_dtype", "type": "COMBO", "link": null, "widget": {"name": "weight_dtype"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [1]}], "properties": {"Node name for S&R": "UNETLoader", "models": [{"name": "moss_image_sft_int8_convrot.safetensors", "url": "https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/diffusion_models/moss_image_sft_int8_convrot.safetensors", "directory": "diffusion_models"}]}, "widgets_values": ["moss_image_sft_int8_convrot.safetensors", "default"], "title": "MOSS-Image SFT checkpoint"}, {"id": 3, "type": "LoraLoaderModelOnly", "pos": [500, 820], "size": [440, 90], "flags": {}, "order": 2, "mode": 4, "inputs": [{"name": "model", "type": "MODEL", "link": 1}, {"name": "lora_name", "type": "COMBO", "link": null, "widget": {"name": "lora_name"}}, {"name": "strength_model", "type": "FLOAT", "link": null, "widget": {"name": "strength_model"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [2]}], "properties": {"Node name for S&R": "LoraLoaderModelOnly"}, "widgets_values": ["lodestones-8-steps-dmd2-lora.safetensors", 1.0], "title": "8-step DMD2 turbo LoRA - bypassed (enable + 8 steps / CFG 1)"}, {"id": 4, "type": "LoraLoaderModelOnly", "pos": [500, 930], "size": [440, 90], "flags": {}, "order": 3, "mode": 4, "inputs": [{"name": "model", "type": "MODEL", "link": 2}, {"name": "lora_name", "type": "COMBO", "link": null, "widget": {"name": "lora_name"}}, {"name": "strength_model", "type": "FLOAT", "link": null, "widget": {"name": "strength_model"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [3]}], "properties": {"Node name for S&R": "LoraLoaderModelOnly"}, "widgets_values": ["None", 1.0], "title": "Character LoRA (MOSS-trained) - bypassed"}, {"id": 5, "type": "SkipLayerGuidanceDiTSimple", "pos": [500, 1040], "size": [350, 170], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 3}, {"name": "double_layers", "type": "STRING", "link": null, "widget": {"name": "double_layers"}}, {"name": "single_layers", "type": "STRING", "link": null, "widget": {"name": "single_layers"}}, {"name": "start_percent", "type": "FLOAT", "link": null, "widget": {"name": "start_percent"}}, {"name": "end_percent", "type": "FLOAT", "link": null, "widget": {"name": "end_percent"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [8]}], "properties": {"Node name for S&R": "SkipLayerGuidanceDiTSimple"}, "widgets_values": ["", "22", 0.0, 0.5], "title": "Skip-layer guidance (block 22, first half) - official recipe"}, {"id": 6, "type": "CLIPLoader", "pos": [500, 1240], "size": [440, 110], "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "clip_name", "type": "COMBO", "link": null, "widget": {"name": "clip_name"}}, {"name": "type", "type": "COMBO", "link": null, "widget": {"name": "type"}}, {"name": "device", "type": "COMBO", "link": null, "widget": {"name": "device"}}], "outputs": [{"name": "CLIP", "type": "CLIP", "links": [6, 7]}], "properties": {"Node name for S&R": "CLIPLoader", "models": [{"name": "qwen3.5_9b_int8_convrot.safetensors", "url": "https://huggingface.co/Comfy-Org/MOSS-Image/resolve/main/text_encoders/qwen3.5_9b_int8_convrot.safetensors", "directory": "text_encoders"}]}, "widgets_values": ["qwen3.5_9b_int8_convrot.safetensors", "moss_image", "default"], "title": "Qwen3.5-9B text encoder (moss_image)"}, {"id": 7, "type": "VAELoader", "pos": [500, 1380], "size": [440, 60], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "vae_name", "type": "COMBO", "link": null, "widget": {"name": "vae_name"}}], "outputs": [{"name": "VAE", "type": "VAE", "links": [13]}], "properties": {"Node name for S&R": "VAELoader", "models": [{"name": "flux2-vae.safetensors", "url": "https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors", "directory": "vae"}]}, "widgets_values": ["flux2-vae.safetensors"], "title": "FLUX.2 VAE"}, {"id": 8, "type": "CreateBoundingBoxes", "pos": [-1000, -420], "size": [440, 680], "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "background", "type": "IMAGE", "link": null}, {"name": "bboxes", "type": "BOUNDING_BOX,ARRAY,STRING", "link": null}, {"name": "width", "type": "INT", "link": null, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": null, "widget": {"name": "height"}}], "outputs": [{"name": "preview", "type": "IMAGE", "links": []}, {"name": "bboxes", "type": "BOUNDING_BOX", "links": []}, {"name": "elements", "type": "ARRAY", "links": [4]}], "properties": {"Node name for S&R": "CreateBoundingBoxes"}, "widgets_values": [1024, 1408, [{"x": 64, "y": 48, "width": 896, "height": 220, "metadata": {"type": "text", "text": "GMANSKI", "desc": "Huge white condensed sans-serif capitals across the top, sharp edges, slight glow from the neon below"}}, {"x": 256, "y": 300, "width": 512, "height": 900, "metadata": {"type": "object", "desc": "the woman in the black leather jacket, three-quarter view, looking past the camera, hands in pockets"}}, {"x": 64, "y": 1230, "width": 896, "height": 90, "metadata": {"type": "text", "text": "WORKFLOW KITS FOR COMFYUI", "desc": "Small cream serif capitals, letter-spaced, centred"}}]], "title": "Layout: draw text and object boxes"}, {"id": 9, "type": "MOSSImageLayoutPrompt", "pos": [-480, -420], "size": [420, 340], "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "element", "type": "ARRAY", "link": 4}, {"name": "prompt", "type": "STRING", "link": null, "widget": {"name": "prompt"}}, {"name": "width", "type": "INT", "link": null, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": null, "widget": {"name": "height"}}, {"name": "character_boxes", "type": "STRING", "link": null, "widget": {"name": "character_boxes"}}], "outputs": [{"name": "prompt", "type": "STRING", "links": [5]}], "properties": {"Node name for S&R": "MOSSImageLayoutPrompt"}, "widgets_values": ["Dark cinematic poster photographed in a rain-soaked alley at night: a woman in a black leather jacket stands centre, neon reflections on the wet ground, shallow depth of field, film grain.", 1024, 1408, "2"], "title": "MOSS-Image Layout Prompt (scene + boxes -> JSON prompt)"}, {"id": 10, "type": "CLIPTextEncode", "pos": [0, -420], "size": [400, 120], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 6}, {"name": "text", "type": "STRING", "link": 5, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [9]}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": [""], "title": "Positive (from the layout prompt)"}, {"id": 11, "type": "EmptyFlux2LatentImage", "pos": [0, -100], "size": [300, 110], "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "width", "type": "INT", "link": null, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": null, "widget": {"name": "height"}}, {"name": "batch_size", "type": "INT", "link": null, "widget": {"name": "batch_size"}}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [11]}], "properties": {"Node name for S&R": "EmptyFlux2LatentImage"}, "widgets_values": [1024, 1408, 1], "title": "Latent (match the Layout size)"}, {"id": 12, "type": "CLIPTextEncode", "pos": [0, -160], "size": [480, 120], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 7}, {"name": "text", "type": "STRING", "link": null, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [10]}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": ["worst quality, bad anatomy, extra fingers, watermark, jpeg artifacts, misspelled text"], "title": "Negative prompt (quality guard)"}, {"id": 13, "type": "KSampler", "pos": [560, -420], "size": [360, 270], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 8}, {"name": "positive", "type": "CONDITIONING", "link": 9}, {"name": "negative", "type": "CONDITIONING", "link": 10}, {"name": "latent_image", "type": "LATENT", "link": 11}, {"name": "seed", "type": "INT", "link": null, "widget": {"name": "seed"}}, {"name": "steps", "type": "INT", "link": null, "widget": {"name": "steps"}}, {"name": "cfg", "type": "FLOAT", "link": null, "widget": {"name": "cfg"}}, {"name": "sampler_name", "type": "COMBO", "link": null, "widget": {"name": "sampler_name"}}, {"name": "scheduler", "type": "COMBO", "link": null, "widget": {"name": "scheduler"}}, {"name": "denoise", "type": "FLOAT", "link": null, "widget": {"name": "denoise"}}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [12]}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [0, "randomize", 25, 2.5, "er_sde", "simple", 1.0], "title": "Sample (25 steps, CFG 2.5; turbo = 8 / 1.0)"}, {"id": 14, "type": "VAEDecode", "pos": [960, -420], "size": [300, 46], "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 12}, {"name": "vae", "type": "VAE", "link": 13}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [14]}], "properties": {"Node name for S&R": "VAEDecode"}, "widgets_values": [], "title": "Decode"}, {"id": 15, "type": "SaveImage", "pos": [1320, -420], "size": [400, 400], "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 14}, {"name": "filename_prefix", "type": "STRING", "link": null, "widget": {"name": "filename_prefix"}}], "outputs": [], "properties": {"Node name for S&R": "SaveImage"}, "widgets_values": ["Gmanski/moss_layout"], "title": "Save"}], "links": [[1, 2, 0, 3, 0, "MODEL"], [2, 3, 0, 4, 0, "MODEL"], [3, 4, 0, 5, 0, "MODEL"], [4, 8, 2, 9, 0, "ARRAY"], [5, 9, 0, 10, 1, "STRING"], [6, 6, 0, 10, 0, "CLIP"], [7, 6, 0, 12, 0, "CLIP"], [8, 5, 0, 13, 0, "MODEL"], [9, 10, 0, 13, 1, "CONDITIONING"], [10, 12, 0, 13, 2, "CONDITIONING"], [11, 11, 0, 13, 3, "LATENT"], [12, 13, 0, 14, 0, "LATENT"], [13, 7, 0, 14, 1, "VAE"], [14, 14, 0, 15, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {"ds": {"scale": 0.62, "offset": [1480, 420]}, "gmanski_template": "moss-layout", "generator": "scripts/build_gmanski_moss_workflow.py", "source": "https://gmanski.com/workflows/moss-layout"}, "version": 0.4}