├── README.md ├── download-lcm-lora.json ├── download-svd-xt.json ├── download-svd.json ├── download-turbo.json ├── icon.png ├── install.json ├── install_mac.json ├── install_without_models.json ├── pinokio.js ├── screenshot.png ├── session.json ├── start.json ├── start_cpu.json └── update.json /README.md: -------------------------------------------------------------------------------- 1 | # ComfyUI Launcher 2 | 3 | A 1-click launcher for https://github.com/comfyanonymous/ComfyUI powered by https://pinokio.computer 4 | 5 | ![screenshot.png](screenshot.png) 6 | -------------------------------------------------------------------------------- /download-lcm-lora.json: -------------------------------------------------------------------------------- 1 | { 2 | "run": [{ 3 | "method": "fs.download", 4 | "params": { 5 | "uri": "https://huggingface.co/latent-consistency/lcm-lora-sdxl/resolve/main/pytorch_lora_weights.safetensors?download=true", 6 | "dir": "ComfyUI/models/loras" 7 | } 8 | }, { 9 | "method": "input", 10 | "params": { 11 | "title": "Download Complete", 12 | "description": "Go back to the dashboard and launch the app!" 13 | } 14 | }, { 15 | "method": "browser.open", 16 | "params": { 17 | "uri": "/?selected=ComfyUI" 18 | } 19 | }] 20 | } 21 | -------------------------------------------------------------------------------- /download-svd-xt.json: -------------------------------------------------------------------------------- 1 | { 2 | "run": [{ 3 | "method": "fs.download", 4 | "params": { 5 | "uri": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt/resolve/main/svd_xt.safetensors?download=true", 6 | "dir": "ComfyUI/models/checkpoints" 7 | } 8 | }, { 9 | "method": "input", 10 | "params": { 11 | "title": "Download Complete", 12 | "description": "Go back to the dashboard and launch the app!" 13 | } 14 | }, { 15 | "method": "browser.open", 16 | "params": { 17 | "uri": "/?selected=ComfyUI" 18 | } 19 | }] 20 | } 21 | -------------------------------------------------------------------------------- /download-svd.json: -------------------------------------------------------------------------------- 1 | { 2 | "run": [{ 3 | "method": "fs.download", 4 | "params": { 5 | "uri": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid/resolve/main/svd.safetensors?download=true", 6 | "dir": "ComfyUI/models/checkpoints" 7 | } 8 | }, { 9 | "method": "input", 10 | "params": { 11 | "title": "Download Complete", 12 | "description": "Go back to the dashboard and launch the app!" 13 | } 14 | }, { 15 | "method": "browser.open", 16 | "params": { 17 | "uri": "/?selected=ComfyUI" 18 | } 19 | }] 20 | } 21 | -------------------------------------------------------------------------------- /download-turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "run": [{ 3 | "method": "fs.download", 4 | "params": { 5 | "uri": "https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0_fp16.safetensors?download=true", 6 | "dir": "ComfyUI/models/checkpoints" 7 | } 8 | }, { 9 | "method": "input", 10 | "params": { 11 | "title": "Download Complete", 12 | "description": "Go back to the dashboard and launch the app!" 13 | } 14 | }, { 15 | "method": "browser.open", 16 | "params": { 17 | "uri": "/?selected=ComfyUI" 18 | } 19 | }] 20 | } 21 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cocktailpeanut/comfyui.pinokio/05dcd21be737b01f572b73b4c801091c9ce881f4/icon.png -------------------------------------------------------------------------------- /install.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": [{ 3 | "type": "conda", 4 | "name": "ffmpeg", 5 | "args": "-c conda-forge" 6 | }], 7 | "run": [{ 8 | "method": "shell.run", 9 | "params": { 10 | "message": "git clone https://github.com/comfyanonymous/ComfyUI.git" 11 | } 12 | }, { 13 | "method": "shell.run", 14 | "params": { 15 | "message": "git clone https://github.com/ltdrdata/ComfyUI-Manager", 16 | "path": "ComfyUI/custom_nodes" 17 | } 18 | }, { 19 | "method": "shell.run", 20 | "params": { 21 | "venv": "env", 22 | "path": "ComfyUI", 23 | "message": [ 24 | "{{pip.install.torch}}", 25 | "pip install -r requirements.txt" 26 | ] 27 | } 28 | }, { 29 | "method": "fs.download", 30 | "params": { 31 | "url": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors", 32 | "path": "ComfyUI/models/checkpoints/sd_xl_base_1.0.safetensors" 33 | } 34 | }, { 35 | "method": "fs.download", 36 | "params": { 37 | "url": "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors", 38 | "path": "ComfyUI/models/checkpoints/sd_xl_refiner_1.0.safetensors" 39 | } 40 | }, { 41 | "method": "shell.run", 42 | "params": { 43 | "message": "mkdir workflows" 44 | } 45 | }, { 46 | "method": "shell.run", 47 | "params": { 48 | "message": [ 49 | "git clone https://github.com/comfyanonymous/ComfyUI_examples", 50 | "git clone https://github.com/cocktailpeanut/comfymp4" 51 | ], 52 | "path": "workflows" 53 | } 54 | }, { 55 | "method": "input", 56 | "params": { 57 | "title": "Install Success", 58 | "description": "Go back to the dashboard and launch the app!" 59 | } 60 | }, { 61 | "method": "browser.open", 62 | "params": { 63 | "uri": "/?selected=ComfyUI" 64 | } 65 | }] 66 | } 67 | -------------------------------------------------------------------------------- /install_mac.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": [{ 3 | "type": "conda", 4 | "name": "ffmpeg", 5 | "args": "-c conda-forge" 6 | }], 7 | "run": [{ 8 | "method": "shell.run", 9 | "params": { 10 | "message": "git clone https://github.com/comfyanonymous/ComfyUI.git" 11 | } 12 | }, { 13 | "method": "shell.run", 14 | "params": { 15 | "message": "git clone https://github.com/ltdrdata/ComfyUI-Manager", 16 | "path": "ComfyUI/custom_nodes" 17 | } 18 | }, { 19 | "method": "shell.run", 20 | "params": { 21 | "venv": "env", 22 | "path": "ComfyUI", 23 | "message": [ 24 | "pip install -r requirements.txt", 25 | "pip install git+https://github.com/pytorch/pytorch@refs/pull/114183/head torchvision torchaudio" 26 | ] 27 | } 28 | }, { 29 | "method": "fs.download", 30 | "params": { 31 | "url": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors", 32 | "path": "ComfyUI/models/checkpoints/sd_xl_base_1.0.safetensors" 33 | } 34 | }, { 35 | "method": "fs.download", 36 | "params": { 37 | "url": "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors", 38 | "path": "ComfyUI/models/checkpoints/sd_xl_refiner_1.0.safetensors" 39 | } 40 | }, { 41 | "method": "shell.run", 42 | "params": { 43 | "message": "mkdir workflows" 44 | } 45 | }, { 46 | "method": "shell.run", 47 | "params": { 48 | "message": [ 49 | "git clone https://github.com/comfyanonymous/ComfyUI_examples", 50 | "git clone https://github.com/cocktailpeanut/comfymp4" 51 | ], 52 | "path": "workflows" 53 | } 54 | }, { 55 | "method": "input", 56 | "params": { 57 | "title": "Install Success", 58 | "description": "Go back to the dashboard and launch the app!" 59 | } 60 | }, { 61 | "method": "browser.open", 62 | "params": { 63 | "uri": "/?selected=ComfyUI" 64 | } 65 | }] 66 | } 67 | -------------------------------------------------------------------------------- /install_without_models.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": [{ 3 | "type": "conda", 4 | "name": "ffmpeg", 5 | "args": "-c conda-forge" 6 | }], 7 | "run": [{ 8 | "method": "shell.run", 9 | "params": { 10 | "message": "git clone https://github.com/comfyanonymous/ComfyUI.git" 11 | } 12 | }, { 13 | "method": "shell.run", 14 | "params": { 15 | "message": "git clone https://github.com/ltdrdata/ComfyUI-Manager", 16 | "path": "ComfyUI/custom_nodes" 17 | } 18 | }, { 19 | "method": "shell.run", 20 | "params": { 21 | "venv": "env", 22 | "path": "ComfyUI", 23 | "message": [ 24 | "{{pip.install.torch}}", 25 | "pip install -r requirements.txt" 26 | ] 27 | } 28 | }, { 29 | "method": "shell.run", 30 | "params": { 31 | "message": "mkdir workflows" 32 | } 33 | }, { 34 | "method": "shell.run", 35 | "params": { 36 | "message": [ 37 | "git clone https://github.com/comfyanonymous/ComfyUI_examples", 38 | "git clone https://github.com/cocktailpeanut/comfymp4" 39 | ], 40 | "path": "workflows" 41 | } 42 | }, { 43 | "method": "input", 44 | "params": { 45 | "title": "Install Success", 46 | "description": "Go back to the dashboard and launch the app!" 47 | } 48 | }, { 49 | "method": "browser.open", 50 | "params": { 51 | "uri": "/?selected=ComfyUI" 52 | } 53 | }] 54 | } 55 | -------------------------------------------------------------------------------- /pinokio.js: -------------------------------------------------------------------------------- 1 | const os = require('os') 2 | const fs = require('fs') 3 | const path = require("path") 4 | const exists = (filepath) => { 5 | return new Promise(r=>fs.access(filepath, fs.constants.F_OK, e => r(!e))) 6 | } 7 | module.exports = { 8 | title: "ComfyUI", 9 | description: "Stable Diffusion & Stable Video Diffusion GUI", 10 | icon: "icon.png", 11 | menu: async (kernel) => { 12 | let installed = await exists(path.resolve(__dirname, "ComfyUI", "env")) 13 | if (installed) { 14 | let session = (await kernel.loader.load(path.resolve(__dirname, "session.json"))).resolved 15 | let gpu_running = kernel.running(__dirname, "start.json") 16 | let cpu_running = kernel.running(__dirname, "start_cpu.json") 17 | let running = cpu_running || gpu_running 18 | 19 | let arr 20 | 21 | if (gpu_running) { 22 | arr = [{ 23 | icon: "fa-solid fa-spin fa-circle-notch", 24 | text: "Running" 25 | }, { 26 | icon: "fa-solid fa-desktop", 27 | text: "Server", 28 | href: "start.json", 29 | params: { fullscreen: true } 30 | }] 31 | if (session && session.url) { 32 | arr.push({ 33 | icon: "fa-solid fa-rocket", 34 | text: "Open Web UI", 35 | href: session.url, 36 | target: "_blank" 37 | }) 38 | } 39 | } else if (cpu_running) { 40 | arr = [{ 41 | icon: "fa-solid fa-spin fa-circle-notch", 42 | text: "Running" 43 | }, { 44 | icon: "fa-solid fa-desktop", 45 | text: "Server", 46 | href: "start_cpu.json", 47 | params: { fullscreen: true } 48 | }] 49 | if (session && session.url) { 50 | arr.push({ 51 | icon: "fa-solid fa-rocket", 52 | text: "Open Web UI", 53 | href: session.url, 54 | target: "_blank" 55 | }) 56 | } 57 | } else { 58 | arr = [{ 59 | icon: "fa-solid fa-power-off", 60 | text: "Launch", 61 | href: "start.json", 62 | params: { fullscreen: true, run: true } 63 | }, { 64 | icon: "fa-solid fa-power-off", 65 | text: "Launch CPU Mode (Slow)", 66 | href: "start_cpu.json", 67 | params: { fullscreen: true, run: true } 68 | }] 69 | } 70 | 71 | arr = arr.concat([{ 72 | icon: "fa-solid fa-rotate", 73 | text: "Update", 74 | href: "update.json", 75 | params: { fullscreen: true, run: true } 76 | }, { 77 | text: "Download SDXL Turbo Model", 78 | icon: "fa-solid fa-download", 79 | href: "download-turbo.json", 80 | params: { 81 | run: true, 82 | fullscreen: true 83 | } 84 | }, { 85 | text: "Download Stable Video XT Model", 86 | icon: "fa-solid fa-download", 87 | href: "download-svd-xt.json", 88 | params: { 89 | run: true, 90 | fullscreen: true 91 | } 92 | }, { 93 | text: "Download Stable Video Model", 94 | icon: "fa-solid fa-download", 95 | href: "download-svd.json", 96 | params: { 97 | run: true, 98 | fullscreen: true 99 | } 100 | }, { 101 | text: "Download LCM LoRA", 102 | icon: "fa-solid fa-download", 103 | href: "download-lcm-lora.json", 104 | params: { 105 | run: true, 106 | fullscreen: true 107 | } 108 | }]) 109 | return arr 110 | } else { 111 | if (kernel.platform === "darwin" && kernel.arch === "arm64") { 112 | return [{ 113 | html: ' Install with Stable Video Support (Takes around 20 minutes)', 114 | type: "link", 115 | href: "install_mac.json?run=true&fullscreen=true" 116 | }, { 117 | html: ' Install without Stable Video (Quick)', 118 | type: "link", 119 | href: "install.json?run=true&fullscreen=true" 120 | }] 121 | } else { 122 | return [{ 123 | html: ' Install', 124 | type: "link", 125 | href: "install.json?run=true&fullscreen=true" 126 | }] 127 | } 128 | } 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cocktailpeanut/comfyui.pinokio/05dcd21be737b01f572b73b4c801091c9ce881f4/screenshot.png -------------------------------------------------------------------------------- /session.json: -------------------------------------------------------------------------------- 1 | { 2 | "url": "http://127.0.0.1:8188" 3 | } -------------------------------------------------------------------------------- /start.json: -------------------------------------------------------------------------------- 1 | { 2 | "daemon": true, 3 | "run": [{ 4 | "method": "shell.run", 5 | "params": { 6 | "venv": "env", 7 | "path": "ComfyUI", 8 | "env": { "PYTORCH_MPS_HIGH_WATERMARK_RATIO": "0.0" }, 9 | "message": "python main.py {{platform === 'darwin' ? '--force-fp16' : ''}}", 10 | "on": [{ "event": "/http:\/\/[0-9.:]+/", "done": true }] 11 | } 12 | }, { 13 | "method": "self.set", 14 | "params": { 15 | "session.json": { 16 | "url": "{{input.event[0]}}" 17 | } 18 | } 19 | }, { 20 | "method": "browser.open", 21 | "params": { 22 | "uri": "{{self.session.url}}" 23 | } 24 | }] 25 | } 26 | -------------------------------------------------------------------------------- /start_cpu.json: -------------------------------------------------------------------------------- 1 | { 2 | "run": [{ 3 | "method": "shell.start", 4 | "params": { 5 | "path": "ComfyUI", 6 | "env": { "PYTORCH_MPS_HIGH_WATERMARK_RATIO": "0.0" } 7 | } 8 | }, { 9 | "method": "shell.enter", 10 | "params": { 11 | "message": "{{os.platform() === 'win32' ? 'env\\\\Scripts\\\\activate' : 'source env/bin/activate'}}", 12 | "on": [{ 13 | "event": null, 14 | "return": true 15 | }] 16 | } 17 | }, { 18 | "method": "shell.enter", 19 | "params": { 20 | "message": "{{os.platform() === 'win32' ? 'python' : 'python3'}} main.py --cpu", 21 | "on": [{ 22 | "event": "/(http:\/\/[0-9.:]+)/", 23 | "return": "{{event.matches[0][1]}}" 24 | }] 25 | } 26 | }, { 27 | "method": "self.set", 28 | "params": { 29 | "session.json": { 30 | "url": "{{input}}" 31 | } 32 | } 33 | }, { 34 | "method": "browser.open", 35 | "params": { 36 | "uri": "/?selected=ComfyUI" 37 | } 38 | }, { 39 | "method": "process.wait" 40 | }] 41 | } 42 | -------------------------------------------------------------------------------- /update.json: -------------------------------------------------------------------------------- 1 | { 2 | "run": [{ 3 | "method": "shell.run", 4 | "params": { 5 | "message": "git pull" 6 | } 7 | }, { 8 | "method": "shell.run", 9 | "params": { 10 | "message": "git pull", 11 | "path": "ComfyUI" 12 | } 13 | }, { 14 | "method": "shell.run", 15 | "params": { 16 | "message": "git pull", 17 | "path": "ComfyUI/custom_nodes/ComfyUI-Manager" 18 | } 19 | }, { 20 | "method": "shell.run", 21 | "params": { 22 | "message": "git pull", 23 | "path": "workflows/ComfyUI_examples" 24 | } 25 | }, { 26 | "method": "input", 27 | "params": { 28 | "title": "Updated", 29 | "description": "Update successful. Restart the app from the dashboard" 30 | } 31 | }, { 32 | "method": "browser.open", 33 | "params": { 34 | "uri": "/?selected=ComfyUI" 35 | } 36 | }] 37 | } 38 | --------------------------------------------------------------------------------