{"spaces":[{"apiInputs":[{"name":"text","type":"string","nodeId":"1","field":"value","description":"Text returned by the endpoint","required":true}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"The smallest hosted API graph: one typed, named input flows into one named output. Deploy it, call it from REST, CLI, or MCP, and export the exact persisted workflow JSON.","downloadPath":"/api/comfy/spaces/appnz-api-contract/download","kind":"api","labs":[],"minVramGb":0,"models":[],"name":"API Input + Output Starter","nodeCount":2,"openSource":[{"label":"app.nz API contract nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"typed input discovery and named hosted-artifact outputs"}],"slug":"appnz-api-contract","source":{"label":"Open app.nz API contract nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZAPIStringInput","inputs":{"name":"text","value":"Kia ora from a persisted ComfyUI API workflow.","description":"Text returned by this example endpoint.","required":true},"_meta":{"title":"Named API input"}},"2":{"class_type":"AppNZAPITextOutput","inputs":{"text":["1",0],"name":"result","description":"Persisted UTF-8 text artifact."},"_meta":{"title":"Named API output"}}}},{"apiInputs":[{"name":"audio_path","type":"string","nodeId":"1","field":"filepath","default":"input/sample.wav","description":"Path to an audio file on the worker (upload first)","required":true}],"customNodes":["https://github.com/jhj0517/ComfyUI-faster-whisper"],"description":"Transcribe audio with faster-whisper (base model, auto language) and save an SRT. Swap the model input to large-v3 for higher accuracy.","downloadPath":"/api/comfy/spaces/whisper-stt/download","kind":"stt","labs":[],"minVramGb":8,"models":[{"file":"faster-whisper-base.bin","kind":"checkpoint","name":"faster-whisper base (STT)","notes":"ComfyUI-faster-whisper auto-downloads to models/faster-whisper on first run; entry documents the source","sizeGb":0.15,"sources":["https://huggingface.co/Systran/faster-whisper-base/resolve/main/model.bin"],"vramGb":1}],"name":"Whisper Speech-to-Text","nodeCount":5,"openSource":null,"slug":"whisper-stt","source":{"label":"ComfyUI-faster-whisper","url":"https://github.com/jhj0517/ComfyUI-faster-whisper","license":"MIT","adapted":true},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"InputFilePath","_meta":{"title":"Audio file path"},"inputs":{"filepath":"input/sample.wav"}},"2":{"class_type":"LoadFasterWhisperModel","inputs":{"model":"base","device":"auto"}},"3":{"class_type":"FasterWhisperTranscription","inputs":{"audio":["1",0],"model":["2",0],"language":"auto","vad_filter":true}},"4":{"class_type":"FasterWhisperToSubtitle","inputs":{"transcriptions":["3",0],"subtitle_format":".srt"}},"5":{"class_type":"SaveSubtitle","inputs":{"subtitle":["4",0],"prefix":"appnz-transcript"}}}},{"apiInputs":[{"name":"speech","type":"string","nodeId":"2","field":"speech","default":"Hello from app dot n z.","description":"Text to speak","required":true},{"name":"sample_text","type":"string","nodeId":"2","field":"sample_text","default":"This is a short sample of the reference voice.","description":"Transcript of the reference clip","required":false},{"name":"seed","type":"integer","nodeId":"2","field":"seed","default":1,"description":"Generation seed","required":false}],"customNodes":["https://github.com/niknah/ComfyUI-F5-TTS"],"description":"Zero-shot voice-cloning TTS: a 5-10s reference clip plus its transcript drives F5-TTS v1; output saved as audio.","downloadPath":"/api/comfy/spaces/f5-tts/download","kind":"tts","labs":[],"minVramGb":8,"models":[{"file":"model_1250000.safetensors","kind":"checkpoint","name":"F5-TTS v1 Base","notes":"ComfyUI-F5-TTS pulls via hf:// on first run; vocoder vocos-mel-24khz auto-downloads","sizeGb":1.35,"sources":["https://huggingface.co/SWivid/F5-TTS/resolve/main/F5TTS_v1_Base/model_1250000.safetensors"],"vramGb":2}],"name":"F5-TTS Voice Clone","nodeCount":3,"openSource":null,"slug":"f5-tts","source":{"label":"ComfyUI-F5-TTS","url":"https://github.com/niknah/ComfyUI-F5-TTS","license":"MIT","adapted":true},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadAudio","_meta":{"title":"Reference voice (5-10s wav)"},"inputs":{"audio":"ref_voice.wav"}},"2":{"class_type":"F5TTSAudioInputs","_meta":{"title":"F5-TTS v1"},"inputs":{"sample_audio":["1",0],"sample_text":"This is a short sample of the reference voice.","speech":"Hello from app dot n z. This text is turned into speech with the cloned reference voice.","seed":1,"model":"F5v1","vocoder":"auto","speed":1.0,"model_type":"F5TTS_v1_Base"}},"3":{"class_type":"SaveAudio","inputs":{"audio":["2",0],"filename_prefix":"appnz-tts"}}}},{"apiInputs":null,"customNodes":null,"description":"Photorealistic text-to-image on RealVisXL V5.0 (latest SDXL photoreal finetune), DPM++ 2M SDE Karras, 30 steps, 1024x1024. Core nodes only.","downloadPath":"/api/comfy/spaces/realvisxl-photo/download","kind":"image","labs":[],"minVramGb":14,"models":[{"file":"RealVisXL_V5.0_fp16.safetensors","kind":"checkpoint","name":"RealVisXL V5.0 fp16","notes":"latest RealVisXL photoreal SDXL finetune; DPM++ SDE/2M Karras 30+ steps","sizeGb":6.9,"sources":["https://huggingface.co/SG161222/RealVisXL_V5.0/resolve/main/RealVisXL_V5.0_fp16.safetensors","https://civitai.com/api/download/models/789646"],"vramGb":10}],"name":"RealVisXL V5 Photoreal","nodeCount":7,"openSource":null,"slug":"realvisxl-photo","source":{"label":"ComfyUI SDXL examples","url":"https://github.com/comfyanonymous/ComfyUI_examples/tree/master/sdxl","license":"See source","adapted":true},"tutorials":[{"blogPath":"/blog/comfyui-prompts-negative-prompts","lesson":3,"title":"Prompt with intent"}],"verification":{"status":"gpu-verified","checkedAt":"2026-07-20","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / PyTorch 2.11 cu128 / RTX 5090 32GB","evidence":"Live hosted-worker output and machine evidence: visualbench/comfy-gpu/realvisxl-text-to-image.json"},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"RealVisXL_V5.0_fp16.safetensors"}},"2":{"class_type":"CLIPTextEncode","_meta":{"title":"positive"},"inputs":{"text":"RAW photo, portrait of a woman at golden hour, 85mm lens, shallow depth of field, detailed skin texture, film grain","clip":["1",1]}},"3":{"class_type":"CLIPTextEncode","_meta":{"title":"negative"},"inputs":{"text":"bad hands, bad anatomy, ugly, deformed, blurry, lowres, watermark, cartoon","clip":["1",1]}},"4":{"class_type":"EmptyLatentImage","inputs":{"width":1024,"height":1024,"batch_size":1}},"5":{"class_type":"KSampler","inputs":{"seed":42,"steps":30,"cfg":5.0,"sampler_name":"dpmpp_2m_sde","scheduler":"karras","denoise":1.0,"model":["1",0],"positive":["2",0],"negative":["3",0],"latent_image":["4",0]}},"6":{"class_type":"VAEDecode","inputs":{"samples":["5",0],"vae":["1",2]}},"7":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-realvis","images":["6",0]}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"2","field":"text","description":"Positive prompt","required":true},{"name":"negative_prompt","type":"string","nodeId":"3","field":"text","description":"What the image should avoid","required":false},{"name":"seed","type":"integer","nodeId":"5","field":"seed","default":42,"description":"Fixed seed for reproducible comparisons","required":false},{"name":"steps","type":"integer","nodeId":"5","field":"steps","default":24,"required":false},{"name":"cfg","type":"number","nodeId":"5","field":"cfg","default":5,"required":false},{"name":"width","type":"integer","nodeId":"4","field":"width","default":1024,"required":false},{"name":"height","type":"integer","nodeId":"4","field":"height","default":1024,"required":false}],"customNodes":null,"description":"A clean seven-node SDXL graph for learning and production: Proteus V0.4, DPM++ 2M SDE Karras, 24 steps, CFG 5, and fully mapped prompt, seed, step, CFG, and size inputs.","downloadPath":"/api/comfy/spaces/proteus-v04-text-to-image/download","kind":"image","labs":[],"minVramGb":12,"models":[{"file":"proteusV0.4.safetensors","kind":"checkpoint","name":"Proteus V0.4","notes":"GPL-3.0 model; recommended CFG 4-6, 20+ steps, DPM++ 2M SDE Karras","sizeGb":6.9,"sources":["https://huggingface.co/dataautogpt3/ProteusV0.4/resolve/main/ProteusV0.4.safetensors"],"vramGb":10}],"name":"Proteus V0.4 Text-to-Image","nodeCount":7,"openSource":null,"slug":"proteus-v04-text-to-image","source":{"label":"Proteus V0.4 model card","url":"https://huggingface.co/dataautogpt3/ProteusV0.4","license":"GPL-3.0","adapted":true},"tutorials":[{"blogPath":"/blog/comfyui-install-first-image","lesson":1,"title":"Install cleanly and make your first image"},{"blogPath":"/blog/comfyui-diffusion-seeds-cfg-samplers","lesson":2,"title":"Diffusion, seeds, CFG, samplers, and schedulers"},{"blogPath":"/blog/comfyui-text-to-image-blank-canvas","lesson":4,"title":"Build text-to-image from a blank canvas"},{"blogPath":"/blog/comfyui-batches-prompt-lists-api","lesson":9,"title":"Automate batches and prompt lists"}],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"proteusV0.4.safetensors"}},"2":{"class_type":"CLIPTextEncode","_meta":{"title":"Positive prompt"},"inputs":{"text":"three tiny astronauts tending a glasshouse on Mars, cinematic light, best quality, HD, ~*~aesthetic~*~","clip":["1",1]}},"3":{"class_type":"CLIPTextEncode","_meta":{"title":"Negative prompt"},"inputs":{"text":"worst quality, low quality, blurry, deformed, watermark, text, extra fingers","clip":["1",1]}},"4":{"class_type":"EmptyLatentImage","inputs":{"width":1024,"height":1024,"batch_size":1}},"5":{"class_type":"KSampler","inputs":{"seed":42,"steps":24,"cfg":5.0,"sampler_name":"dpmpp_2m_sde","scheduler":"karras","denoise":1.0,"model":["1",0],"positive":["2",0],"negative":["3",0],"latent_image":["4",0]}},"6":{"class_type":"VAEDecode","inputs":{"samples":["5",0],"vae":["1",2]}},"7":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-proteus-v04","images":["6",0]}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"3","field":"text","required":true},{"name":"negative_prompt","type":"string","nodeId":"4","field":"text","required":false},{"name":"lora_strength","type":"number","nodeId":"2","field":"strength_model","default":0.65,"required":false},{"name":"seed","type":"integer","nodeId":"6","field":"seed","default":73,"required":false}],"customNodes":null,"description":"A reproducible LoRA lesson graph: Proteus V0.4 with separate model/CLIP adapter strengths so style influence can be measured without changing the seed.","downloadPath":"/api/comfy/spaces/proteus-v04-lora/download","kind":"image","labs":[],"minVramGb":14,"models":[{"file":"proteusV0.4.safetensors","kind":"checkpoint","name":"Proteus V0.4","notes":"GPL-3.0 model; recommended CFG 4-6, 20+ steps, DPM++ 2M SDE Karras","sizeGb":6.9,"sources":["https://huggingface.co/dataautogpt3/ProteusV0.4/resolve/main/ProteusV0.4.safetensors"],"vramGb":10},{"file":"add_detail.safetensors","kind":"lora","name":"Detail Tweaker LoRA","sizeGb":0.15,"sources":["https://civitai.com/api/download/models/62833"],"vramGb":1}],"name":"Proteus V0.4 + Detail LoRA","nodeCount":8,"openSource":null,"slug":"proteus-v04-lora","source":{"label":"Proteus V0.4 + LoRA graph","url":"https://huggingface.co/dataautogpt3/ProteusV0.4","license":"GPL-3.0; adapter terms at source","adapted":true},"tutorials":[{"blogPath":"/blog/comfyui-lora-style-control","lesson":6,"title":"Use LoRAs without losing the base model"}],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"proteusV0.4.safetensors"}},"2":{"class_type":"LoraLoader","inputs":{"lora_name":"add_detail.safetensors","strength_model":0.65,"strength_clip":0.45,"model":["1",0],"clip":["1",1]}},"3":{"class_type":"CLIPTextEncode","_meta":{"title":"Positive prompt"},"inputs":{"text":"macro photograph of a clockwork moth, brass filigree, studio lighting, best quality, HD","clip":["2",1]}},"4":{"class_type":"CLIPTextEncode","_meta":{"title":"Negative prompt"},"inputs":{"text":"worst quality, low quality, blurry, deformed, watermark, text","clip":["2",1]}},"5":{"class_type":"EmptyLatentImage","inputs":{"width":1024,"height":1024,"batch_size":1}},"6":{"class_type":"KSampler","inputs":{"seed":73,"steps":24,"cfg":5.0,"sampler_name":"dpmpp_2m_sde","scheduler":"karras","denoise":1.0,"model":["2",0],"positive":["3",0],"negative":["4",0],"latent_image":["5",0]}},"7":{"class_type":"VAEDecode","inputs":{"samples":["6",0],"vae":["1",2]}},"8":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-proteus-lora","images":["7",0]}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"1","field":"prompt","required":true},{"name":"steps","type":"integer","nodeId":"1","field":"steps","default":8,"required":false},{"name":"seed","type":"integer","nodeId":"1","field":"seed","default":101,"required":false},{"name":"width","type":"integer","nodeId":"1","field":"width","default":1024,"required":false},{"name":"height","type":"integer","nodeId":"1","field":"height","default":1024,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Eight-step Z-Image Turbo through the open app.nz Comfy custom node. It prefers the CuteDSL accelerated runtime when installed and falls back to the stock Diffusers pipeline.","downloadPath":"/api/comfy/spaces/cute-zimage-turbo/download","kind":"image","labs":[],"minVramGb":18,"models":[{"file":"z_image_turbo_bf16.safetensors","kind":"unet","name":"Z-Image-Turbo (bf16)","notes":"cutedsl CuteZImage accelerated path; diffusers repo Tongyi-MAI/Z-Image-Turbo","sizeGb":12,"sources":["https://huggingface.co/Comfy-Org/z_image_turbo/resolve/main/split_files/diffusion_models/z_image_turbo_bf16.safetensors"],"vramGb":16}],"name":"CuteDSL Z-Image Turbo","nodeCount":2,"openSource":null,"slug":"cute-zimage-turbo","source":{"label":"Open app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT; model terms at source","adapted":false},"tutorials":[{"blogPath":"/blog/comfyui-low-vram-fp8-gguf","lesson":8,"title":"Run modern models with modest VRAM"}],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"CuteZImageTurbo","_meta":{"title":"CuteDSL accelerated Z-Image Turbo"},"inputs":{"prompt":"a ceramic fox-shaped observatory beneath an aurora, clean editorial illustration","steps":8,"seed":101,"width":1024,"height":1024}},"2":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-cute-zimage","images":["1",0]}}}},{"apiInputs":null,"customNodes":null,"description":"Text-to-video with LTX-Video 2B (97 frames @ 24fps, 768x512). Long descriptive prompts work best. Core nodes only.","downloadPath":"/api/comfy/spaces/ltx-text-to-video/download","kind":"video","labs":[],"minVramGb":29,"models":[{"file":"ltx-video-2b-v0.9.5.safetensors","kind":"checkpoint","name":"LTX-Video 2B 0.9.5","sizeGb":9.4,"sources":["https://huggingface.co/Lightricks/LTX-Video/resolve/main/ltx-video-2b-v0.9.5.safetensors"],"vramGb":14},{"file":"t5xxl_fp16.safetensors","kind":"clip","name":"T5-XXL fp16","sizeGb":9.8,"sources":["https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors"],"vramGb":11}],"name":"LTX-Video Text-to-Video","nodeCount":11,"openSource":null,"slug":"ltx-text-to-video","source":{"label":"ComfyUI LTX-Video examples","url":"https://github.com/comfyanonymous/ComfyUI_examples/tree/master/ltxv","license":"See source","adapted":true},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"ltx-video-2b-v0.9.5.safetensors"}},"2":{"class_type":"CLIPLoader","inputs":{"clip_name":"t5xxl_fp16.safetensors","type":"ltxv"}},"3":{"class_type":"CLIPTextEncode","_meta":{"title":"positive"},"inputs":{"text":"A drone shot slowly orbiting a lighthouse on a rocky coast at sunset, waves crashing below, warm cinematic light, gentle camera motion, photorealistic","clip":["2",0]}},"4":{"class_type":"CLIPTextEncode","_meta":{"title":"negative"},"inputs":{"text":"low quality, worst quality, deformed, distorted, jittery, watermark","clip":["2",0]}},"5":{"class_type":"EmptyLTXVLatentVideo","inputs":{"width":768,"height":512,"length":97,"batch_size":1}},"6":{"class_type":"LTXVConditioning","inputs":{"positive":["3",0],"negative":["4",0],"frame_rate":25}},"7":{"class_type":"LTXVScheduler","inputs":{"steps":30,"max_shift":2.05,"base_shift":0.95,"stretch":true,"terminal":0.1,"latent":["5",0]}},"8":{"class_type":"KSamplerSelect","inputs":{"sampler_name":"euler"}},"9":{"class_type":"SamplerCustom","inputs":{"model":["1",0],"add_noise":true,"noise_seed":42,"cfg":3.0,"positive":["6",0],"negative":["6",1],"sampler":["8",0],"sigmas":["7",0],"latent_image":["5",0]}},"10":{"class_type":"VAEDecode","inputs":{"samples":["9",0],"vae":["1",2]}},"11":{"class_type":"SaveAnimatedWEBP","inputs":{"images":["10",0],"filename_prefix":"appnz-ltxv","fps":24,"lossless":false,"quality":90,"method":"default"}}}},{"apiInputs":null,"customNodes":null,"description":"Animate a still image with LTX-Video 2B: upload a start frame, describe the motion, get 97 frames @ 24fps. Core nodes only.","downloadPath":"/api/comfy/spaces/ltx-image-to-video/download","kind":"i2v","labs":[],"minVramGb":29,"models":[{"file":"ltx-video-2b-v0.9.5.safetensors","kind":"checkpoint","name":"LTX-Video 2B 0.9.5","sizeGb":9.4,"sources":["https://huggingface.co/Lightricks/LTX-Video/resolve/main/ltx-video-2b-v0.9.5.safetensors"],"vramGb":14},{"file":"t5xxl_fp16.safetensors","kind":"clip","name":"T5-XXL fp16","sizeGb":9.8,"sources":["https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors"],"vramGb":11}],"name":"LTX-Video Image-to-Video","nodeCount":12,"openSource":null,"slug":"ltx-image-to-video","source":{"label":"ComfyUI LTX-Video examples","url":"https://github.com/comfyanonymous/ComfyUI_examples/tree/master/ltxv","license":"See source","adapted":true},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"ltx-video-2b-v0.9.5.safetensors"}},"2":{"class_type":"CLIPLoader","inputs":{"clip_name":"t5xxl_fp16.safetensors","type":"ltxv"}},"3":{"class_type":"CLIPTextEncode","_meta":{"title":"positive"},"inputs":{"text":"The scene comes to life with gentle, natural motion: soft wind, subtle parallax, realistic lighting changes, smooth cinematic camera drift","clip":["2",0]}},"4":{"class_type":"CLIPTextEncode","_meta":{"title":"negative"},"inputs":{"text":"low quality, worst quality, deformed, distorted, jittery, watermark","clip":["2",0]}},"5":{"class_type":"LoadImage","_meta":{"title":"Start frame"},"inputs":{"image":"example.png"}},"6":{"class_type":"LTXVImgToVideo","inputs":{"positive":["3",0],"negative":["4",0],"vae":["1",2],"image":["5",0],"width":768,"height":512,"length":97,"batch_size":1,"strength":1.0}},"7":{"class_type":"LTXVConditioning","inputs":{"positive":["6",0],"negative":["6",1],"frame_rate":25}},"8":{"class_type":"LTXVScheduler","inputs":{"steps":30,"max_shift":2.05,"base_shift":0.95,"stretch":true,"terminal":0.1,"latent":["6",2]}},"9":{"class_type":"KSamplerSelect","inputs":{"sampler_name":"euler"}},"10":{"class_type":"SamplerCustom","inputs":{"model":["1",0],"add_noise":true,"noise_seed":42,"cfg":3.0,"positive":["7",0],"negative":["7",1],"sampler":["9",0],"sigmas":["8",0],"latent_image":["6",2]}},"11":{"class_type":"VAEDecode","inputs":{"samples":["10",0],"vae":["1",2]}},"12":{"class_type":"SaveAnimatedWEBP","inputs":{"images":["11",0],"filename_prefix":"appnz-ltxv-i2v","fps":24,"lossless":false,"quality":90,"method":"default"}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"2","field":"image","default":"example.png","description":"Input image filename on the worker (upload first)","required":true},{"name":"prompt","type":"string","nodeId":"4","field":"text","default":"RAW photo, cinematic lighting, detailed skin texture, film grain, high detail","description":"Target look/style prompt","required":true},{"name":"denoise","type":"number","nodeId":"6","field":"denoise","default":0.55,"description":"0.3 subtle retouch, 0.7 strong restyle","required":false},{"name":"seed","type":"integer","nodeId":"6","field":"seed","default":42,"description":"Generation seed","required":false}],"customNodes":null,"description":"Photo restyle/img2img on RealVisXL V5.0: upload an image, prompt the new look, denoise 0.55 keeps composition. DPM++ 2M SDE Karras, 30 steps. Core nodes only.","downloadPath":"/api/comfy/spaces/realvisxl-img2img/download","kind":"image","labs":[],"minVramGb":14,"models":[{"file":"RealVisXL_V5.0_fp16.safetensors","kind":"checkpoint","name":"RealVisXL V5.0 fp16","notes":"latest RealVisXL photoreal SDXL finetune; DPM++ SDE/2M Karras 30+ steps","sizeGb":6.9,"sources":["https://huggingface.co/SG161222/RealVisXL_V5.0/resolve/main/RealVisXL_V5.0_fp16.safetensors","https://civitai.com/api/download/models/789646"],"vramGb":10}],"name":"RealVisXL V5 Img2Img Restyle","nodeCount":8,"openSource":null,"slug":"realvisxl-img2img","source":{"label":"ComfyUI img2img examples","url":"https://github.com/comfyanonymous/ComfyUI_examples/tree/master/img2img","license":"See source","adapted":true},"tutorials":[{"blogPath":"/blog/comfyui-image-to-image-denoise","lesson":5,"title":"Build image-to-image and master denoise"}],"verification":{"status":"gpu-verified","checkedAt":"2026-07-20","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / PyTorch 2.11 cu128 / RTX 5090 32GB","evidence":"Live hosted-worker output and machine evidence: visualbench/comfy-gpu/realvisxl-img2img.json"},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"RealVisXL_V5.0_fp16.safetensors"}},"2":{"class_type":"LoadImage","_meta":{"title":"Source image"},"inputs":{"image":"example.png"}},"3":{"class_type":"VAEEncode","inputs":{"pixels":["2",0],"vae":["1",2]}},"4":{"class_type":"CLIPTextEncode","_meta":{"title":"positive"},"inputs":{"text":"RAW photo, cinematic lighting, detailed skin texture, film grain, high detail","clip":["1",1]}},"5":{"class_type":"CLIPTextEncode","_meta":{"title":"negative"},"inputs":{"text":"bad hands, bad anatomy, ugly, deformed, blurry, lowres, watermark, cartoon","clip":["1",1]}},"6":{"class_type":"KSampler","inputs":{"seed":42,"steps":30,"cfg":5.0,"sampler_name":"dpmpp_2m_sde","scheduler":"karras","denoise":0.55,"model":["1",0],"positive":["4",0],"negative":["5",0],"latent_image":["3",0]}},"7":{"class_type":"VAEDecode","inputs":{"samples":["6",0],"vae":["1",2]}},"8":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-img2img","images":["7",0]}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"1","field":"image","default":"example.png","description":"Input image filename on the worker (upload first)","required":true}],"customNodes":null,"description":"Fast 4x image upscale with Real-ESRGAN x4plus: upload an image, get a 4x super-resolved PNG. No diffusion, runs on small GPUs. Core nodes only.","downloadPath":"/api/comfy/spaces/image-upscale/download","kind":"image","labs":[],"minVramGb":8,"models":[{"file":"RealESRGAN_x4plus.pth","kind":"upscaler","name":"RealESRGAN x4plus","notes":"also github.com/xinntao/Real-ESRGAN releases","sizeGb":0.07,"sources":["https://huggingface.co/lllyasviel/Annotators/resolve/main/RealESRGAN_x4plus.pth"],"vramGb":2}],"name":"Real-ESRGAN 4x Upscale","nodeCount":4,"openSource":null,"slug":"image-upscale","source":{"label":"ComfyUI upscale examples","url":"https://github.com/comfyanonymous/ComfyUI_examples/tree/master/upscale_models","license":"See source","adapted":true},"tutorials":[{"blogPath":"/blog/comfyui-troubleshooting-quick-fix","lesson":10,"title":"Debug any broken workflow"}],"verification":{"status":"gpu-verified","checkedAt":"2026-07-20","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / PyTorch 2.11 cu128 / RTX 5090 32GB","evidence":"Live hosted-worker output and machine evidence: visualbench/comfy-gpu/image-upscale.json"},"workflow":{"1":{"class_type":"LoadImage","_meta":{"title":"Source image"},"inputs":{"image":"example.png"}},"2":{"class_type":"UpscaleModelLoader","inputs":{"model_name":"RealESRGAN_x4plus.pth"}},"3":{"class_type":"ImageUpscaleWithModel","inputs":{"upscale_model":["2",0],"image":["1",0]}},"4":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-upscale","images":["3",0]}}}},{"apiInputs":null,"customNodes":null,"description":"Restyle an image while keeping its structure: Canny edges + SDXL ControlNet over RealVisXL V5.0. Prompt sets the target style. Core nodes only.","downloadPath":"/api/comfy/spaces/sdxl-style-transfer/download","kind":"style-transfer","labs":[],"minVramGb":18,"models":[{"file":"RealVisXL_V5.0_fp16.safetensors","kind":"checkpoint","name":"RealVisXL V5.0 fp16","notes":"latest RealVisXL photoreal SDXL finetune; DPM++ SDE/2M Karras 30+ steps","sizeGb":6.9,"sources":["https://huggingface.co/SG161222/RealVisXL_V5.0/resolve/main/RealVisXL_V5.0_fp16.safetensors","https://civitai.com/api/download/models/789646"],"vramGb":10},{"file":"controlnet-canny-sdxl-1.0.safetensors","kind":"controlnet","name":"ControlNet SDXL Canny","notes":"Proteus line-style transfer uses this over the SDXL pipe","sizeGb":2.5,"sources":["https://huggingface.co/diffusers/controlnet-canny-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"],"vramGb":4}],"name":"SDXL ControlNet Style Transfer","nodeCount":11,"openSource":null,"slug":"sdxl-style-transfer","source":{"label":"ComfyUI ControlNet examples","url":"https://github.com/comfyanonymous/ComfyUI_examples/tree/master/controlnet","license":"See source","adapted":true},"tutorials":[{"blogPath":"/blog/comfyui-controlnet-composition","lesson":7,"title":"Control composition with ControlNet"}],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"RealVisXL_V5.0_fp16.safetensors"}},"2":{"class_type":"LoadImage","_meta":{"title":"Source image"},"inputs":{"image":"example.png"}},"3":{"class_type":"Canny","inputs":{"image":["2",0],"low_threshold":0.3,"high_threshold":0.7}},"4":{"class_type":"ControlNetLoader","inputs":{"control_net_name":"controlnet-canny-sdxl-1.0.safetensors"}},"5":{"class_type":"CLIPTextEncode","_meta":{"title":"positive"},"inputs":{"text":"watercolor painting, soft pastel palette, loose brush strokes, art print","clip":["1",1]}},"6":{"class_type":"CLIPTextEncode","_meta":{"title":"negative"},"inputs":{"text":"photo, photorealistic, harsh shadows, lowres, watermark","clip":["1",1]}},"7":{"class_type":"ControlNetApplyAdvanced","inputs":{"positive":["5",0],"negative":["6",0],"control_net":["4",0],"image":["3",0],"strength":0.7,"start_percent":0.0,"end_percent":1.0}},"8":{"class_type":"EmptyLatentImage","inputs":{"width":1024,"height":1024,"batch_size":1}},"9":{"class_type":"KSampler","inputs":{"seed":7,"steps":30,"cfg":6.0,"sampler_name":"dpmpp_2m","scheduler":"karras","denoise":1.0,"model":["1",0],"positive":["7",0],"negative":["7",1],"latent_image":["8",0]}},"10":{"class_type":"VAEDecode","inputs":{"samples":["9",0],"vae":["1",2]}},"11":{"class_type":"SaveImage","inputs":{"filename_prefix":"appnz-style","images":["10",0]}}}},{"apiInputs":[{"name":"video","type":"video","nodeId":"6","field":"file","description":"Public MP4/WebM URL used as the motion/control video","required":true},{"name":"reference_image","type":"image","nodeId":"9","field":"image","description":"Public image URL guiding the target look","required":true},{"name":"prompt","type":"string","nodeId":"4","field":"text","default":"cinematic restyle, preserve the source motion, natural detail, coherent movement","required":true},{"name":"negative_prompt","type":"string","nodeId":"5","field":"text","default":"jitter, flicker, blurry, deformed, low quality, watermark, static","required":false},{"name":"seed","type":"integer","nodeId":"12","field":"seed","default":42,"required":false},{"name":"steps","type":"integer","nodeId":"12","field":"steps","default":20,"required":false}],"customNodes":null,"description":"GPU video restyling with native Wan2.1 VACE 1.3B: a control video preserves motion while a reference image and prompt guide the new look. Short 384px/17-frame defaults make the first smoke run practical.","downloadPath":"/api/comfy/spaces/wan-vace-video-to-video/download","kind":"v2v","labs":[],"minVramGb":21,"models":[{"file":"wan2.1_vace_1.3B_fp16.safetensors","kind":"unet","name":"Wan2.1 VACE 1.3B","notes":"native ComfyUI video-to-video control model; 480p-capable VACE variant","sizeGb":4,"sources":["https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/diffusion_models/wan2.1_vace_1.3B_fp16.safetensors"],"vramGb":8},{"file":"umt5_xxl_fp8_e4m3fn_scaled.safetensors","kind":"clip","name":"UMT5-XXL fp8 (Wan)","sizeGb":6.6,"sources":["https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors"],"vramGb":8},{"file":"wan_2.1_vae.safetensors","kind":"vae","name":"Wan2.1 VAE","sizeGb":0.25,"sources":["https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/vae/wan_2.1_vae.safetensors"],"vramGb":1}],"name":"Wan VACE Video-to-Video","nodeCount":18,"openSource":null,"slug":"wan-vace-video-to-video","source":{"label":"Official Wan VACE V2V template","url":"https://github.com/Comfy-Org/workflow_templates/blob/main/templates/video_wan_vace_14B_v2v.json","license":"MIT","adapted":true},"tutorials":[],"verification":{"status":"gpu-verified","checkedAt":"2026-07-20","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / PyTorch 2.11 cu128 / RTX 5090 32GB","evidence":"Live hosted-worker output and machine evidence: visualbench/comfy-gpu/wan-vace-video-to-video.json"},"workflow":{"1":{"class_type":"UNETLoader","inputs":{"unet_name":"wan2.1_vace_1.3B_fp16.safetensors","weight_dtype":"default"}},"2":{"class_type":"CLIPLoader","inputs":{"clip_name":"umt5_xxl_fp8_e4m3fn_scaled.safetensors","type":"wan","device":"default"}},"3":{"class_type":"VAELoader","inputs":{"vae_name":"wan_2.1_vae.safetensors"}},"4":{"class_type":"CLIPTextEncode","_meta":{"title":"positive"},"inputs":{"text":"cinematic restyle, preserve the source motion, natural detail, coherent movement","clip":["2",0]}},"5":{"class_type":"CLIPTextEncode","_meta":{"title":"negative"},"inputs":{"text":"jitter, flicker, blurry, deformed, low quality, watermark, static","clip":["2",0]}},"6":{"class_type":"LoadVideo","_meta":{"title":"Control video"},"inputs":{"file":"control.mp4"}},"7":{"class_type":"GetVideoComponents","inputs":{"video":["6",0]}},"8":{"class_type":"ImageFromBatch","inputs":{"image":["7",0],"batch_index":0,"length":17}},"9":{"class_type":"LoadImage","_meta":{"title":"Optional reference look"},"inputs":{"image":"reference.jpg"}},"10":{"class_type":"WanVaceToVideo","inputs":{"positive":["4",0],"negative":["5",0],"vae":["3",0],"width":384,"height":384,"length":17,"batch_size":1,"strength":1.0,"control_video":["18",0],"reference_image":["9",0]}},"11":{"class_type":"ModelSamplingSD3","inputs":{"model":["1",0],"shift":8.0}},"12":{"class_type":"KSampler","inputs":{"model":["11",0],"positive":["10",0],"negative":["10",1],"latent_image":["10",2],"seed":42,"steps":20,"cfg":6.0,"sampler_name":"uni_pc","scheduler":"simple","denoise":1.0}},"13":{"class_type":"TrimVideoLatent","inputs":{"samples":["12",0],"trim_amount":["10",3]}},"14":{"class_type":"VAEDecode","inputs":{"samples":["13",0],"vae":["3",0]}},"15":{"class_type":"CreateVideo","inputs":{"images":["14",0],"fps":16}},"16":{"class_type":"SaveVideo","inputs":{"video":["15",0],"filename_prefix":"video/appnz-vace-v2v","format":"auto","codec":"auto"}},"17":{"class_type":"ImageScale","inputs":{"image":["8",0],"upscale_method":"bicubic","width":384,"height":384,"crop":"center"}},"18":{"class_type":"Canny","inputs":{"image":["17",0],"low_threshold":0.4,"high_threshold":0.8}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"1","field":"prompt","required":true},{"name":"duration_seconds","type":"integer","nodeId":"1","field":"duration_seconds","default":6,"required":false},{"name":"model","type":"string","nodeId":"1","field":"model","default":"elevenlabs-sound-effects","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Generate and save a short production sound effect through the open app.nz audio node. Prompt fields emphasize source, action, material, space, timing, and the absence of music.","downloadPath":"/api/comfy/spaces/appnz-sound-effects/download","kind":"sfx","labs":[{"blogPath":"/blog/comfyui-lab-sound-effects","lab":1,"title":"Design sound effects from first principles"}],"minVramGb":0,"models":[],"name":"Prompted Sound Effects","nodeCount":2,"openSource":null,"slug":"appnz-sound-effects","source":{"label":"Open app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZSoundFX","_meta":{"title":"Generate a production sound effect"},"inputs":{"prompt":"A heavy futuristic airlock closes, layered metal impact, short hydraulic release, dry studio recording, no music","duration_seconds":6,"model":"elevenlabs-sound-effects"}},"2":{"class_type":"SaveAudio","inputs":{"audio":["1",1],"filename_prefix":"appnz-sfx"}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"1","field":"prompt","required":true},{"name":"duration_seconds","type":"integer","nodeId":"1","field":"duration_seconds","default":30,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"A minimal hosted music graph for cues, beds, and loops. It keeps musical role, tempo, density, instrumentation, vocals, and ending behavior visible in the prompt.","downloadPath":"/api/comfy/spaces/appnz-music-bed/download","kind":"music","labs":[{"blogPath":"/blog/comfyui-lab-music-beds","lab":2,"title":"Build loopable music beds"}],"minVramGb":0,"models":[],"name":"Loopable Music Bed","nodeCount":2,"openSource":null,"slug":"appnz-music-bed","source":{"label":"Open app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZMusicGen","_meta":{"title":"Generate a loopable music bed"},"inputs":{"prompt":"Instrumental downtempo electronic bed, 92 BPM, warm analog bass, restrained percussion, no vocals, clean loop ending","duration_seconds":30}},"2":{"class_type":"SaveAudio","inputs":{"audio":["1",1],"filename_prefix":"appnz-music-bed"}}}},{"apiInputs":[{"name":"text","type":"string","nodeId":"1","field":"text","required":true},{"name":"model","type":"string","nodeId":"1","field":"model","default":"appnz-tts","required":false},{"name":"voice","type":"string","nodeId":"1","field":"voice","default":"default","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Generate narration through the open app.nz TTS node and preserve the audio as a normal ComfyUI AUDIO value for downstream character or editing nodes.","downloadPath":"/api/comfy/spaces/appnz-hosted-tts/download","kind":"tts","labs":[{"blogPath":"/blog/comfyui-lab-voice-narration","lab":3,"title":"Create clean narration and reusable voices"}],"minVramGb":0,"models":[],"name":"Hosted Voice Narration","nodeCount":2,"openSource":null,"slug":"appnz-hosted-tts","source":{"label":"Open app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZTTS","_meta":{"title":"Generate narration"},"inputs":{"text":"Every graph is a small program. Data moves along edges; each node performs one inspectable transformation.","model":"appnz-tts","voice":"default"}},"2":{"class_type":"SaveAudio","inputs":{"audio":["1",1],"filename_prefix":"appnz-narration"}}}},{"apiInputs":[{"name":"text","type":"string","nodeId":"1","field":"text","required":true},{"name":"template","type":"string","nodeId":"1","field":"template","default":"pocket-tts","required":false},{"name":"voice","type":"string","nodeId":"1","field":"voice","default":"alba","required":false},{"name":"format","type":"string","nodeId":"1","field":"format","default":"wav","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"A Comfy graph that names the open pocket-tts template instead of a deployment id. app.nz atomically ensures one Cog, cold-starts it on demand, reuses it across runs, and returns the worker to zero after 60 idle seconds.","downloadPath":"/api/comfy/spaces/cog-pocket-tts-autoscale/download","kind":"tts","labs":[],"minVramGb":0,"models":[],"name":"Autoscaling Open TTS Cog","nodeCount":1,"openSource":[{"label":"app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"template ensure, queue polling, and Comfy AUDIO adapter"},{"label":"pocket-tts Cog","url":"https://github.com/lee101/pocket-tts-cog","license":"MIT adapter","role":"Cog-compatible audio image"},{"label":"Kyutai pocket-tts","url":"https://github.com/kyutai-labs/pocket-tts","license":"MIT code; CC-BY-4.0 weights; voice licenses vary","role":"100M-parameter upstream TTS"}],"slug":"cog-pocket-tts-autoscale","source":{"label":"Open app.nz Cog + Comfy bridge","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"inputs":{"text":"Kia ora from a ComfyUI graph that ensures its own open audio Cog, runs it, and lets the worker return to zero.","template":"pocket-tts","voice":"alba","format":"wav","timeout_seconds":600},"class_type":"AppNZCogAudio","_meta":{"title":"Autoscaling open TTS Cog"}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"1","field":"prompt","required":true},{"name":"negative_prompt","type":"string","nodeId":"1","field":"negative_prompt","required":false},{"name":"width","type":"integer","nodeId":"1","field":"width","default":832,"required":false},{"name":"height","type":"integer","nodeId":"1","field":"height","default":1216,"required":false},{"name":"steps","type":"integer","nodeId":"1","field":"steps","default":28,"required":false},{"name":"guidance_scale","type":"number","nodeId":"1","field":"guidance_scale","default":4,"required":false},{"name":"seed","type":"integer","nodeId":"1","field":"seed","default":-1,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"A Comfy graph for the Anima-2.9B native Cog. The first run atomically ensures a reusable deployment, queues on RunPod Serverless, and returns a native IMAGE before the worker returns to zero.","downloadPath":"/api/comfy/spaces/cog-anima-2.9b-autoscale/download","kind":"image","labs":[],"minVramGb":0,"models":[],"name":"Anima 2.9B Autoscaling Studio","nodeCount":1,"openSource":[{"label":"Anima native Cog","url":"https://github.com/lee101/anima-omniserve-native","license":"Adapter source; model weights excluded","role":"BF16/TF32/compile runtime and RunPod handler"},{"label":"Anima-2.9B model","url":"https://huggingface.co/Gazingstars123/Anima-2.9B","license":"CircleStone Labs commercial license","role":"2.9B expanded diffusion transformer weights"},{"label":"app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"template ensure, queue polling, and native IMAGE adapter"}],"slug":"cog-anima-2.9b-autoscale","source":{"label":"Anima native Cog + app.nz Comfy bridge","url":"https://github.com/lee101/anima-omniserve-native","license":"Adapter source; CircleStone commercial license","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"inputs":{"prompt":"masterpiece, best quality, 1girl, wind-swept cape, luminous city at dusk, detailed background, dramatic illustration","template":"anima-2.9b","negative_prompt":"low quality, blurry, malformed hands","width":832,"height":1216,"steps":28,"guidance_scale":4.0,"seed":-1,"output_format":"webp","timeout_seconds":900},"class_type":"AppNZCogImage","_meta":{"title":"Anima 2.9B · autoscaling image Cog"}}}},{"apiInputs":[{"name":"character","type":"string","nodeId":"1","field":"subject","required":true},{"name":"script","type":"string","nodeId":"3","field":"text","required":true},{"name":"cog_id","type":"string","nodeId":"4","field":"cog_id","default":"liveavatar","description":"ID of a LiveAvatar Cog deployed in the same app.nz account","required":false},{"name":"motion_prompt","type":"string","nodeId":"4","field":"prompt","required":false},{"name":"seed","type":"integer","nodeId":"4","field":"seed","default":42,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"An end-to-end character graph: first-principles portrait prompt, image generation, TTS, and a consent-aware handoff to an open LiveAvatar Cog deployment.","downloadPath":"/api/comfy/spaces/liveavatar-talking-character/download","kind":"character","labs":[{"blogPath":"/blog/comfyui-lab-talking-character","lab":4,"title":"Build a talking character pipeline"}],"minVramGb":80,"models":[],"name":"Portrait + Voice to Talking Character","nodeCount":4,"openSource":[{"label":"LiveAvatar app.nz runtime","url":"https://github.com/lee101/liveavatar-app-nz","license":"Apache-2.0","role":"audio-driven character runtime"},{"label":"Kling LivePortrait","url":"https://github.com/KlingAIResearch/LivePortrait","license":"Apache-2.0","role":"portrait animation reference"},{"label":"EchoMimic","url":"https://github.com/antgroup/echomimic","license":"See source","role":"alternative audio-driven portrait research"}],"slug":"liveavatar-talking-character","source":{"label":"LiveAvatar app.nz","url":"https://github.com/lee101/liveavatar-app-nz","license":"Apache-2.0","adapted":true},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZPromptComposer","_meta":{"title":"Separate character content from visual style"},"inputs":{"subject":"friendly robot field reporter, centered portrait, visible shoulders, mouth unobstructed","composition":"front-facing medium close-up, simple background","style":"polished cinematic 3D character design","lighting":"soft key light and cool rim light","palette":"graphite, silver, cyan accents","negative":"text, watermark, face covering, profile view, duplicate subject"}},"2":{"class_type":"AppNZImageGen","inputs":{"prompt":["1",0],"model":"z-image-turbo","size":"1024x1024"}},"3":{"class_type":"AppNZTTS","inputs":{"text":"Welcome to the field lab. Today we are turning one portrait and one voice into a reusable talking character pipeline.","model":"appnz-tts","voice":"default"}},"4":{"class_type":"AppNZLiveAvatar","_meta":{"title":"Animate portrait from generated speech"},"inputs":{"image":["2",0],"audio":["3",1],"cog_id":"liveavatar","prompt":"Natural speech, confident presenter gestures, locked camera, stable identity and lighting.","quality":"standard","num_clips":1,"steps":4,"seed":42}}}},{"apiInputs":[{"name":"audio","type":"string","nodeId":"1","field":"audio","required":true},{"name":"mode","type":"string","nodeId":"2","field":"mode","default":"bars","required":false},{"name":"fps","type":"integer","nodeId":"2","field":"fps","default":12,"required":false},{"name":"seconds","type":"number","nodeId":"2","field":"seconds","default":6,"required":false},{"name":"color","type":"string","nodeId":"2","field":"color","default":"70,210,255","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Turn a local AUDIO waveform into synchronized waveform, spectrum-bar, or pulse frames with an MIT node, then save a real animated WebP.","downloadPath":"/api/comfy/spaces/audio-reactive-visualizer/download","kind":"reactive","labs":[{"blogPath":"/blog/comfyui-lab-audio-reactive","lab":5,"title":"Turn sound into reactive motion"}],"minVramGb":0,"models":[],"name":"Audio-Reactive Visualizer","nodeCount":3,"openSource":[{"label":"app.nz reactive node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"minimal waveform/spectrum renderer"},{"label":"RyanOnTheInside","url":"https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside","license":"MIT","role":"advanced audio, MIDI, motion, particles, and masks"},{"label":"AnimateDiff Evolved","url":"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved","license":"Apache-2.0","role":"diffusion motion and schedulable animation"}],"slug":"audio-reactive-visualizer","source":{"label":"Open app.nz reactive node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadAudio","_meta":{"title":"Music or speech input"},"inputs":{"audio":"input/track.wav"}},"2":{"class_type":"AppNZAudioReactive","_meta":{"title":"Map short-time spectrum energy to frames"},"inputs":{"audio":["1",0],"mode":"bars","fps":12,"seconds":6.0,"width":768,"height":512,"color":"70,210,255","background":"7,9,14"}},"3":{"class_type":"SaveAnimatedWEBP","inputs":{"images":["2",0],"filename_prefix":"appnz-audio-reactive","fps":12,"lossless":false,"quality":90,"method":"default"}}}},{"apiInputs":[{"name":"subject","type":"string","nodeId":"1","field":"subject","required":true},{"name":"style","type":"string","nodeId":"1","field":"style","required":false},{"name":"palette","type":"string","nodeId":"1","field":"palette","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Compose character content, composition, style, light, and palette as separate inspectable fields, then generate a production-oriented turnaround sheet.","downloadPath":"/api/comfy/spaces/character-concept-sheet/download","kind":"style-system","labs":[{"blogPath":"/blog/comfyui-lab-style-systems","lab":6,"title":"Build style as a system"}],"minVramGb":0,"models":[],"name":"Character Concept Sheet","nodeCount":3,"openSource":[{"label":"ComfyUI IPAdapter","url":"https://github.com/comfyorg/comfyui-ipadapter","license":"GPL-3.0","role":"reference-image style and identity conditioning"},{"label":"app.nz prompt composer","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"first-principles prompt fields"}],"slug":"character-concept-sheet","source":{"label":"Open app.nz prompt node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZPromptComposer","_meta":{"title":"Character system prompt"},"inputs":{"subject":"same lunar botanist character, front view and side view, full body, accessory callouts","composition":"clean character turnaround sheet, evenly spaced panels","style":"production animation concept art, precise shape language","lighting":"neutral soft studio light","palette":"sage green, moon gray, small coral accents","negative":"photorealism, text, watermark, merged panels, extra limbs"}},"2":{"class_type":"AppNZImageGen","inputs":{"prompt":["1",0],"model":"z-image-turbo","size":"1536x1024"}},"3":{"class_type":"SaveImage","inputs":{"images":["2",0],"filename_prefix":"appnz-character-sheet"}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"1","field":"image","required":true},{"name":"expression","type":"string","nodeId":"2","field":"expr","required":true},{"name":"time","type":"number","nodeId":"2","field":"t","default":0,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"An inspectable per-pixel transform using channels and coordinate math. Useful for color systems, reactive looks, and proving when diffusion is unnecessary.","downloadPath":"/api/comfy/spaces/shader-style-lab/download","kind":"style-system","labs":[{"blogPath":"/blog/comfyui-lab-shaders","lab":7,"title":"Write inspectable shader looks"}],"minVramGb":0,"models":[],"name":"Deterministic Shader Style Lab","nodeCount":3,"openSource":[{"label":"app.nz shader node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"deterministic pixel expressions"},{"label":"RyanOnTheInside","url":"https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside","license":"MIT","role":"advanced reactive effects and particle systems"}],"slug":"shader-style-lab","source":{"label":"Open app.nz shader node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadImage","_meta":{"title":"Input frame"},"inputs":{"image":"input.png"}},"2":{"class_type":"AppNZShader","_meta":{"title":"Inspectable per-pixel color transform"},"inputs":{"images":["1",0],"expr":"(clamp(r*0.82 + b*0.22,0,1), clamp(g*0.94 + r*0.08,0,1), clamp(b*1.12 + 0.04,0,1))","t":0.0}},"3":{"class_type":"SaveImage","inputs":{"images":["2",0],"filename_prefix":"appnz-shader-style"}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"1","field":"image","required":true},{"name":"code","type":"string","nodeId":"2","field":"code","required":true}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Prototype a tensor transform against a frame batch, with shape and range checks. Promote stable experiments into a versioned node before production.","downloadPath":"/api/comfy/spaces/python-frame-transform/download","kind":"reactive","labs":[{"blogPath":"/blog/comfyui-lab-frame-code","lab":8,"title":"Prototype frame transforms safely"}],"minVramGb":0,"models":[],"name":"Python Frame Transform","nodeCount":3,"openSource":null,"slug":"python-frame-transform","source":{"label":"Open app.nz frame node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadImage","inputs":{"image":"input.png"}},"2":{"class_type":"AppNZPythonFrameBlock","_meta":{"title":"Local, inspectable frame transform"},"inputs":{"images":["1",0],"code":"grayscale-pop"}},"3":{"class_type":"SaveImage","inputs":{"images":["2",0],"filename_prefix":"appnz-frame-transform"}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"1","field":"image","required":true},{"name":"prompt","type":"string","nodeId":"2","field":"prompt","required":true},{"name":"conditioning_scale","type":"number","nodeId":"2","field":"conditioning_scale","default":0.75,"required":false},{"name":"guidance_scale","type":"number","nodeId":"2","field":"guidance_scale","default":5,"required":false},{"name":"seed","type":"integer","nodeId":"2","field":"seed","default":88,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Extract line structure from a sketch and guide Z-Image through the open CuteDSL-aware node, with separate control and text guidance strengths.","downloadPath":"/api/comfy/spaces/zimage-line-control/download","kind":"style-transfer","labs":[{"blogPath":"/blog/comfyui-lab-line-control","lab":9,"title":"Control Z-Image with line structure"}],"minVramGb":20,"models":[{"file":"z_image_turbo_bf16.safetensors","kind":"unet","name":"Z-Image-Turbo (bf16)","notes":"cutedsl CuteZImage accelerated path; diffusers repo Tongyi-MAI/Z-Image-Turbo","sizeGb":12,"sources":["https://huggingface.co/Comfy-Org/z_image_turbo/resolve/main/split_files/diffusion_models/z_image_turbo_bf16.safetensors"],"vramGb":16}],"name":"CuteDSL Z-Image Line Control","nodeCount":3,"openSource":[{"label":"app.nz CuteDSL nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"accelerated Z-Image and line control"}],"slug":"zimage-line-control","source":{"label":"Open app.nz CuteDSL node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT; model terms at source","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadImage","_meta":{"title":"Sketch or line reference"},"inputs":{"image":"input/sketch.png"}},"2":{"class_type":"CuteZImageControlLine","_meta":{"title":"CuteDSL Z-Image line control"},"inputs":{"image":["1",0],"prompt":"architectural concept art, warm rammed-earth pavilion, precise material detail, late afternoon","steps":20,"seed":88,"conditioning_scale":0.75,"guidance_scale":5.0}},"3":{"class_type":"SaveImage","inputs":{"images":["2",0],"filename_prefix":"appnz-zimage-line"}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"1","field":"image","required":true},{"name":"prompt","type":"string","nodeId":"2","field":"prompt","required":true},{"name":"strength","type":"number","nodeId":"2","field":"strength","default":0.6,"required":false},{"name":"steps","type":"integer","nodeId":"2","field":"steps","default":30,"required":false},{"name":"seed","type":"integer","nodeId":"2","field":"seed","default":314,"required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"A compact open-node alternative to the larger core ControlNet graph: structure comes from Canny while a Proteus SDXL pipeline solves appearance.","downloadPath":"/api/comfy/spaces/proteus-style-node/download","kind":"style-transfer","labs":[{"blogPath":"/blog/comfyui-lab-proteus-style","lab":10,"title":"Restyle without losing structure"}],"minVramGb":18,"models":[{"file":"proteusV0.4.safetensors","kind":"checkpoint","name":"Proteus V0.4","notes":"GPL-3.0 model; recommended CFG 4-6, 20+ steps, DPM++ 2M SDE Karras","sizeGb":6.9,"sources":["https://huggingface.co/dataautogpt3/ProteusV0.4/resolve/main/ProteusV0.4.safetensors"],"vramGb":10},{"file":"controlnet-canny-sdxl-1.0.safetensors","kind":"controlnet","name":"ControlNet SDXL Canny","notes":"Proteus line-style transfer uses this over the SDXL pipe","sizeGb":2.5,"sources":["https://huggingface.co/diffusers/controlnet-canny-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"],"vramGb":4}],"name":"Proteus Canny Style Node","nodeCount":3,"openSource":[{"label":"app.nz Proteus nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT","role":"compact Proteus ControlNet integration"}],"slug":"proteus-style-node","source":{"label":"Open app.nz Proteus node","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT; model terms at source","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadImage","_meta":{"title":"Structure reference"},"inputs":{"image":"input/reference.png"}},"2":{"class_type":"ProteusStyleTransfer","_meta":{"title":"Proteus + Canny ControlNet"},"inputs":{"image":["1",0],"prompt":"editorial gouache illustration, restrained shapes, visible paper grain, cobalt and ochre palette","strength":0.6,"steps":30,"seed":314}},"3":{"class_type":"SaveImage","inputs":{"images":["2",0],"filename_prefix":"appnz-proteus-style"}}}},{"apiInputs":[{"name":"prompt","type":"string","nodeId":"1","field":"prompt","required":true},{"name":"model","type":"string","nodeId":"1","field":"model","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Generate a downloadable GLB from a geometry-oriented object prompt through the open app.nz Comfy node.","downloadPath":"/api/comfy/spaces/appnz-text-to-3d/download","kind":"3d","labs":[{"blogPath":"/blog/comfyui-lab-text-to-3d","lab":11,"title":"Design a text-to-3D handoff"}],"minVramGb":0,"models":[],"name":"Text to 3D Asset","nodeCount":1,"openSource":null,"slug":"appnz-text-to-3d","source":{"label":"Open app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT; provider model terms apply","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"AppNZTextTo3D","_meta":{"title":"Text to downloadable GLB"},"inputs":{"prompt":"A compact retro field radio with one antenna, large tactile knobs, watertight hard-surface design, isolated object","model":""}}}},{"apiInputs":[{"name":"image","type":"string","nodeId":"1","field":"image","required":true},{"name":"model","type":"string","nodeId":"2","field":"model","required":false}],"customNodes":["https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes"],"description":"Send a clean object reference through the open app.nz node and save a downloadable GLB, then inspect silhouette, topology, scale, and materials.","downloadPath":"/api/comfy/spaces/appnz-image-to-3d/download","kind":"3d","labs":[{"blogPath":"/blog/comfyui-lab-image-to-3d","lab":12,"title":"Turn a concept image into a 3D asset"}],"minVramGb":0,"models":[],"name":"Reference Image to 3D Asset","nodeCount":2,"openSource":null,"slug":"appnz-image-to-3d","source":{"label":"Open app.nz Comfy nodes","url":"https://github.com/lee101/app-site/tree/master/comfy-worker/custom_nodes/appnz_nodes","license":"MIT; provider model terms apply","adapted":false},"tutorials":[],"verification":{"status":"api-validated","checkedAt":"2026-07-22","runtime":"ComfyUI v0.28.0 / Python 3.12.11 / CUDA 12.8","evidence":"Workflow JSON parsed; node allowlist, model sources, API inputs, and GPU fit validated in server tests."},"workflow":{"1":{"class_type":"LoadImage","_meta":{"title":"Clean object reference"},"inputs":{"image":"input/object.png"}},"2":{"class_type":"AppNZImageTo3D","_meta":{"title":"Reference image to downloadable GLB"},"inputs":{"image":["1",0],"model":""}}}}],"success":true}
