From 9efffae00ca3ad1a6763245e823d7c1cdeb9edab Mon Sep 17 00:00:00 2001 From: lawrence-cj Date: Thu, 2 Jan 2025 21:57:35 +0800 Subject: [PATCH] 1. add 2K ComfyUI support and work-flow json; 2. update README.md; Signed-off-by: lawrence-cj --- README.md | 6 +- asset/docs/ComfyUI/Sana_FlowEuler.json | 526 ++++++++++------------ asset/docs/ComfyUI/Sana_FlowEuler_2K.json | 508 +++++++++++++++++++++ 3 files changed, 750 insertions(+), 290 deletions(-) create mode 100644 asset/docs/ComfyUI/Sana_FlowEuler_2K.json diff --git a/README.md b/README.md index 4d0f72d..5eb3848 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,8 @@ As a result, Sana-0.6B is very competitive with modern giant diffusion model (e. ## 🔥🔥 News -- (🔥 New) \[2024/12/20\] 1.6B 2K resolution [Sana models](asset/docs/model_zoo.md) are released: [\[BF16 pth\]](https://huggingface.co/Efficient-Large-Model/Sana_1600M_2Kpx_BF16) or [\[BF16 diffusers\]](https://huggingface.co/Efficient-Large-Model/Sana_1600M_2Kpx_BF16_diffusers). 🚀 Get your 2K resolution images within 4 seconds! Find more samples in [Sana page](https://nvlabs.github.io/Sana/). +- (🔥 New) \[2025/1/2\] 2K resolution [Sana models](asset/docs/model_zoo.md) is supported in [Sana-ComfyUI](https://github.com/Efficient-Large-Model/ComfyUI_ExtraModels) and [work flow](asset/docs/ComfyUI/Sana_FlowEuler_2K.json) is also prepared. +- (🔥 New) \[2024/12/20\] 1.6B 2K resolution [Sana models](asset/docs/model_zoo.md) are released: [\[BF16 pth\]](https://huggingface.co/Efficient-Large-Model/Sana_1600M_2Kpx_BF16) or [\[BF16 diffusers\]](https://huggingface.co/Efficient-Large-Model/Sana_1600M_2Kpx_BF16_diffusers). 🚀 Get your 2K resolution images within 4 seconds! Find more samples in [Sana page](https://nvlabs.github.io/Sana/). Thanks [SUPIR](https://github.com/Fanghua-Yu/SUPIR) for their wonderful work and support. - (🔥 New) \[2024/12/18\] `diffusers` supports Sana-LoRA fine-tuning! Sana-LoRA's training and convergence speed is supper fast. [\[Guidance\]](asset/docs/sana_lora_dreambooth.md) or [\[diffusers docs\]](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/README_sana.md). - (🔥 New) \[2024/12/13\] `diffusers` has Sana! [All Sana models in diffusers safetensors](https://huggingface.co/collections/Efficient-Large-Model/sana-673efba2a57ed99843f11f9e) are released and diffusers pipeline `SanaPipeline`, `SanaPAGPipeline`, `DPMSolverMultistepScheduler(with FlowMatching)` are all supported now. We prepare a [Model Card](asset/docs/model_zoo.md) for you to choose. - (🔥 New) \[2024/12/10\] 1.6B BF16 [Sana model](https://huggingface.co/Efficient-Large-Model/Sana_1600M_1024px_BF16) is released for stable fine-tuning. @@ -334,8 +335,7 @@ We will try our best to release - Thanks to [PixArt-α](https://github.com/PixArt-alpha/PixArt-alpha), [PixArt-Σ](https://github.com/PixArt-alpha/PixArt-sigma), [Efficient-ViT](https://github.com/mit-han-lab/efficientvit), - [ComfyUI_ExtraModels](https://github.com/city96/ComfyUI_ExtraModels), - [SUPIR](https://github.com/Fanghua-Yu/SUPIR) and + [ComfyUI_ExtraModels](https://github.com/city96/ComfyUI_ExtraModels) and [diffusers](https://github.com/huggingface/diffusers) for their wonderful work and codebase! diff --git a/asset/docs/ComfyUI/Sana_FlowEuler.json b/asset/docs/ComfyUI/Sana_FlowEuler.json index 01a58aa..35fe264 100644 --- a/asset/docs/ComfyUI/Sana_FlowEuler.json +++ b/asset/docs/ComfyUI/Sana_FlowEuler.json @@ -1,218 +1,197 @@ { - "last_node_id": 29, - "last_link_id": 24, + "last_node_id": 10, + "last_link_id": 11, "nodes": [ { - "id": 6, - "type": "SanaResolutionSelect", + "id": 1, + "type": "VAEDecode", "pos": [ - -364.7435607910156, - 301.5954284667969 + 1116.951416015625, + 273.2231140136719 ], "size": [ - 315, - 102 + 200, + 50 ], "flags": {}, - "order": 0, + "order": 8, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "width", - "type": "INT", - "links": [ - 1 - ], - "slot_index": 0 + "name": "samples", + "type": "LATENT", + "link": 1 }, { - "name": "height", - "type": "INT", + "name": "vae", + "type": "VAE", + "link": 2 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", "links": [ - 2 + 9 ], - "slot_index": 1 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "SanaResolutionSelect" + "Node name for S&R": "VAEDecode" }, - "widgets_values": [ - "1024px", - "1.00" - ] + "widgets_values": [] }, { - "id": 3, - "type": "EmptyDCAELatentImage", + "id": 2, + "type": "GemmaLoader", "pos": [ - 57.19669723510742, - 202.29898071289062 + -41.03317642211914, + 680.6829223632812 ], "size": [ 315, 106 ], "flags": {}, - "order": 5, + "order": 0, "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 1, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 2, - "widget": { - "name": "height" - } - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "GEMMA", + "type": "GEMMA", "links": [ - 18 + 10, + 11 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "EmptyDCAELatentImage" + "Node name for S&R": "GemmaLoader" }, "widgets_values": [ - 512, - 512, - 1 + "Efficient-Large-Model/gemma-2-2b-it", + "cuda", + "BF16" ] }, { - "id": 8, - "type": "SanaTextEncode", + "id": 3, + "type": "ExtraVAELoader", "pos": [ - 5.8887786865234375, - 706.19287109375 + 801.2960205078125, + 863.7061157226562 ], "size": [ - 400, - 200 + 315, + 106 ], "flags": {}, - "order": 6, + "order": 1, "mode": 0, - "inputs": [ - { - "name": "GEMMA", - "type": "GEMMA", - "link": 12 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "VAE", + "type": "VAE", "links": [ - 17 + 2 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "SanaTextEncode" + "Node name for S&R": "ExtraVAELoader" }, "widgets_values": [ - "\"\"" + "mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers", + "dcae-f32c32-sana-1.0-diffusers", + "BF16" ] }, { - "id": 13, - "type": "PreviewImage", + "id": 4, + "type": "KSampler", "pos": [ - 802.6994018554688, - 217.20889282226562 + 770.397216796875, + 267.5942077636719 ], "size": [ - 605.93505859375, - 665.570068359375 + 300, + 480 ], "flags": {}, - "order": 10, + "order": 7, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 11 + "name": "model", + "type": "MODEL", + "link": 3 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 6 } ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 9, - "type": "GemmaLoader", - "pos": [ - -381.6518859863281, - 512.5463256835938 - ], - "size": [ - 315, - 106 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "GEMMA", - "type": "GEMMA", + "name": "LATENT", + "type": "LATENT", "links": [ - 12, - 13 + 1 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "GemmaLoader" + "Node name for S&R": "KSampler" }, "widgets_values": [ - "Efficient-Large-Model/gemma-2-2b-it", - "cuda", - "BF16" + 1057228702589644, + "fixed", + 28, + 2, + "euler", + "normal", + 1 ] }, { - "id": 15, - "type": "EmptyDCAELatentImage", + "id": 5, + "type": "EmptySanaLatentImage", "pos": [ - 62.19669723510742, - 207.29898071289062 + 392.18475341796875, + 367.0936279296875 ], "size": [ 315, 106 ], "flags": {}, - "order": 2, + "order": 6, "mode": 0, "inputs": [ { "name": "width", "type": "INT", - "link": null, + "link": 7, "widget": { "name": "width" } @@ -220,7 +199,7 @@ { "name": "height", "type": "INT", - "link": null, + "link": 8, "widget": { "name": "height" } @@ -230,12 +209,14 @@ { "name": "LATENT", "type": "LATENT", - "links": [], + "links": [ + 6 + ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "EmptyDCAELatentImage" + "Node name for S&R": "EmptySanaLatentImage" }, "widgets_values": [ 512, @@ -244,133 +225,89 @@ ] }, { - "id": 4, - "type": "VAEDecode", + "id": 6, + "type": "PreviewImage", "pos": [ - 776.332763671875, - 105.08650970458984 + 1143.318115234375, + 385.34552001953125 ], "size": [ - 200, - 50 + 605.93505859375, + 665.570068359375 ], "flags": {}, "order": 9, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 3 - }, - { - "name": "vae", - "type": "VAE", - "link": 24 - } - ], - "outputs": [ - { - "name": "IMAGE", + "name": "images", "type": "IMAGE", - "links": [ - 11 - ], - "slot_index": 0, - "shape": 3 + "link": 9 } ], + "outputs": [], "properties": { - "Node name for S&R": "VAEDecode" + "Node name for S&R": "PreviewImage" }, "widgets_values": [] }, { - "id": 29, - "type": "ExtraVAELoader", + "id": 9, + "type": "GemmaTextEncode", "pos": [ - 460.67730712890625, - 695.5695190429688 + 320.47918701171875, + 884.2686767578125 ], "size": [ - 315, - 106 + 400, + 200 ], "flags": {}, - "order": 3, + "order": 4, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "VAE", - "type": "VAE", - "links": [ - 24 - ], - "slot_index": 0 + "name": "GEMMA", + "type": "GEMMA", + "link": 10 } ], - "properties": { - "Node name for S&R": "ExtraVAELoader" - }, - "widgets_values": [ - "mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers", - "dcae-f32c32-sana-1.0-diffusers", - "BF16" - ] - }, - { - "id": 25, - "type": "SanaCheckpointLoader", - "pos": [ - -334.1000671386719, - 133.43394470214844 - ], - "size": [ - 315, - 82 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "model", - "type": "MODEL", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 20 + 5 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "SanaCheckpointLoader" + "Node name for S&R": "GemmaTextEncode" }, "widgets_values": [ - "Efficient-Large-Model/Sana_1600M_1024px_MultiLing", - "SanaMS_1600M_P1_D20" + "" ] }, { - "id": 14, + "id": 10, "type": "SanaTextEncode", "pos": [ - 9.182632446289062, - 413.08575439453125 + 323.21978759765625, + 632.0758666992188 ], "size": [ 400, 200 ], "flags": {}, - "order": 7, + "order": 5, "mode": 0, "inputs": [ { "name": "GEMMA", "type": "GEMMA", - "link": 13 + "link": 11 } ], "outputs": [ @@ -378,7 +315,7 @@ "name": "CONDITIONING", "type": "CONDITIONING", "links": [ - 16 + 4 ], "slot_index": 0 } @@ -387,170 +324,185 @@ "Node name for S&R": "SanaTextEncode" }, "widgets_values": [ - "make me a logo that says \"So Fast\" with a really cool flying dragon shape with lightning sparks all over the sides and all of it contains Indonesian language" + "a dog and a cat" ] }, { - "id": 10, - "type": "KSampler", + "id": 7, + "type": "SanaCheckpointLoader", "pos": [ - 429.7785339355469, - 99.45759582519531 + -15.461307525634766, + 297.74456787109375 ], "size": [ - 300, - 480 + 315, + 106 ], "flags": {}, - "order": 8, + "order": 2, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { "name": "model", "type": "MODEL", - "link": 20 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 16 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 17 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 18 + "links": [ + 3 + ], + "slot_index": 0 } ], + "properties": { + "Node name for S&R": "SanaCheckpointLoader" + }, + "widgets_values": [ + "Efficient-Large-Model/Sana_1600M_1024px_BF16", + "SanaMS_1600M_P1_D20", + "BF16" + ] + }, + { + "id": 8, + "type": "SanaResolutionSelect", + "pos": [ + -24.12485122680664, + 469.7320556640625 + ], + "size": [ + 315, + 102 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "width", + "type": "INT", "links": [ - 3 + 7 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 + }, + { + "name": "height", + "type": "INT", + "links": [ + 8 + ], + "slot_index": 1 } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "SanaResolutionSelect" }, "widgets_values": [ - 750392164154046, - "randomize", - 28, - 4.5, - "euler", - "normal", - 1 + "1024px", + "1.00" ] } ], "links": [ [ 1, - 6, + 4, 0, - 3, + 1, 0, - "INT" + "LATENT" ], [ 2, - 6, - 1, 3, + 0, 1, - "INT" + 1, + "VAE" ], [ 3, - 10, + 7, 0, 4, 0, - "LATENT" + "MODEL" ], [ - 11, 4, + 10, 0, - 13, - 0, - "IMAGE" + 4, + 1, + "CONDITIONING" ], [ - 12, + 5, 9, 0, - 8, - 0, - "GEMMA" + 4, + 2, + "CONDITIONING" ], [ - 13, - 9, - 0, - 14, + 6, + 5, 0, - "GEMMA" + 4, + 3, + "LATENT" ], [ - 16, - 14, + 7, + 8, 0, - 10, - 1, - "CONDITIONING" + 5, + 0, + "INT" ], [ - 17, 8, - 0, - 10, - 2, - "CONDITIONING" + 8, + 1, + 5, + 1, + "INT" ], [ - 18, - 3, + 9, + 1, 0, - 10, - 3, - "LATENT" + 6, + 0, + "IMAGE" ], [ - 20, - 25, - 0, 10, + 2, 0, - "MODEL" + 9, + 0, + "GEMMA" ], [ - 24, - 29, + 11, + 2, 0, - 4, - 1, - "VAE" + 10, + 0, + "GEMMA" ] ], "groups": [], "config": {}, "extra": { "ds": { - "scale": 0.7513148009015777, + "scale": 1, "offset": [ - 628.4872538544141, - 156.35225366732607 + 363.9719256481908, + -27.1040341608292 ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/asset/docs/ComfyUI/Sana_FlowEuler_2K.json b/asset/docs/ComfyUI/Sana_FlowEuler_2K.json new file mode 100644 index 0000000..91a31d0 --- /dev/null +++ b/asset/docs/ComfyUI/Sana_FlowEuler_2K.json @@ -0,0 +1,508 @@ +{ + "last_node_id": 38, + "last_link_id": 47, + "nodes": [ + { + "id": 4, + "type": "VAEDecode", + "pos": [ + 776.332763671875, + 105.08650970458984 + ], + "size": [ + 200, + 50 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 3 + }, + { + "name": "vae", + "type": "VAE", + "link": 24 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 11 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 9, + "type": "GemmaLoader", + "pos": [ + -381.6518859863281, + 512.5463256835938 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "GEMMA", + "type": "GEMMA", + "links": [ + 39, + 41 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GemmaLoader" + }, + "widgets_values": [ + "Efficient-Large-Model/gemma-2-2b-it", + "cuda", + "BF16" + ] + }, + { + "id": 29, + "type": "ExtraVAELoader", + "pos": [ + 460.67730712890625, + 695.5695190429688 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 24 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ExtraVAELoader" + }, + "widgets_values": [ + "mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers", + "dcae-f32c32-sana-1.0-diffusers", + "BF16" + ] + }, + { + "id": 10, + "type": "KSampler", + "pos": [ + 429.7785339355469, + 99.45759582519531 + ], + "size": [ + 300, + 480 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 33 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 42 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 47 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 46 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 3 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 1057228702589644, + "fixed", + 28, + 2, + "euler", + "normal", + 1 + ] + }, + { + "id": 33, + "type": "EmptySanaLatentImage", + "pos": [ + 51.56604766845703, + 198.95700073242188 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "width", + "type": "INT", + "link": 28, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 29, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 46 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptySanaLatentImage" + }, + "widgets_values": [ + 512, + 512, + 1 + ] + }, + { + "id": 13, + "type": "PreviewImage", + "pos": [ + 802.6994018554688, + 217.20889282226562 + ], + "size": [ + 605.93505859375, + 665.570068359375 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 11 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 25, + "type": "SanaCheckpointLoader", + "pos": [ + -356.08001708984375, + 129.6079559326172 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 33 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SanaCheckpointLoader" + }, + "widgets_values": [ + "Efficient-Large-Model/Sana_1600M_2Kpx_BF16", + "SanaMS_1600M_P1_D20_2K", + "BF16" + ] + }, + { + "id": 6, + "type": "SanaResolutionSelect", + "pos": [ + -364.7435607910156, + 301.5954284667969 + ], + "size": [ + 315, + 102 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 28 + ], + "slot_index": 0 + }, + { + "name": "height", + "type": "INT", + "links": [ + 29 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "SanaResolutionSelect" + }, + "widgets_values": [ + "2K", + "1.00" + ] + }, + { + "id": 14, + "type": "SanaTextEncode", + "pos": [ + -17.398910522460938, + 463.93927001953125 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "GEMMA", + "type": "GEMMA", + "link": 39 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 42 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SanaTextEncode" + }, + "widgets_values": [ + "a dog and a cat" + ] + }, + { + "id": 37, + "type": "GemmaTextEncode", + "pos": [ + -20.1395263671875, + 716.132080078125 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "GEMMA", + "type": "GEMMA", + "link": 41 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 47 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GemmaTextEncode" + }, + "widgets_values": [ + "" + ] + } + ], + "links": [ + [ + 3, + 10, + 0, + 4, + 0, + "LATENT" + ], + [ + 11, + 4, + 0, + 13, + 0, + "IMAGE" + ], + [ + 24, + 29, + 0, + 4, + 1, + "VAE" + ], + [ + 28, + 6, + 0, + 33, + 0, + "INT" + ], + [ + 29, + 6, + 1, + 33, + 1, + "INT" + ], + [ + 33, + 25, + 0, + 10, + 0, + "MODEL" + ], + [ + 39, + 9, + 0, + 14, + 0, + "GEMMA" + ], + [ + 41, + 9, + 0, + 37, + 0, + "GEMMA" + ], + [ + 42, + 14, + 0, + 10, + 1, + "CONDITIONING" + ], + [ + 46, + 33, + 0, + 10, + 3, + "LATENT" + ], + [ + 47, + 37, + 0, + 10, + 2, + "CONDITIONING" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.9090909090909091, + "offset": [ + 623.7012344346042, + 257.61183690683845 + ] + } + }, + "version": 0.4 +} \ No newline at end of file