wan_video 5B q8 verified clean on M3 Ultra (148.7s) and M2 Max (503.7s), identical 9.2GB max RSS on both; 81GB 'footprint' on m2max identified as MLX opportunistic cache, not demand. Frame-identical output at same seed across machines. HARDWARE.md gains wan_video and ardy_motion rows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
129 lines
4.1 KiB
JSON
129 lines
4.1 KiB
JSON
{
|
|
"id": "comfyui_sd",
|
|
"name": "Stable Diffusion + LoRA (local, ComfyUI)",
|
|
"category": "generate",
|
|
"description": "Prompt -> image via local SD/SDXL checkpoints + LoRAs (ComfyUI on Metal). Stacks multiple LoRAs and supports ControlNet (recolour a garment into N colourways with an identical silhouette). Cannot load FLUX/Z-Image LoRAs \u2014 those go to flux_local.",
|
|
"accepts": [
|
|
"image"
|
|
],
|
|
"produces": [
|
|
"image"
|
|
],
|
|
"resources": "gpu",
|
|
"entry": "run.py",
|
|
"params_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"prompt": {
|
|
"type": "string",
|
|
"default": "",
|
|
"description": "Positive prompt (put LoRA trigger words early)"
|
|
},
|
|
"negative": {
|
|
"type": "string",
|
|
"default": "(worst quality, low quality:1.4), blurry, jpeg artifacts, watermark, text, deformed, bad anatomy, extra fingers",
|
|
"description": "Negative prompt (ignored at cfg 1.0 on Turbo/Lightning)"
|
|
},
|
|
"checkpoint": {
|
|
"type": "string",
|
|
"default": "Hyper_Realism_1.2_fp16.safetensors",
|
|
"description": "SD1.5 = Hyper_Realism_1.2_fp16 (the only one LoRAs work with); SDXL = bigLust_v16 / sd_xl_base_1.0"
|
|
},
|
|
"lora": {
|
|
"type": [
|
|
"string",
|
|
"array"
|
|
],
|
|
"default": "",
|
|
"description": "LoRA filename, or a LIST to stack them (style + texture together). Each entry may carry its own weight as 'name=0.6'. A LoRA on the wrong base architecture is a SILENT no-op \u2014 filenames lie, check metadata."
|
|
},
|
|
"lora_weight": {
|
|
"type": [
|
|
"number",
|
|
"array"
|
|
],
|
|
"default": 0.8,
|
|
"minimum": 0,
|
|
"maximum": 2,
|
|
"description": "Weight, or a list matching `lora` order. Per-entry 'name=0.6' wins."
|
|
},
|
|
"clip_skip": {
|
|
"type": "integer",
|
|
"enum": [
|
|
1,
|
|
2
|
|
],
|
|
"default": 2,
|
|
"description": "2 for all the local SD1.5 LoRAs (their training config)"
|
|
},
|
|
"width": {
|
|
"type": "integer",
|
|
"default": 512,
|
|
"description": "SD1.5: 512 (768 max). SDXL: 1024. Turbo: 512"
|
|
},
|
|
"height": {
|
|
"type": "integer",
|
|
"default": 512,
|
|
"description": "SD1.5: 512/768. SDXL: 1024"
|
|
},
|
|
"steps": {
|
|
"type": "integer",
|
|
"default": 25,
|
|
"description": "SD1.5/SDXL: 25-30. Turbo: 1-4. Lightning: 8"
|
|
},
|
|
"cfg": {
|
|
"type": "number",
|
|
"default": 7.0,
|
|
"description": "SD1.5/SDXL: 5-8. Turbo: 1.0. Lightning: 1-2 (wrong cfg = fried image)"
|
|
},
|
|
"sampler": {
|
|
"type": "string",
|
|
"default": "dpmpp_2m",
|
|
"description": "dpmpp_2m (+karras) is the workhorse; euler for Turbo/Lightning"
|
|
},
|
|
"scheduler": {
|
|
"type": "string",
|
|
"default": "karras",
|
|
"description": "karras normally; sgm_uniform for Lightning"
|
|
},
|
|
"seed": {
|
|
"type": "integer",
|
|
"default": -1,
|
|
"description": "-1 = random. Fix it when tuning LoRA weight."
|
|
},
|
|
"batch": {
|
|
"type": "integer",
|
|
"default": 1,
|
|
"minimum": 1,
|
|
"maximum": 16,
|
|
"description": "Images per job \u2014 brute-force seeds and pick"
|
|
},
|
|
"controlnet": {
|
|
"type": "string",
|
|
"default": "",
|
|
"description": "ControlNet model filename. Needs a control image passed as the job's input asset. Recolor holds the silhouette fixed while changing colour \u2014 N colourways of one garment sharing a byte-identical cut-out alpha."
|
|
},
|
|
"controlnet_strength": {
|
|
"type": "number",
|
|
"default": 1.0,
|
|
"minimum": 0,
|
|
"maximum": 2,
|
|
"description": "ControlNet conditioning strength"
|
|
},
|
|
"controlnet_start": {
|
|
"type": "number",
|
|
"default": 0.0,
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"description": "Fraction of sampling at which conditioning starts"
|
|
},
|
|
"controlnet_end": {
|
|
"type": "number",
|
|
"default": 1.0,
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"description": "Fraction of sampling at which conditioning ends"
|
|
}
|
|
}
|
|
}
|
|
} |