diff --git a/README.md b/README.md index 9c36d2a..2dfa3fb 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ These custom nodes provide a rotation aware face extraction, paste back, and var - Full inpainting workflow with two controlnets which allows to get as high as 1.0 denoise strength without messing things up. ![Full Inpainting](examples/full_inpainting.png) +![JSON workflow](examples/full_inpainting.json) + ## Nodes - `AlignFaces` - inputs: diff --git a/examples/full_inpainting.json b/examples/full_inpainting.json new file mode 100644 index 0000000..af5b765 --- /dev/null +++ b/examples/full_inpainting.json @@ -0,0 +1,1840 @@ +{ + "last_node_id": 38, + "last_link_id": 62, + "nodes": [ + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 540, + -265 + ], + "size": [ + 210, + 76 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 6, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "robert de niro" + ], + "shape": 1 + }, + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 525, + -95 + ], + "size": { + "0": 210, + "1": 76 + }, + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 28, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 27 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "embedding:0001SoftRealisticNegative" + ], + "shape": 1 + }, + { + "id": 24, + "type": "Note", + "pos": [ + 1005, + -385 + ], + "size": [ + 280, + 95 + ], + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "text": "" + }, + "widgets_values": [ + "Optional:\n\nsince this is inpainting, it's a good idea to use differential diffusion." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 20, + "type": "ScaledSoftControlNetWeights", + "pos": [ + 1897.464666015624, + 342.6759974365233 + ], + "size": [ + 235, + 100 + ], + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "CN_WEIGHTS", + "type": "CONTROL_NET_WEIGHTS", + "links": [ + 36 + ], + "shape": 3 + }, + { + "name": "TK_SHORTCUT", + "type": "TIMESTEP_KEYFRAME", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ScaledSoftControlNetWeights" + }, + "widgets_values": [ + 0.9, + false + ], + "shape": 1 + }, + { + "id": 19, + "type": "ControlNetLoader", + "pos": [ + 1812.464666015624, + -112.32400256347648 + ], + "size": [ + 425, + 60 + ], + "flags": {}, + "order": 2, + "mode": 0, + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 35 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "control_v11f1e_sd15_tile_fp16.safetensors" + ], + "shape": 1 + }, + { + "id": 17, + "type": "ACN_AdvancedControlNetApply", + "pos": [ + 1872.464666015624, + 7.675997436523282 + ], + "size": [ + 285, + 265 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 29 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 30 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 35, + "slot_index": 2 + }, + { + "name": "image", + "type": "IMAGE", + "link": 34 + }, + { + "name": "mask_optional", + "type": "MASK", + "link": null + }, + { + "name": "timestep_kf", + "type": "TIMESTEP_KEYFRAME", + "link": null + }, + { + "name": "latent_kf_override", + "type": "LATENT_KEYFRAME", + "link": null + }, + { + "name": "weights_override", + "type": "CONTROL_NET_WEIGHTS", + "link": 36, + "slot_index": 7 + }, + { + "name": "model_optional", + "type": "MODEL", + "link": null + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 31 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 32 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "model_opt", + "type": "MODEL", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ACN_AdvancedControlNetApply" + }, + "widgets_values": [ + 1, + 0, + 1 + ], + "shape": 1 + }, + { + "id": 28, + "type": "ScaledSoftControlNetWeights", + "pos": [ + 1914.0533671875, + 1024.9157484130872 + ], + "size": { + "0": 235, + "1": 100 + }, + "flags": {}, + "order": 3, + "mode": 0, + "outputs": [ + { + "name": "CN_WEIGHTS", + "type": "CONTROL_NET_WEIGHTS", + "links": [ + 46 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "TK_SHORTCUT", + "type": "TIMESTEP_KEYFRAME", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ScaledSoftControlNetWeights" + }, + "widgets_values": [ + 0.9, + false + ], + "shape": 1 + }, + { + "id": 8, + "type": "CheckpointLoaderSimple", + "pos": [ + 10, + 45 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 4, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 40 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 6, + 28 + ], + "shape": 3 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 53 + ], + "shape": 3, + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "ERv8.RC1.fp16.safetensors" + ], + "shape": 1 + }, + { + "id": 32, + "type": "Anything Everywhere", + "pos": [ + 395, + 190 + ], + "size": { + "0": 210, + "1": 26 + }, + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "*", + "link": 53, + "color_on": "#FF6E6E" + } + ], + "properties": { + "group_restricted": 0, + "color_restricted": 0, + "Node name for S&R": "Anything Everywhere" + }, + "widgets_values": [], + "shape": 1 + }, + { + "id": 31, + "type": "VAEDecode", + "pos": [ + 2358.6120800781246, + -688.4017583007814 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 51 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 54 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "shape": 1 + }, + { + "id": 33, + "type": "PreviewImage", + "pos": [ + 2642.116105468749, + -685.7398994140626 + ], + "size": [ + 210, + 245 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 54 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "shape": 1 + }, + { + "id": 30, + "type": "KSampler", + "pos": [ + 1910, + -695 + ], + "size": { + "0": 210, + "1": 475 + }, + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 50 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 47 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 48 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 49 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 51 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 228831916947142, + "randomize", + 20, + 8, + "euler", + "normal", + 0.3 + ], + "shape": 1 + }, + { + "id": 10, + "type": "KSampler", + "pos": [ + 2270, + -50 + ], + "size": [ + 210, + 475 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 41 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 31 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 32 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 11 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 39 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 349593472215048, + "randomize", + 20, + 8, + "euler", + "normal", + 1 + ], + "shape": 1 + }, + { + "id": 12, + "type": "VAEDecode", + "pos": [ + 2560, + -50 + ], + "size": [ + 140, + 45 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 39 + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 19, + 55 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "shape": 1 + }, + { + "id": 34, + "type": "PreviewImage", + "pos": [ + 2798.514814609374, + -44.439412753906936 + ], + "size": [ + 210, + 245 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 55 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "shape": 1 + }, + { + "id": 26, + "type": "ACN_AdvancedControlNetApply", + "pos": [ + 1865, + 700 + ], + "size": { + "0": 285, + "1": 265 + }, + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 43 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 44 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 45, + "slot_index": 2 + }, + { + "name": "image", + "type": "IMAGE", + "link": 62 + }, + { + "name": "mask_optional", + "type": "MASK", + "link": null + }, + { + "name": "timestep_kf", + "type": "TIMESTEP_KEYFRAME", + "link": null + }, + { + "name": "latent_kf_override", + "type": "LATENT_KEYFRAME", + "link": null + }, + { + "name": "weights_override", + "type": "CONTROL_NET_WEIGHTS", + "link": 46, + "slot_index": 7 + }, + { + "name": "model_optional", + "type": "MODEL", + "link": null + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 56 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 57 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "model_opt", + "type": "MODEL", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ACN_AdvancedControlNetApply" + }, + "widgets_values": [ + 1, + 0, + 1 + ], + "shape": 1 + }, + { + "id": 21, + "type": "DifferentialDiffusion", + "pos": [ + 1055, + -150 + ], + "size": { + "0": 210, + "1": 26 + }, + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 40 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 41, + 50, + 58 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion" + }, + "shape": 1 + }, + { + "id": 5, + "type": "InpaintModelConditioning", + "pos": [ + 1035, + 10 + ], + "size": [ + 200, + 105 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5, + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 27 + }, + { + "name": "vae", + "type": "VAE", + "link": null + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4 + }, + { + "name": "mask", + "type": "MASK", + "link": 12 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 29, + 43, + 47 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 30, + 44, + 48 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 11, + 49, + 59 + ], + "shape": 3, + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InpaintModelConditioning" + }, + "shape": 1 + }, + { + "id": 35, + "type": "KSampler", + "pos": [ + 2305, + 605 + ], + "size": { + "0": 210, + "1": 475 + }, + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 58 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 56 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 57 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 59 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 60 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 26621615258437, + "randomize", + 20, + 8, + "euler", + "normal", + 1 + ], + "shape": 1 + }, + { + "id": 36, + "type": "VAEDecode", + "pos": [ + 2544.0544979882798, + 604.5961399755853 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 60 + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 61 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "shape": 1 + }, + { + "id": 37, + "type": "PreviewImage", + "pos": [ + 2835, + 610 + ], + "size": [ + 210, + 245 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 61 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "shape": 1 + }, + { + "id": 27, + "type": "ControlNetLoader", + "pos": [ + 1804.0533671875007, + 584.9157484130862 + ], + "size": { + "0": 425, + "1": 60 + }, + "flags": {}, + "order": 5, + "mode": 0, + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 45 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "control_v11p_sd15_inpaint_fp16.safetensors" + ], + "shape": 1 + }, + { + "id": 25, + "type": "Note", + "pos": [ + 1735, + -1055 + ], + "size": [ + 790, + 255 + ], + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "text": "" + }, + "widgets_values": [ + "Many different options possible here.\n\n1. No controlnet.\nYou can completely discard this controlnet, if you decrease the denoising strength on the ksampler.\n\n2. Tile controlnet\nWith a high scaled soft weights, it will allow the image to change a lot while still maintaining most of its low frequency freatures (like head position, and most of the expression)\n\n3. Inpaint controlnet\nSame as tile controlnet, but more features of the original face are preserved. In that case, notice you connect the cropped images directly, without any Inpaint Preprocessor node.\n\n4. Something else\nFor example mediapipe controlnet, openpose, or anything you can imagine. You are free to do whatever you want." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 38, + "type": "Note", + "pos": [ + 2530, + -1055 + ], + "size": [ + 535, + 255 + ], + "flags": {}, + "order": 7, + "mode": 0, + "title": "IMPORTANT - regarding controlnet", + "properties": { + "text": "" + }, + "widgets_values": [ + "You can use any controlnet, any combination of controlnet, ipadapters, or anything you like.\n\nBut, if you want to do **animations**, you want to use the following node to apply your controlnets: Apply Advanced ControlNet 🛂🅐🅒🅝\n\nThe regular controlnet cannot handle animations." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 23, + "type": "Note", + "pos": [ + 845, + 2075 + ], + "size": [ + 305, + 110 + ], + "flags": {}, + "order": 8, + "mode": 0, + "properties": { + "text": "" + }, + "widgets_values": [ + "You really want to feather the mask, in case detected the mask overflows the cropped image. Otherwise, if this happens you will see a sharp edge where the mask overflowed." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 15, + "type": "FeatherMask", + "pos": [ + 895, + 1890 + ], + "size": [ + 210, + 130 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 22 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 23 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FeatherMask" + }, + "widgets_values": [ + 32, + 32, + 32, + 32 + ], + "shape": 1 + }, + { + "id": 3, + "type": "CropFaces", + "pos": [ + 565, + 1620 + ], + "size": [ + 240, + 145 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "faces", + "type": "FACE", + "link": 2 + } + ], + "outputs": [ + { + "name": "crops", + "type": "IMAGE", + "links": [ + 4, + 34, + 62 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "masks", + "type": "MASK", + "links": [ + 12, + 22 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "warps", + "type": "WARP", + "links": [ + 13 + ], + "shape": 3, + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CropFaces" + }, + "widgets_values": [ + 512, + 1, + "BiSeNet" + ], + "shape": 1 + }, + { + "id": 2, + "type": "DetectFaces", + "pos": [ + 40, + 1460 + ], + "size": [ + 210, + 125 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1 + }, + { + "name": "mask", + "type": "MASK", + "link": 42 + } + ], + "outputs": [ + { + "name": "faces", + "type": "FACE", + "links": [ + 2, + 21 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DetectFaces" + }, + "widgets_values": [ + 0.5, + 64, + 512 + ], + "shape": 1 + }, + { + "id": 22, + "type": "Note", + "pos": [ + -305, + 1360 + ], + "size": [ + 310, + 365 + ], + "flags": {}, + "order": 9, + "mode": 0, + "properties": { + "text": "" + }, + "widgets_values": [ + "mask:\n\nit will only detect faces that are not masked.\nOf course, you can change this behavior by using a InvertMask node.\n\n\n\nthreshold:\n\nthis is the usual yolov threshold used for face detection. 0.5 is the default, but most detected faces have a score higher than 0.7\n\n\n\nmin_size, max_size:\n\nit will only detect faces whose bounding box edge sizes is between min_size and max_size." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 11, + "type": "WarpFacesBack", + "pos": [ + 1285, + 1470 + ], + "size": { + "0": 210, + "1": 106 + }, + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 24 + }, + { + "name": "face", + "type": "FACE", + "link": 21 + }, + { + "name": "crop", + "type": "IMAGE", + "link": 19 + }, + { + "name": "mask", + "type": "MASK", + "link": 23 + }, + { + "name": "warp", + "type": "WARP", + "link": 13 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 25 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "WarpFacesBack" + }, + "shape": 1 + }, + { + "id": 1, + "type": "LoadImage", + "pos": [ + -275, + 360 + ], + "size": [ + 1100, + 850 + ], + "flags": {}, + "order": 10, + "mode": 0, + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1, + 24 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 42 + ], + "shape": 3, + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "clipspace/clipspace-mask-613110.9000000022.png [input]", + "image" + ], + "shape": 1 + }, + { + "id": 16, + "type": "PreviewImage", + "pos": [ + 1615, + 1235 + ], + "size": [ + 1370, + 965 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 25 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "shape": 1 + } + ], + "links": [ + [ + 1, + 1, + 0, + 2, + 0, + "IMAGE" + ], + [ + 2, + 2, + 0, + 3, + 0, + "FACE" + ], + [ + 4, + 3, + 0, + 5, + 3, + "IMAGE" + ], + [ + 5, + 6, + 0, + 5, + 0, + "CONDITIONING" + ], + [ + 6, + 8, + 1, + 6, + 0, + "CLIP" + ], + [ + 11, + 5, + 2, + 10, + 3, + "LATENT" + ], + [ + 12, + 3, + 1, + 5, + 4, + "MASK" + ], + [ + 13, + 3, + 2, + 11, + 4, + "WARP" + ], + [ + 19, + 12, + 0, + 11, + 2, + "IMAGE" + ], + [ + 21, + 2, + 0, + 11, + 1, + "FACE" + ], + [ + 22, + 3, + 1, + 15, + 0, + "MASK" + ], + [ + 23, + 15, + 0, + 11, + 3, + "MASK" + ], + [ + 24, + 1, + 0, + 11, + 0, + "IMAGE" + ], + [ + 25, + 11, + 0, + 16, + 0, + "IMAGE" + ], + [ + 27, + 7, + 0, + 5, + 1, + "CONDITIONING" + ], + [ + 28, + 8, + 1, + 7, + 0, + "CLIP" + ], + [ + 29, + 5, + 0, + 17, + 0, + "CONDITIONING" + ], + [ + 30, + 5, + 1, + 17, + 1, + "CONDITIONING" + ], + [ + 31, + 17, + 0, + 10, + 1, + "CONDITIONING" + ], + [ + 32, + 17, + 1, + 10, + 2, + "CONDITIONING" + ], + [ + 34, + 3, + 0, + 17, + 3, + "IMAGE" + ], + [ + 35, + 19, + 0, + 17, + 2, + "CONTROL_NET" + ], + [ + 36, + 20, + 0, + 17, + 7, + "CONTROL_NET_WEIGHTS" + ], + [ + 39, + 10, + 0, + 12, + 0, + "LATENT" + ], + [ + 40, + 8, + 0, + 21, + 0, + "MODEL" + ], + [ + 41, + 21, + 0, + 10, + 0, + "MODEL" + ], + [ + 42, + 1, + 1, + 2, + 1, + "MASK" + ], + [ + 43, + 5, + 0, + 26, + 0, + "CONDITIONING" + ], + [ + 44, + 5, + 1, + 26, + 1, + "CONDITIONING" + ], + [ + 45, + 27, + 0, + 26, + 2, + "CONTROL_NET" + ], + [ + 46, + 28, + 0, + 26, + 7, + "CONTROL_NET_WEIGHTS" + ], + [ + 47, + 5, + 0, + 30, + 1, + "CONDITIONING" + ], + [ + 48, + 5, + 1, + 30, + 2, + "CONDITIONING" + ], + [ + 49, + 5, + 2, + 30, + 3, + "LATENT" + ], + [ + 50, + 21, + 0, + 30, + 0, + "MODEL" + ], + [ + 51, + 30, + 0, + 31, + 0, + "LATENT" + ], + [ + 53, + 8, + 2, + 32, + 0, + "VAE" + ], + [ + 54, + 31, + 0, + 33, + 0, + "IMAGE" + ], + [ + 55, + 12, + 0, + 34, + 0, + "IMAGE" + ], + [ + 56, + 26, + 0, + 35, + 1, + "CONDITIONING" + ], + [ + 57, + 26, + 1, + 35, + 2, + "CONDITIONING" + ], + [ + 58, + 21, + 0, + 35, + 0, + "MODEL" + ], + [ + 59, + 5, + 2, + 35, + 3, + "LATENT" + ], + [ + 60, + 35, + 0, + 36, + 0, + "LATENT" + ], + [ + 61, + 36, + 0, + 37, + 0, + "IMAGE" + ], + [ + 62, + 3, + 0, + 26, + 3, + "IMAGE" + ] + ], + "groups": [ + { + "title": "Option 2", + "bounding": [ + 1748, + -187, + 1352, + 655 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "Option 3", + "bounding": [ + 1719, + 500, + 1389, + 641 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "Option 1", + "bounding": [ + 1728, + -771, + 1370, + 569 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "facetools", + "bounding": [ + 31, + 1311, + 1488, + 507 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + } + ], + "config": {}, + "extra": {}, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/full_inpainting.png b/examples/full_inpainting.png index b8ae2e4..2edebb2 100644 Binary files a/examples/full_inpainting.png and b/examples/full_inpainting.png differ