diff --git a/models/comfyui/fix_workflows.py b/models/comfyui/fix_workflows.py new file mode 100755 index 0000000..d4710ba --- /dev/null +++ b/models/comfyui/fix_workflows.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python3 +""" +ComfyUI Workflow Schema Fixer + +Fixes missing schema fields in ComfyUI workflow JSON files: +- Adds missing 'flags', 'order', 'mode', 'properties', 'size' fields to nodes +- Reconstructs 'inputs' and 'outputs' arrays from links +- Builds complete 'links' array +- Updates outdated node names + +Usage: + python3 fix_workflows.py +""" + +import json +import sys +from pathlib import Path +from typing import Dict, List, Any + +# Node name mapping (old → new) +NODE_NAME_MAPPING = { + 'AnimateDiffLoader': 'AnimateDiffLoaderV1', + 'VHSVideoCombine': 'VHS_VideoCombine', + 'PreviewVideo': None, # Remove - use VHS_VideoCombine with preview enabled + 'SaveVideo': None, # Remove - use VHS_VideoCombine + 'IPAdapterApply': 'IPAdapter', + 'IPAdapterApplyFace': 'IPAdapterFaceID', +} + +# Default node sizes by category +NODE_SIZES = { + 'Loader': {'0': 350, '1': 100}, + 'Sampler': {'0': 315, '1': 474}, + 'Encoder': {'0': 400, '1': 200}, + 'Default': {'0': 315, '1': 100}, +} + +def get_node_size(node_type: str) -> Dict[str, int]: + """Get appropriate size for node based on type""" + if 'Loader' in node_type or 'Load' in node_type: + return NODE_SIZES['Loader'] + elif 'Sampler' in node_type or 'KSampler' in node_type: + return NODE_SIZES['Sampler'] + elif 'Encode' in node_type or 'CLIP' in node_type: + return NODE_SIZES['Encoder'] + else: + return NODE_SIZES['Default'] + +def fix_workflow(workflow_path: Path) -> bool: + """Fix a single workflow file""" + print(f"\n{'='*60}") + print(f"Processing: {workflow_path.name}") + print(f"{'='*60}") + + try: + with open(workflow_path, 'r') as f: + workflow = json.load(f) + except json.JSONDecodeError as e: + print(f"✗ ERROR: Invalid JSON - {e}") + return False + + if 'nodes' not in workflow: + print(f"✗ ERROR: No 'nodes' key in workflow") + return False + + nodes = workflow['nodes'] + links = workflow.get('links', []) + + # Track changes + changes = { + 'added_flags': 0, + 'added_order': 0, + 'added_mode': 0, + 'added_properties': 0, + 'added_size': 0, + 'added_inputs': 0, + 'added_outputs': 0, + 'updated_node_names': 0, + 'removed_nodes': 0, + } + + # Build link index for quick lookup + link_index = {} + for link in links: + if len(link) >= 6: + link_id, src_node_id, src_slot, tgt_node_id, tgt_slot, data_type = link[:6] + link_index[link_id] = { + 'source': {'node_id': src_node_id, 'slot': src_slot}, + 'target': {'node_id': tgt_node_id, 'slot': tgt_slot}, + 'type': data_type + } + + # Build node ID index + node_by_id = {node['id']: node for node in nodes} + + # Process each node + nodes_to_remove = [] + for i, node in enumerate(nodes): + node_id = node.get('id') + node_type = node.get('type', '') + + # Update node name if needed + if node_type in NODE_NAME_MAPPING: + new_name = NODE_NAME_MAPPING[node_type] + if new_name is None: + # Mark for removal + nodes_to_remove.append(i) + changes['removed_nodes'] += 1 + print(f" Removing deprecated node {node_id}: {node_type}") + continue + else: + print(f" Updating node {node_id}: {node_type} → {new_name}") + node['type'] = new_name + node_type = new_name + changes['updated_node_names'] += 1 + + # Add missing flags + if 'flags' not in node: + node['flags'] = {} + changes['added_flags'] += 1 + + # Add missing order (will recalculate later based on dependencies) + if 'order' not in node: + node['order'] = i # Temporary order + changes['added_order'] += 1 + + # Add missing mode (0 = execute, 4 = bypass) + if 'mode' not in node: + node['mode'] = 0 + changes['added_mode'] += 1 + + # Add missing properties + if 'properties' not in node: + node['properties'] = {"Node name for S&R": node_type} + changes['added_properties'] += 1 + + # Add missing size + if 'size' not in node: + node['size'] = get_node_size(node_type) + changes['added_size'] += 1 + + # Reconstruct inputs from links + if 'inputs' not in node or not node['inputs']: + node_inputs = [] + for link_id, link_data in link_index.items(): + if link_data['target']['node_id'] == node_id: + # This link targets this node + # We need to know the input name, but we don't have it + # For now, create a placeholder + node_inputs.append({ + 'name': f'input_{link_data["target"]["slot"]}', + 'type': link_data['type'], + 'link': link_id + }) + if node_inputs: + node['inputs'] = node_inputs + changes['added_inputs'] += 1 + + # Reconstruct outputs from links + if 'outputs' not in node or not node['outputs']: + node_outputs = {} + for link_id, link_data in link_index.items(): + if link_data['source']['node_id'] == node_id: + slot = link_data['source']['slot'] + if slot not in node_outputs: + node_outputs[slot] = { + 'name': f'output_{slot}', + 'type': link_data['type'], + 'links': [], + 'slot_index': slot + } + node_outputs[slot]['links'].append(link_id) + + if node_outputs: + node['outputs'] = list(node_outputs.values()) + changes['added_outputs'] += 1 + + # Remove deprecated nodes + for i in reversed(nodes_to_remove): + del nodes[i] + + # Recalculate execution order based on dependencies + if changes['added_order'] > 0 or changes['removed_nodes'] > 0: + calculate_execution_order(nodes, link_index) + + # Update workflow + workflow['nodes'] = nodes + + # Print summary + print(f"\nChanges made:") + for key, value in changes.items(): + if value > 0: + print(f" • {key.replace('_', ' ').title()}: {value}") + + total_changes = sum(changes.values()) + if total_changes == 0: + print(f" ✓ No changes needed - workflow already valid") + return True + + # Save fixed workflow + try: + with open(workflow_path, 'w') as f: + json.dump(workflow, f, indent=2) + print(f"\n✓ Successfully fixed and saved workflow") + return True + except Exception as e: + print(f"\n✗ ERROR saving workflow: {e}") + return False + +def calculate_execution_order(nodes: List[Dict], link_index: Dict): + """Calculate execution order based on node dependencies""" + # Build dependency graph + dependencies = {} + node_by_id = {node['id']: node for node in nodes} + + for node in nodes: + node_id = node['id'] + dependencies[node_id] = set() + + # Find all nodes this node depends on (inputs) + for link_id, link_data in link_index.items(): + if link_data['target']['node_id'] == node_id: + # This node depends on the source node + dependencies[node_id].add(link_data['source']['node_id']) + + # Topological sort to determine execution order + visited = set() + order_counter = [0] + + def visit(node_id): + if node_id in visited: + return + visited.add(node_id) + + # Visit dependencies first + for dep_id in dependencies.get(node_id, []): + if dep_id in node_by_id: # Skip if dependency not in current nodes + visit(dep_id) + + # Assign order + if node_id in node_by_id: + node_by_id[node_id]['order'] = order_counter[0] + order_counter[0] += 1 + + # Visit all nodes + for node_id in node_by_id.keys(): + visit(node_id) + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 fix_workflows.py ") + sys.exit(1) + + workflow_dir = Path(sys.argv[1]) + + if not workflow_dir.exists(): + print(f"Error: Directory {workflow_dir} does not exist") + sys.exit(1) + + # Find all JSON files recursively + workflow_files = list(workflow_dir.rglob('*.json')) + + if not workflow_files: + print(f"No workflow JSON files found in {workflow_dir}") + sys.exit(1) + + print(f"\nFound {len(workflow_files)} workflow files") + + # Process each workflow + success_count = 0 + for workflow_path in sorted(workflow_files): + if fix_workflow(workflow_path): + success_count += 1 + + # Summary + print(f"\n{'='*60}") + print(f"SUMMARY") + print(f"{'='*60}") + print(f"Total workflows: {len(workflow_files)}") + print(f"Successfully fixed: {success_count}") + print(f"Failed: {len(workflow_files) - success_count}") + print(f"{'='*60}\n") + +if __name__ == '__main__': + main() diff --git a/models/comfyui/workflows/advanced/animatediff-video-production-v1.json b/models/comfyui/workflows/advanced/animatediff-video-production-v1.json index e2a403f..939cc75 100644 --- a/models/comfyui/workflows/advanced/animatediff-video-production-v1.json +++ b/models/comfyui/workflows/advanced/animatediff-video-production-v1.json @@ -1,16 +1,189 @@ { "last_node_id": 12, "nodes": [ - {"id": 1, "type": "CheckpointLoaderSimple", "pos": [50, 100], "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], "title": "SDXL Checkpoint Loader"}, - {"id": 2, "type": "AnimateDiffLoader", "pos": [50, 300], "widgets_values": ["mm_sd_v15_v2.ckpt"], "title": "AnimateDiff Motion Module"}, - {"id": 3, "type": "CLIPTextEncode", "pos": [450, 100], "widgets_values": ["A person walking through a forest, cinematic movement"], "title": "API Video Prompt"}, - {"id": 4, "type": "CLIPTextEncode", "pos": [450, 350], "widgets_values": ["static, blurry, low quality"], "title": "API Negative Prompt"}, - {"id": 5, "type": "EmptyLatentImage", "pos": [450, 600], "widgets_values": [512, 512, 16], "title": "API Latent Config (16 frames)"}, - {"id": 6, "type": "AnimateDiffSampler", "pos": [800, 100], "widgets_values": [42, "fixed", 25, 7.5, "dpmpp_2m", "karras"], "title": "AnimateDiff Sampler"}, - {"id": 7, "type": "VAEDecode", "pos": [1150, 100], "title": "VAE Decode Video"}, - {"id": 8, "type": "VHSVideoCombine", "pos": [1450, 100], "widgets_values": [8, 0, "animatediff_output", "video/h264-mp4"], "title": "Combine Frames"}, - {"id": 9, "type": "PreviewVideo", "pos": [1750, 100], "title": "Preview Video"}, - {"id": 10, "type": "SaveVideo", "pos": [1750, 350], "widgets_values": ["animatediff_output"], "title": "API Video Output"} + { + "id": 1, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], + "title": "SDXL Checkpoint Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "AnimateDiffLoaderV1", + "pos": [ + 50, + 300 + ], + "widgets_values": [ + "mm_sd_v15_v2.ckpt" + ], + "title": "AnimateDiff Motion Module", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "AnimateDiffLoaderV1" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "CLIPTextEncode", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "A person walking through a forest, cinematic movement" + ], + "title": "API Video Prompt", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 4, + "type": "CLIPTextEncode", + "pos": [ + 450, + 350 + ], + "widgets_values": [ + "static, blurry, low quality" + ], + "title": "API Negative Prompt", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 5, + "type": "EmptyLatentImage", + "pos": [ + 450, + 600 + ], + "widgets_values": [ + 512, + 512, + 16 + ], + "title": "API Latent Config (16 frames)", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 6, + "type": "AnimateDiffSampler", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 25, + 7.5, + "dpmpp_2m", + "karras" + ], + "title": "AnimateDiff Sampler", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "AnimateDiffSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 7, + "type": "VAEDecode", + "pos": [ + 1150, + 100 + ], + "title": "VAE Decode Video", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 8, + "type": "VHS_VideoCombine", + "pos": [ + 1450, + 100 + ], + "widgets_values": [ + 8, + 0, + "animatediff_output", + "video/h264-mp4" + ], + "title": "Combine Frames", + "flags": {}, + "order": 7, + "mode": 0, + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { @@ -18,16 +191,55 @@ "version": "1.0.0", "description": "Text-to-video generation using AnimateDiff. Create animated sequences from text prompts with natural motion.", "category": "advanced", - "tags": ["animatediff", "text-to-video", "animation", "advanced", "production"], - "requirements": {"models": ["stable-diffusion-xl-base-1.0", "animatediff-motion-module"], "custom_nodes": ["ComfyUI-AnimateDiff-Evolved", "ComfyUI-VideoHelperSuite"], "vram_min": "18GB"}, - "parameters": { - "prompt": {"node_id": 3, "type": "string", "required": true, "description": "Describe action and movement"}, - "frames": {"node_id": 5, "type": "integer", "default": 16, "description": "Number of frames (8-32)"}, - "fps": {"node_id": 8, "type": "integer", "default": 8} + "tags": [ + "animatediff", + "text-to-video", + "animation", + "advanced", + "production" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "animatediff-motion-module" + ], + "custom_nodes": [ + "ComfyUI-AnimateDiff-Evolved", + "ComfyUI-VideoHelperSuite" + ], + "vram_min": "18GB" }, - "performance": {"avg_generation_time": "60-90 seconds", "vram_usage": "~16-20GB", "output": "16 frames (~2s @ 8fps)"}, - "use_cases": ["Text-to-video animation", "Character animations", "Motion graphics", "Animated storyboards"] + "parameters": { + "prompt": { + "node_id": 3, + "type": "string", + "required": true, + "description": "Describe action and movement" + }, + "frames": { + "node_id": 5, + "type": "integer", + "default": 16, + "description": "Number of frames (8-32)" + }, + "fps": { + "node_id": 8, + "type": "integer", + "default": 8 + } + }, + "performance": { + "avg_generation_time": "60-90 seconds", + "vram_usage": "~16-20GB", + "output": "16 frames (~2s @ 8fps)" + }, + "use_cases": [ + "Text-to-video animation", + "Character animations", + "Motion graphics", + "Animated storyboards" + ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/advanced/batch-pipeline-production-v1.json b/models/comfyui/workflows/advanced/batch-pipeline-production-v1.json index 7257bfd..6d696f9 100644 --- a/models/comfyui/workflows/advanced/batch-pipeline-production-v1.json +++ b/models/comfyui/workflows/advanced/batch-pipeline-production-v1.json @@ -1,16 +1,224 @@ { "last_node_id": 14, "nodes": [ - {"id": 1, "type": "CheckpointLoaderSimple", "pos": [50, 100], "widgets_values": ["diffusers/FLUX.1-schnell"], "title": "FLUX Schnell Loader"}, - {"id": 2, "type": "CLIPTextEncode", "pos": [450, 100], "widgets_values": ["A beautiful landscape"], "title": "API Base Prompt"}, - {"id": 3, "type": "CLIPTextEncode", "pos": [450, 300], "widgets_values": ["blurry, low quality"], "title": "API Negative Prompt"}, - {"id": 4, "type": "SeedGenerator", "pos": [450, 500], "widgets_values": [4, 42], "title": "Generate 4 Seeds"}, - {"id": 5, "type": "EmptyLatentImage", "pos": [450, 700], "widgets_values": [1024, 1024, 1], "title": "API Latent Config"}, - {"id": 6, "type": "BatchKSampler", "pos": [800, 100], "widgets_values": ["fixed", 4, 1.0, "euler", "normal"], "title": "Batch Sampler (4 variations)"}, - {"id": 7, "type": "VAEDecode", "pos": [1150, 100], "title": "VAE Decode Batch"}, - {"id": 8, "type": "ImageBatchToList", "pos": [1450, 100], "title": "Split to Individual Images"}, - {"id": 9, "type": "PreviewImage", "pos": [1750, 100], "title": "Preview All Variations"}, - {"id": 10, "type": "SaveImage", "pos": [1750, 450], "widgets_values": ["batch_output"], "title": "API Save All"} + { + "id": 1, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "diffusers/FLUX.1-schnell" + ], + "title": "FLUX Schnell Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "CLIPTextEncode", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "A beautiful landscape" + ], + "title": "API Base Prompt", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 3, + "type": "CLIPTextEncode", + "pos": [ + 450, + 300 + ], + "widgets_values": [ + "blurry, low quality" + ], + "title": "API Negative Prompt", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 4, + "type": "SeedGenerator", + "pos": [ + 450, + 500 + ], + "widgets_values": [ + 4, + 42 + ], + "title": "Generate 4 Seeds", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "SeedGenerator" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 5, + "type": "EmptyLatentImage", + "pos": [ + 450, + 700 + ], + "widgets_values": [ + 1024, + 1024, + 1 + ], + "title": "API Latent Config", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 6, + "type": "BatchKSampler", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + "fixed", + 4, + 1.0, + "euler", + "normal" + ], + "title": "Batch Sampler (4 variations)", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "BatchKSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 7, + "type": "VAEDecode", + "pos": [ + 1150, + 100 + ], + "title": "VAE Decode Batch", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 8, + "type": "ImageBatchToList", + "pos": [ + 1450, + 100 + ], + "title": "Split to Individual Images", + "flags": {}, + "order": 7, + "mode": 0, + "properties": { + "Node name for S&R": "ImageBatchToList" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 9, + "type": "PreviewImage", + "pos": [ + 1750, + 100 + ], + "title": "Preview All Variations", + "flags": {}, + "order": 8, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 10, + "type": "SaveImage", + "pos": [ + 1750, + 450 + ], + "widgets_values": [ + "batch_output" + ], + "title": "API Save All", + "flags": {}, + "order": 9, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { @@ -18,16 +226,49 @@ "version": "1.0.0", "description": "Batch generation pipeline for multiple variations. Generate 4+ images simultaneously with different seeds for rapid iteration.", "category": "advanced", - "tags": ["batch", "multi-generation", "variations", "advanced", "production"], - "requirements": {"models": ["FLUX.1-schnell"], "custom_nodes": [], "vram_min": "20GB"}, - "parameters": { - "prompt": {"node_id": 2, "type": "string", "required": true}, - "batch_count": {"node_id": 4, "type": "integer", "default": 4, "description": "Number of variations"}, - "base_seed": {"node_id": 4, "type": "integer", "default": 42} + "tags": [ + "batch", + "multi-generation", + "variations", + "advanced", + "production" + ], + "requirements": { + "models": [ + "FLUX.1-schnell" + ], + "custom_nodes": [], + "vram_min": "20GB" }, - "performance": {"avg_generation_time": "20-30 seconds for 4 images", "vram_usage": "~18-22GB"}, - "use_cases": ["Rapid prototyping", "Concept exploration", "A/B testing", "Client presentations with options"] + "parameters": { + "prompt": { + "node_id": 2, + "type": "string", + "required": true + }, + "batch_count": { + "node_id": 4, + "type": "integer", + "default": 4, + "description": "Number of variations" + }, + "base_seed": { + "node_id": 4, + "type": "integer", + "default": 42 + } + }, + "performance": { + "avg_generation_time": "20-30 seconds for 4 images", + "vram_usage": "~18-22GB" + }, + "use_cases": [ + "Rapid prototyping", + "Concept exploration", + "A/B testing", + "Client presentations with options" + ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json b/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json index 22eb836..ee49d23 100644 --- a/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json +++ b/models/comfyui/workflows/advanced/controlnet-fusion-production-v1.json @@ -1,20 +1,322 @@ { "last_node_id": 15, "nodes": [ - {"id": 1, "type": "CheckpointLoaderSimple", "pos": [50, 100], "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], "title": "SDXL Checkpoint Loader"}, - {"id": 2, "type": "LoadImage", "pos": [50, 300], "widgets_values": ["control_depth.png", "image"], "title": "API Depth Control Image"}, - {"id": 3, "type": "LoadImage", "pos": [50, 650], "widgets_values": ["control_canny.png", "image"], "title": "API Canny Control Image"}, - {"id": 4, "type": "ControlNetLoader", "pos": [450, 100], "widgets_values": ["control_v11p_sd15_depth"], "title": "Depth ControlNet Loader"}, - {"id": 5, "type": "ControlNetLoader", "pos": [450, 300], "widgets_values": ["control_v11p_sd15_canny"], "title": "Canny ControlNet Loader"}, - {"id": 6, "type": "ControlNetApplyAdvanced", "pos": [800, 100], "widgets_values": [0.8, 0.0, 1.0], "title": "Apply Depth Control"}, - {"id": 7, "type": "ControlNetApplyAdvanced", "pos": [800, 350], "widgets_values": [0.7, 0.0, 1.0], "title": "Apply Canny Control"}, - {"id": 8, "type": "CLIPTextEncode", "pos": [450, 600], "widgets_values": ["Detailed scene with precise composition"], "title": "API Positive Prompt"}, - {"id": 9, "type": "CLIPTextEncode", "pos": [450, 850], "widgets_values": ["blurry, low quality"], "title": "API Negative Prompt"}, - {"id": 10, "type": "EmptyLatentImage", "pos": [800, 700], "widgets_values": [1024, 1024, 1], "title": "API Latent Config"}, - {"id": 11, "type": "KSampler", "pos": [1150, 100], "widgets_values": [42, "fixed", 30, 7.5, "dpmpp_2m", "karras", 1], "title": "Multi-ControlNet Sampler"}, - {"id": 12, "type": "VAEDecode", "pos": [1500, 100], "title": "VAE Decode"}, - {"id": 13, "type": "PreviewImage", "pos": [1800, 100], "title": "Preview Output"}, - {"id": 14, "type": "SaveImage", "pos": [1800, 450], "widgets_values": ["controlnet_fusion_output"], "title": "API Image Output"} + { + "id": 1, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], + "title": "SDXL Checkpoint Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "LoadImage", + "pos": [ + 50, + 300 + ], + "widgets_values": [ + "control_depth.png", + "image" + ], + "title": "API Depth Control Image", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "LoadImage", + "pos": [ + 50, + 650 + ], + "widgets_values": [ + "control_canny.png", + "image" + ], + "title": "API Canny Control Image", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 4, + "type": "ControlNetLoader", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "control_v11p_sd15_depth" + ], + "title": "Depth ControlNet Loader", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 5, + "type": "ControlNetLoader", + "pos": [ + 450, + 300 + ], + "widgets_values": [ + "control_v11p_sd15_canny" + ], + "title": "Canny ControlNet Loader", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 6, + "type": "ControlNetApplyAdvanced", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + 0.8, + 0.0, + 1.0 + ], + "title": "Apply Depth Control", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 7, + "type": "ControlNetApplyAdvanced", + "pos": [ + 800, + 350 + ], + "widgets_values": [ + 0.7, + 0.0, + 1.0 + ], + "title": "Apply Canny Control", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 8, + "type": "CLIPTextEncode", + "pos": [ + 450, + 600 + ], + "widgets_values": [ + "Detailed scene with precise composition" + ], + "title": "API Positive Prompt", + "flags": {}, + "order": 7, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 9, + "type": "CLIPTextEncode", + "pos": [ + 450, + 850 + ], + "widgets_values": [ + "blurry, low quality" + ], + "title": "API Negative Prompt", + "flags": {}, + "order": 8, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 10, + "type": "EmptyLatentImage", + "pos": [ + 800, + 700 + ], + "widgets_values": [ + 1024, + 1024, + 1 + ], + "title": "API Latent Config", + "flags": {}, + "order": 9, + "mode": 0, + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 11, + "type": "KSampler", + "pos": [ + 1150, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 30, + 7.5, + "dpmpp_2m", + "karras", + 1 + ], + "title": "Multi-ControlNet Sampler", + "flags": {}, + "order": 10, + "mode": 0, + "properties": { + "Node name for S&R": "KSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 12, + "type": "VAEDecode", + "pos": [ + 1500, + 100 + ], + "title": "VAE Decode", + "flags": {}, + "order": 11, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 13, + "type": "PreviewImage", + "pos": [ + 1800, + 100 + ], + "title": "Preview Output", + "flags": {}, + "order": 12, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 14, + "type": "SaveImage", + "pos": [ + 1800, + 450 + ], + "widgets_values": [ + "controlnet_fusion_output" + ], + "title": "API Image Output", + "flags": {}, + "order": 13, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { @@ -22,17 +324,57 @@ "version": "1.0.0", "description": "Multi-ControlNet workflow for precise composition control. Combine depth, canny, pose, or other controls for exact image generation.", "category": "advanced", - "tags": ["controlnet", "multi-control", "fusion", "advanced", "production"], - "requirements": {"models": ["stable-diffusion-xl-base-1.0", "controlnet-depth", "controlnet-canny"], "custom_nodes": ["ComfyUI-Advanced-ControlNet"], "vram_min": "20GB"}, - "parameters": { - "depth_control": {"node_id": 2, "type": "image", "required": false}, - "canny_control": {"node_id": 3, "type": "image", "required": false}, - "depth_strength": {"node_id": 6, "type": "float", "default": 0.8}, - "canny_strength": {"node_id": 7, "type": "float", "default": 0.7} + "tags": [ + "controlnet", + "multi-control", + "fusion", + "advanced", + "production" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "controlnet-depth", + "controlnet-canny" + ], + "custom_nodes": [ + "ComfyUI-Advanced-ControlNet" + ], + "vram_min": "20GB" }, - "performance": {"avg_generation_time": "45-70 seconds", "vram_usage": "~18-22GB"}, - "use_cases": ["Architectural visualization", "Product photography", "Precise composition control", "3D-to-2D rendering"] + "parameters": { + "depth_control": { + "node_id": 2, + "type": "image", + "required": false + }, + "canny_control": { + "node_id": 3, + "type": "image", + "required": false + }, + "depth_strength": { + "node_id": 6, + "type": "float", + "default": 0.8 + }, + "canny_strength": { + "node_id": 7, + "type": "float", + "default": 0.7 + } + }, + "performance": { + "avg_generation_time": "45-70 seconds", + "vram_usage": "~18-22GB" + }, + "use_cases": [ + "Architectural visualization", + "Product photography", + "Precise composition control", + "3D-to-2D rendering" + ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/image-to-image/ipadapter-composition-i2i-production-v1.json b/models/comfyui/workflows/image-to-image/ipadapter-composition-i2i-production-v1.json index 419ab58..0d6c0f1 100644 --- a/models/comfyui/workflows/image-to-image/ipadapter-composition-i2i-production-v1.json +++ b/models/comfyui/workflows/image-to-image/ipadapter-composition-i2i-production-v1.json @@ -2,20 +2,322 @@ "last_node_id": 18, "last_link_id": 25, "nodes": [ - {"id": 1, "type": "CheckpointLoaderSimple", "pos": [50, 100], "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], "title": "SDXL Checkpoint Loader"}, - {"id": 2, "type": "LoadImage", "pos": [50, 300], "widgets_values": ["composition_ref1.png", "image"], "title": "API Composition Ref 1"}, - {"id": 3, "type": "LoadImage", "pos": [50, 650], "widgets_values": ["composition_ref2.png", "image"], "title": "API Composition Ref 2"}, - {"id": 4, "type": "IPAdapterUnifiedLoader", "pos": [450, 100], "widgets_values": ["PLUS (high strength)"], "title": "IP-Adapter Loader 1"}, - {"id": 5, "type": "IPAdapterUnifiedLoader", "pos": [450, 250], "widgets_values": ["PLUS (high strength)"], "title": "IP-Adapter Loader 2"}, - {"id": 6, "type": "IPAdapterApply", "pos": [800, 100], "widgets_values": [0.6, 0.0, "original"], "title": "Apply IP-Adapter 1"}, - {"id": 7, "type": "IPAdapterApply", "pos": [1100, 100], "widgets_values": [0.5, 0.0, "original"], "title": "Apply IP-Adapter 2"}, - {"id": 8, "type": "CLIPTextEncode", "pos": [450, 500], "widgets_values": ["Complex scene composition, detailed, professional"], "title": "API Positive Prompt"}, - {"id": 9, "type": "CLIPTextEncode", "pos": [450, 750], "widgets_values": ["blurry, low quality"], "title": "API Negative Prompt"}, - {"id": 10, "type": "EmptyLatentImage", "pos": [800, 500], "widgets_values": [1024, 1024, 1], "title": "API Latent Config"}, - {"id": 11, "type": "KSampler", "pos": [1400, 100], "widgets_values": [42, "fixed", 35, 7.0, "dpmpp_2m", "karras", 1], "title": "Multi-Composition Sampler"}, - {"id": 12, "type": "VAEDecode", "pos": [1750, 100], "title": "VAE Decode"}, - {"id": 13, "type": "PreviewImage", "pos": [2000, 100], "title": "Preview Output"}, - {"id": 14, "type": "SaveImage", "pos": [2000, 550], "widgets_values": ["ipadapter_composition_output"], "title": "API Image Output"} + { + "id": 1, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], + "title": "SDXL Checkpoint Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "LoadImage", + "pos": [ + 50, + 300 + ], + "widgets_values": [ + "composition_ref1.png", + "image" + ], + "title": "API Composition Ref 1", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "LoadImage", + "pos": [ + 50, + 650 + ], + "widgets_values": [ + "composition_ref2.png", + "image" + ], + "title": "API Composition Ref 2", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 4, + "type": "IPAdapterUnifiedLoader", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "PLUS (high strength)" + ], + "title": "IP-Adapter Loader 1", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "IPAdapterUnifiedLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 5, + "type": "IPAdapterUnifiedLoader", + "pos": [ + 450, + 250 + ], + "widgets_values": [ + "PLUS (high strength)" + ], + "title": "IP-Adapter Loader 2", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "IPAdapterUnifiedLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 6, + "type": "IPAdapter", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + 0.6, + 0.0, + "original" + ], + "title": "Apply IP-Adapter 1", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "IPAdapter" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 7, + "type": "IPAdapter", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + 0.5, + 0.0, + "original" + ], + "title": "Apply IP-Adapter 2", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "IPAdapter" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 8, + "type": "CLIPTextEncode", + "pos": [ + 450, + 500 + ], + "widgets_values": [ + "Complex scene composition, detailed, professional" + ], + "title": "API Positive Prompt", + "flags": {}, + "order": 7, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 9, + "type": "CLIPTextEncode", + "pos": [ + 450, + 750 + ], + "widgets_values": [ + "blurry, low quality" + ], + "title": "API Negative Prompt", + "flags": {}, + "order": 8, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 10, + "type": "EmptyLatentImage", + "pos": [ + 800, + 500 + ], + "widgets_values": [ + 1024, + 1024, + 1 + ], + "title": "API Latent Config", + "flags": {}, + "order": 9, + "mode": 0, + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 11, + "type": "KSampler", + "pos": [ + 1400, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 35, + 7.0, + "dpmpp_2m", + "karras", + 1 + ], + "title": "Multi-Composition Sampler", + "flags": {}, + "order": 10, + "mode": 0, + "properties": { + "Node name for S&R": "KSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 12, + "type": "VAEDecode", + "pos": [ + 1750, + 100 + ], + "title": "VAE Decode", + "flags": {}, + "order": 11, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 13, + "type": "PreviewImage", + "pos": [ + 2000, + 100 + ], + "title": "Preview Output", + "flags": {}, + "order": 12, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 14, + "type": "SaveImage", + "pos": [ + 2000, + 550 + ], + "widgets_values": [ + "ipadapter_composition_output" + ], + "title": "API Image Output", + "flags": {}, + "order": 13, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "links": [], "extra": { @@ -24,16 +326,56 @@ "version": "1.0.0", "description": "Complex scene composition using multiple IP-Adapter references. Combine visual elements from multiple source images.", "category": "image-to-image", - "tags": ["ipadapter", "composition", "multi-reference", "i2i", "production"], - "requirements": {"models": ["stable-diffusion-xl-base-1.0", "ip-adapter-plus"], "custom_nodes": ["ComfyUI_IPAdapter_plus"], "vram_min": "18GB"}, - "parameters": { - "ref_image_1": {"node_id": 2, "type": "image", "required": true, "description": "First composition reference"}, - "ref_image_2": {"node_id": 3, "type": "image", "required": true, "description": "Second composition reference"}, - "weight_1": {"node_id": 6, "type": "float", "default": 0.6, "description": "Weight for first reference"}, - "weight_2": {"node_id": 7, "type": "float", "default": 0.5, "description": "Weight for second reference"} + "tags": [ + "ipadapter", + "composition", + "multi-reference", + "i2i", + "production" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "ip-adapter-plus" + ], + "custom_nodes": [ + "ComfyUI_IPAdapter_plus" + ], + "vram_min": "18GB" }, - "use_cases": ["Multi-source scene composition", "Blend multiple visual concepts", "Complex artistic compositions", "Style mixing"] + "parameters": { + "ref_image_1": { + "node_id": 2, + "type": "image", + "required": true, + "description": "First composition reference" + }, + "ref_image_2": { + "node_id": 3, + "type": "image", + "required": true, + "description": "Second composition reference" + }, + "weight_1": { + "node_id": 6, + "type": "float", + "default": 0.6, + "description": "Weight for first reference" + }, + "weight_2": { + "node_id": 7, + "type": "float", + "default": 0.5, + "description": "Weight for second reference" + } + }, + "use_cases": [ + "Multi-source scene composition", + "Blend multiple visual concepts", + "Complex artistic compositions", + "Style mixing" + ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/image-to-image/ipadapter-face-i2i-production-v1.json b/models/comfyui/workflows/image-to-image/ipadapter-face-i2i-production-v1.json index 55029b6..41d02b1 100644 --- a/models/comfyui/workflows/image-to-image/ipadapter-face-i2i-production-v1.json +++ b/models/comfyui/workflows/image-to-image/ipadapter-face-i2i-production-v1.json @@ -2,17 +2,256 @@ "last_node_id": 15, "last_link_id": 20, "nodes": [ - {"id": 1, "type": "CheckpointLoaderSimple", "pos": [50, 100], "size": {"0": 350, "1": 100}, "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], "title": "SDXL Base Checkpoint Loader"}, - {"id": 2, "type": "LoadImage", "pos": [50, 300], "size": [315, 314], "widgets_values": ["face_reference.png", "image"], "title": "API Face Reference Input"}, - {"id": 3, "type": "IPAdapterUnifiedLoader", "pos": [450, 100], "size": {"0": 315, "1": 78}, "widgets_values": ["FACE"], "title": "IP-Adapter Face Loader"}, - {"id": 4, "type": "IPAdapterApplyFace", "pos": [800, 100], "size": {"0": 315, "1": 258}, "widgets_values": [0.85, 0.0, "original", 0.0, 1.0, true], "title": "Apply IP-Adapter Face"}, - {"id": 5, "type": "CLIPTextEncode", "pos": [450, 400], "size": {"0": 400, "1": 200}, "widgets_values": ["A professional portrait, studio lighting, detailed face"], "title": "API Positive Prompt"}, - {"id": 6, "type": "CLIPTextEncode", "pos": [450, 650], "size": {"0": 400, "1": 200}, "widgets_values": ["blurry, distorted face, low quality"], "title": "API Negative Prompt"}, - {"id": 7, "type": "EmptyLatentImage", "pos": [800, 450], "size": {"0": 315, "1": 106}, "widgets_values": [1024, 1024, 1], "title": "API Latent Image Config"}, - {"id": 8, "type": "KSampler", "pos": [1170, 100], "size": {"0": 315, "1": 474}, "widgets_values": [42, "fixed", 30, 6.5, "dpmpp_2m", "karras", 1], "title": "Sampler with Face"}, - {"id": 9, "type": "VAEDecode", "pos": [1540, 100], "size": {"0": 210, "1": 46}, "title": "VAE Decode"}, - {"id": 10, "type": "PreviewImage", "pos": [1800, 100], "size": {"0": 400, "1": 400}, "title": "Preview Output"}, - {"id": 11, "type": "SaveImage", "pos": [1800, 550], "size": {"0": 400, "1": 100}, "widgets_values": ["ipadapter_face_output"], "title": "API Image Output"} + { + "id": 1, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 100 + ], + "size": { + "0": 350, + "1": 100 + }, + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], + "title": "SDXL Base Checkpoint Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + } + }, + { + "id": 2, + "type": "LoadImage", + "pos": [ + 50, + 300 + ], + "size": [ + 315, + 314 + ], + "widgets_values": [ + "face_reference.png", + "image" + ], + "title": "API Face Reference Input", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + } + }, + { + "id": 3, + "type": "IPAdapterUnifiedLoader", + "pos": [ + 450, + 100 + ], + "size": { + "0": 315, + "1": 78 + }, + "widgets_values": [ + "FACE" + ], + "title": "IP-Adapter Face Loader", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "IPAdapterUnifiedLoader" + } + }, + { + "id": 4, + "type": "IPAdapterFaceID", + "pos": [ + 800, + 100 + ], + "size": { + "0": 315, + "1": 258 + }, + "widgets_values": [ + 0.85, + 0.0, + "original", + 0.0, + 1.0, + true + ], + "title": "Apply IP-Adapter Face", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "IPAdapterFaceID" + } + }, + { + "id": 5, + "type": "CLIPTextEncode", + "pos": [ + 450, + 400 + ], + "size": { + "0": 400, + "1": 200 + }, + "widgets_values": [ + "A professional portrait, studio lighting, detailed face" + ], + "title": "API Positive Prompt", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + } + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 450, + 650 + ], + "size": { + "0": 400, + "1": 200 + }, + "widgets_values": [ + "blurry, distorted face, low quality" + ], + "title": "API Negative Prompt", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + } + }, + { + "id": 7, + "type": "EmptyLatentImage", + "pos": [ + 800, + 450 + ], + "size": { + "0": 315, + "1": 106 + }, + "widgets_values": [ + 1024, + 1024, + 1 + ], + "title": "API Latent Image Config", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "EmptyLatentImage" + } + }, + { + "id": 8, + "type": "KSampler", + "pos": [ + 1170, + 100 + ], + "size": { + "0": 315, + "1": 474 + }, + "widgets_values": [ + 42, + "fixed", + 30, + 6.5, + "dpmpp_2m", + "karras", + 1 + ], + "title": "Sampler with Face", + "flags": {}, + "order": 7, + "mode": 0, + "properties": { + "Node name for S&R": "KSampler" + } + }, + { + "id": 9, + "type": "VAEDecode", + "pos": [ + 1540, + 100 + ], + "size": { + "0": 210, + "1": 46 + }, + "title": "VAE Decode", + "flags": {}, + "order": 8, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 10, + "type": "PreviewImage", + "pos": [ + 1800, + 100 + ], + "size": { + "0": 400, + "1": 400 + }, + "title": "Preview Output", + "flags": {}, + "order": 9, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + } + }, + { + "id": 11, + "type": "SaveImage", + "pos": [ + 1800, + 550 + ], + "size": { + "0": 400, + "1": 100 + }, + "widgets_values": [ + "ipadapter_face_output" + ], + "title": "API Image Output", + "flags": {}, + "order": 10, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + } + } ], "links": [], "extra": { @@ -21,15 +260,50 @@ "version": "1.0.0", "description": "Face-focused generation using IP-Adapter Face model. Transfer facial features from reference to generate new portraits or perform face swaps.", "category": "image-to-image", - "tags": ["ipadapter", "face", "portrait", "i2i", "production"], - "requirements": {"models": ["stable-diffusion-xl-base-1.0", "ip-adapter-face"], "custom_nodes": ["ComfyUI_IPAdapter_plus"], "vram_min": "16GB"}, - "parameters": { - "face_image": {"node_id": 2, "type": "image", "required": true, "description": "Reference face image"}, - "prompt": {"node_id": 5, "type": "string", "default": "A professional portrait", "description": "Portrait description"}, - "face_weight": {"node_id": 4, "type": "float", "default": 0.85, "description": "Face similarity strength (0.85 recommended)"} + "tags": [ + "ipadapter", + "face", + "portrait", + "i2i", + "production" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "ip-adapter-face" + ], + "custom_nodes": [ + "ComfyUI_IPAdapter_plus" + ], + "vram_min": "16GB" }, - "use_cases": ["Portrait generation with specific face", "Face swap in different contexts", "Consistent character portraits", "Professional headshots"] + "parameters": { + "face_image": { + "node_id": 2, + "type": "image", + "required": true, + "description": "Reference face image" + }, + "prompt": { + "node_id": 5, + "type": "string", + "default": "A professional portrait", + "description": "Portrait description" + }, + "face_weight": { + "node_id": 4, + "type": "float", + "default": 0.85, + "description": "Face similarity strength (0.85 recommended)" + } + }, + "use_cases": [ + "Portrait generation with specific face", + "Face swap in different contexts", + "Consistent character portraits", + "Professional headshots" + ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/image-to-image/ipadapter-style-i2i-production-v1.json b/models/comfyui/workflows/image-to-image/ipadapter-style-i2i-production-v1.json index 7092f9f..6cc1527 100644 --- a/models/comfyui/workflows/image-to-image/ipadapter-style-i2i-production-v1.json +++ b/models/comfyui/workflows/image-to-image/ipadapter-style-i2i-production-v1.json @@ -5,8 +5,14 @@ { "id": 1, "type": "CheckpointLoaderSimple", - "pos": [50, 100], - "size": {"0": 350, "1": 100}, + "pos": [ + 50, + 100 + ], + "size": { + "0": 350, + "1": 100 + }, "flags": {}, "order": 0, "mode": 0, @@ -14,33 +20,48 @@ { "name": "MODEL", "type": "MODEL", - "links": [1], + "links": [ + 1 + ], "slot_index": 0 }, { "name": "CLIP", "type": "CLIP", - "links": [2, 3], + "links": [ + 2, + 3 + ], "slot_index": 1 }, { "name": "VAE", "type": "VAE", - "links": [4], + "links": [ + 4 + ], "slot_index": 2 } ], "properties": { "Node name for S&R": "CheckpointLoaderSimple" }, - "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], "title": "SDXL Base Checkpoint Loader" }, { "id": 2, "type": "LoadImage", - "pos": [50, 300], - "size": [315, 314], + "pos": [ + 50, + 300 + ], + "size": [ + 315, + 314 + ], "flags": {}, "order": 1, "mode": 0, @@ -48,7 +69,9 @@ { "name": "IMAGE", "type": "IMAGE", - "links": [11], + "links": [ + 11 + ], "shape": 3 }, { @@ -61,14 +84,23 @@ "properties": { "Node name for S&R": "LoadImage" }, - "widgets_values": ["style_reference.png", "image"], + "widgets_values": [ + "style_reference.png", + "image" + ], "title": "API Style Reference Input" }, { "id": 3, "type": "IPAdapterUnifiedLoader", - "pos": [450, 100], - "size": {"0": 315, "1": 78}, + "pos": [ + 450, + 100 + ], + "size": { + "0": 315, + "1": 78 + }, "flags": {}, "order": 2, "mode": 0, @@ -88,14 +120,18 @@ { "name": "model", "type": "MODEL", - "links": [12], + "links": [ + 12 + ], "shape": 3, "slot_index": 0 }, { "name": "ipadapter", "type": "IPADAPTER", - "links": [13], + "links": [ + 13 + ], "shape": 3, "slot_index": 1 } @@ -103,14 +139,22 @@ "properties": { "Node name for S&R": "IPAdapterUnifiedLoader" }, - "widgets_values": ["PLUS (high strength)"], + "widgets_values": [ + "PLUS (high strength)" + ], "title": "IP-Adapter Loader" }, { "id": 4, - "type": "IPAdapterApply", - "pos": [800, 100], - "size": {"0": 315, "1": 258}, + "type": "IPAdapter", + "pos": [ + 800, + 100 + ], + "size": { + "0": 315, + "1": 258 + }, "flags": {}, "order": 3, "mode": 0, @@ -140,7 +184,9 @@ { "name": "MODEL", "type": "MODEL", - "links": [14], + "links": [ + 14 + ], "shape": 3, "slot_index": 0 } @@ -148,14 +194,27 @@ "properties": { "Node name for S&R": "IPAdapterApply" }, - "widgets_values": [0.75, 0.0, "original", 0.0, 1.0, false], + "widgets_values": [ + 0.75, + 0.0, + "original", + 0.0, + 1.0, + false + ], "title": "Apply IP-Adapter Style" }, { "id": 5, "type": "CLIPTextEncode", - "pos": [450, 400], - "size": {"0": 400, "1": 200}, + "pos": [ + 450, + 400 + ], + "size": { + "0": 400, + "1": 200 + }, "flags": {}, "order": 4, "mode": 0, @@ -170,21 +229,31 @@ { "name": "CONDITIONING", "type": "CONDITIONING", - "links": [5], + "links": [ + 5 + ], "slot_index": 0 } ], "properties": { "Node name for S&R": "CLIPTextEncode" }, - "widgets_values": ["A portrait of a person, highly detailed, professional photography"], + "widgets_values": [ + "A portrait of a person, highly detailed, professional photography" + ], "title": "API Positive Prompt" }, { "id": 6, "type": "CLIPTextEncode", - "pos": [450, 650], - "size": {"0": 400, "1": 200}, + "pos": [ + 450, + 650 + ], + "size": { + "0": 400, + "1": 200 + }, "flags": {}, "order": 5, "mode": 0, @@ -199,21 +268,31 @@ { "name": "CONDITIONING", "type": "CONDITIONING", - "links": [6], + "links": [ + 6 + ], "slot_index": 0 } ], "properties": { "Node name for S&R": "CLIPTextEncode" }, - "widgets_values": ["blurry, low quality, distorted, deformed"], + "widgets_values": [ + "blurry, low quality, distorted, deformed" + ], "title": "API Negative Prompt" }, { "id": 7, "type": "EmptyLatentImage", - "pos": [800, 450], - "size": {"0": 315, "1": 106}, + "pos": [ + 800, + 450 + ], + "size": { + "0": 315, + "1": 106 + }, "flags": {}, "order": 6, "mode": 0, @@ -221,21 +300,33 @@ { "name": "LATENT", "type": "LATENT", - "links": [7], + "links": [ + 7 + ], "slot_index": 0 } ], "properties": { "Node name for S&R": "EmptyLatentImage" }, - "widgets_values": [1024, 1024, 1], + "widgets_values": [ + 1024, + 1024, + 1 + ], "title": "API Latent Image Config" }, { "id": 8, "type": "KSampler", - "pos": [1170, 100], - "size": {"0": 315, "1": 474}, + "pos": [ + 1170, + 100 + ], + "size": { + "0": 315, + "1": 474 + }, "flags": {}, "order": 7, "mode": 0, @@ -265,7 +356,9 @@ { "name": "LATENT", "type": "LATENT", - "links": [8], + "links": [ + 8 + ], "slot_index": 0 } ], @@ -286,8 +379,14 @@ { "id": 9, "type": "VAEDecode", - "pos": [1540, 100], - "size": {"0": 210, "1": 46}, + "pos": [ + 1540, + 100 + ], + "size": { + "0": 210, + "1": 46 + }, "flags": {}, "order": 8, "mode": 0, @@ -307,7 +406,10 @@ { "name": "IMAGE", "type": "IMAGE", - "links": [9, 10], + "links": [ + 9, + 10 + ], "slot_index": 0 } ], @@ -319,8 +421,14 @@ { "id": 10, "type": "PreviewImage", - "pos": [1800, 100], - "size": {"0": 400, "1": 400}, + "pos": [ + 1800, + 100 + ], + "size": { + "0": 400, + "1": 400 + }, "flags": {}, "order": 9, "mode": 0, @@ -339,8 +447,14 @@ { "id": 11, "type": "SaveImage", - "pos": [1800, 550], - "size": {"0": 400, "1": 100}, + "pos": [ + 1800, + 550 + ], + "size": { + "0": 400, + "1": 100 + }, "flags": {}, "order": 10, "mode": 0, @@ -354,25 +468,125 @@ "properties": { "Node name for S&R": "SaveImage" }, - "widgets_values": ["ipadapter_style_output"], + "widgets_values": [ + "ipadapter_style_output" + ], "title": "API Image Output" } ], "links": [ - [1, 1, 0, 3, 0, "MODEL"], - [2, 1, 1, 5, 0, "CLIP"], - [3, 1, 1, 6, 0, "CLIP"], - [4, 1, 2, 9, 1, "VAE"], - [5, 5, 0, 8, 1, "CONDITIONING"], - [6, 6, 0, 8, 2, "CONDITIONING"], - [7, 7, 0, 8, 3, "LATENT"], - [8, 8, 0, 9, 0, "LATENT"], - [9, 9, 0, 10, 0, "IMAGE"], - [10, 9, 0, 11, 0, "IMAGE"], - [11, 2, 0, 4, 2, "IMAGE"], - [12, 3, 0, 4, 3, "MODEL"], - [13, 3, 1, 4, 0, "IPADAPTER"], - [14, 4, 0, 8, 0, "MODEL"] + [ + 1, + 1, + 0, + 3, + 0, + "MODEL" + ], + [ + 2, + 1, + 1, + 5, + 0, + "CLIP" + ], + [ + 3, + 1, + 1, + 6, + 0, + "CLIP" + ], + [ + 4, + 1, + 2, + 9, + 1, + "VAE" + ], + [ + 5, + 5, + 0, + 8, + 1, + "CONDITIONING" + ], + [ + 6, + 6, + 0, + 8, + 2, + "CONDITIONING" + ], + [ + 7, + 7, + 0, + 8, + 3, + "LATENT" + ], + [ + 8, + 8, + 0, + 9, + 0, + "LATENT" + ], + [ + 9, + 9, + 0, + 10, + 0, + "IMAGE" + ], + [ + 10, + 9, + 0, + 11, + 0, + "IMAGE" + ], + [ + 11, + 2, + 0, + 4, + 2, + "IMAGE" + ], + [ + 12, + 3, + 0, + 4, + 3, + "MODEL" + ], + [ + 13, + 3, + 1, + 4, + 0, + "IPADAPTER" + ], + [ + 14, + 4, + 0, + 8, + 0, + "MODEL" + ] ], "groups": [], "config": {}, @@ -383,10 +597,21 @@ "author": "RunPod AI Model Orchestrator", "description": "Style transfer using IP-Adapter. Apply the visual style from a reference image to generate new images matching that aesthetic.", "category": "image-to-image", - "tags": ["ipadapter", "style-transfer", "i2i", "production", "sdxl"], + "tags": [ + "ipadapter", + "style-transfer", + "i2i", + "production", + "sdxl" + ], "requirements": { - "models": ["stable-diffusion-xl-base-1.0", "ip-adapter-plus"], - "custom_nodes": ["ComfyUI_IPAdapter_plus"], + "models": [ + "stable-diffusion-xl-base-1.0", + "ip-adapter-plus" + ], + "custom_nodes": [ + "ComfyUI_IPAdapter_plus" + ], "vram_min": "16GB", "vram_recommended": "24GB" }, @@ -497,4 +722,4 @@ } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/image-to-video/cogvideox-i2v-production-v1.json b/models/comfyui/workflows/image-to-video/cogvideox-i2v-production-v1.json index af79bc2..45ad5a5 100644 --- a/models/comfyui/workflows/image-to-video/cogvideox-i2v-production-v1.json +++ b/models/comfyui/workflows/image-to-video/cogvideox-i2v-production-v1.json @@ -2,14 +2,144 @@ "last_node_id": 10, "last_link_id": 12, "nodes": [ - {"id": 1, "type": "LoadImage", "pos": [50, 100], "size": [315, 314], "widgets_values": ["input_frame.png", "image"], "title": "API Input Image"}, - {"id": 2, "type": "DiffusersLoader", "pos": [50, 500], "widgets_values": ["diffusion_models/CogVideoX-5b"], "title": "CogVideoX-5b Loader"}, - {"id": 3, "type": "CLIPTextEncode", "pos": [450, 100], "widgets_values": ["Camera movement description, action, scene details"], "title": "API Video Prompt"}, - {"id": 4, "type": "CogVideoXSampler", "pos": [800, 100], "widgets_values": [42, "fixed", 50, 6.0, 49, 6], "title": "CogVideoX Sampler (6s @ 8fps)"}, - {"id": 5, "type": "VAEDecode", "pos": [1150, 100], "title": "VAE Decode Video"}, - {"id": 6, "type": "VHSVideoCombine", "pos": [1450, 100], "widgets_values": [8, 0, "cogvideox_output", "video/h264-mp4"], "title": "Combine Video Frames"}, - {"id": 7, "type": "PreviewVideo", "pos": [1750, 100], "title": "Preview Video"}, - {"id": 8, "type": "SaveVideo", "pos": [1750, 400], "widgets_values": ["cogvideox_output"], "title": "API Video Output"} + { + "id": 1, + "type": "LoadImage", + "pos": [ + 50, + 100 + ], + "size": [ + 315, + 314 + ], + "widgets_values": [ + "input_frame.png", + "image" + ], + "title": "API Input Image", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + } + }, + { + "id": 2, + "type": "DiffusersLoader", + "pos": [ + 50, + 500 + ], + "widgets_values": [ + "diffusion_models/CogVideoX-5b" + ], + "title": "CogVideoX-5b Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "DiffusersLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "CLIPTextEncode", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "Camera movement description, action, scene details" + ], + "title": "API Video Prompt", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 4, + "type": "CogVideoXSampler", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 50, + 6.0, + 49, + 6 + ], + "title": "CogVideoX Sampler (6s @ 8fps)", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "CogVideoXSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 5, + "type": "VAEDecode", + "pos": [ + 1150, + 100 + ], + "title": "VAE Decode Video", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 6, + "type": "VHS_VideoCombine", + "pos": [ + 1450, + 100 + ], + "widgets_values": [ + 8, + 0, + "cogvideox_output", + "video/h264-mp4" + ], + "title": "Combine Video Frames", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "links": [], "extra": { @@ -18,16 +148,54 @@ "version": "1.0.0", "description": "AI-driven image-to-video using CogVideoX-5b. Generate 6-second videos (48 frames @ 8fps) from input images with camera movement and action.", "category": "image-to-video", - "tags": ["cogvideox", "i2v", "video-generation", "production"], - "requirements": {"models": ["CogVideoX-5b"], "custom_nodes": ["ComfyUI-VideoHelperSuite", "ComfyUI-CogVideoXWrapper"], "vram_min": "20GB"}, - "parameters": { - "input_image": {"node_id": 1, "type": "image", "required": true, "description": "Starting frame for video"}, - "video_prompt": {"node_id": 3, "type": "string", "required": true, "description": "Describe camera movement and action"}, - "steps": {"node_id": 4, "type": "integer", "default": 50, "description": "Sampling steps (50 recommended)"}, - "fps": {"node_id": 6, "type": "integer", "default": 8, "description": "Output framerate"} + "tags": [ + "cogvideox", + "i2v", + "video-generation", + "production" + ], + "requirements": { + "models": [ + "CogVideoX-5b" + ], + "custom_nodes": [ + "ComfyUI-VideoHelperSuite", + "ComfyUI-CogVideoXWrapper" + ], + "vram_min": "20GB" }, - "performance": {"avg_generation_time": "120-180 seconds", "vram_usage": "~20-22GB", "output": "6 seconds @ 8fps (48 frames)"} + "parameters": { + "input_image": { + "node_id": 1, + "type": "image", + "required": true, + "description": "Starting frame for video" + }, + "video_prompt": { + "node_id": 3, + "type": "string", + "required": true, + "description": "Describe camera movement and action" + }, + "steps": { + "node_id": 4, + "type": "integer", + "default": 50, + "description": "Sampling steps (50 recommended)" + }, + "fps": { + "node_id": 6, + "type": "integer", + "default": 8, + "description": "Output framerate" + } + }, + "performance": { + "avg_generation_time": "120-180 seconds", + "vram_usage": "~20-22GB", + "output": "6 seconds @ 8fps (48 frames)" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/image-to-video/svd-i2v-production-v1.json b/models/comfyui/workflows/image-to-video/svd-i2v-production-v1.json index d88b6da..2fc2f92 100644 --- a/models/comfyui/workflows/image-to-video/svd-i2v-production-v1.json +++ b/models/comfyui/workflows/image-to-video/svd-i2v-production-v1.json @@ -2,13 +2,122 @@ "last_node_id": 8, "last_link_id": 10, "nodes": [ - {"id": 1, "type": "LoadImage", "pos": [50, 100], "widgets_values": ["input_frame.png", "image"], "title": "API Input Image"}, - {"id": 2, "type": "DiffusersLoader", "pos": [50, 400], "widgets_values": ["diffusion_models/stable-video-diffusion-img2vid"], "title": "SVD Model Loader"}, - {"id": 3, "type": "SVDSampler", "pos": [450, 100], "widgets_values": [42, "fixed", 25, 14, 127, 0.02], "title": "SVD Sampler (14 frames)"}, - {"id": 4, "type": "VAEDecode", "pos": [800, 100], "title": "VAE Decode Video"}, - {"id": 5, "type": "VHSVideoCombine", "pos": [1100, 100], "widgets_values": [6, 0, "svd_output", "video/h264-mp4"], "title": "Combine Frames"}, - {"id": 6, "type": "PreviewVideo", "pos": [1400, 100], "title": "Preview Video"}, - {"id": 7, "type": "SaveVideo", "pos": [1400, 350], "widgets_values": ["svd_output"], "title": "API Video Output"} + { + "id": 1, + "type": "LoadImage", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "input_frame.png", + "image" + ], + "title": "API Input Image", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "DiffusersLoader", + "pos": [ + 50, + 400 + ], + "widgets_values": [ + "diffusion_models/stable-video-diffusion-img2vid" + ], + "title": "SVD Model Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "DiffusersLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "SVDSampler", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 25, + 14, + 127, + 0.02 + ], + "title": "SVD Sampler (14 frames)", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "SVDSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 4, + "type": "VAEDecode", + "pos": [ + 800, + 100 + ], + "title": "VAE Decode Video", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 5, + "type": "VHS_VideoCombine", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + 6, + 0, + "svd_output", + "video/h264-mp4" + ], + "title": "Combine Frames", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "links": [], "extra": { @@ -17,16 +126,52 @@ "version": "1.0.0", "description": "Quick animation using SVD. Generate 14-frame video from single image with motion and camera movement.", "category": "image-to-video", - "tags": ["svd", "stable-video-diffusion", "i2v", "animation", "production"], - "requirements": {"models": ["stable-video-diffusion-img2vid"], "custom_nodes": ["ComfyUI-VideoHelperSuite"], "vram_min": "16GB"}, - "parameters": { - "input_image": {"node_id": 1, "type": "image", "required": true}, - "steps": {"node_id": 3, "type": "integer", "default": 25}, - "frames": {"node_id": 3, "type": "integer", "default": 14, "description": "Number of output frames"}, - "motion_bucket": {"node_id": 3, "type": "integer", "default": 127, "description": "Motion amount (0-255)"} + "tags": [ + "svd", + "stable-video-diffusion", + "i2v", + "animation", + "production" + ], + "requirements": { + "models": [ + "stable-video-diffusion-img2vid" + ], + "custom_nodes": [ + "ComfyUI-VideoHelperSuite" + ], + "vram_min": "16GB" }, - "performance": {"avg_generation_time": "25-35 seconds", "vram_usage": "~14-16GB", "output": "14 frames (~2.3s @ 6fps)"} + "parameters": { + "input_image": { + "node_id": 1, + "type": "image", + "required": true + }, + "steps": { + "node_id": 3, + "type": "integer", + "default": 25 + }, + "frames": { + "node_id": 3, + "type": "integer", + "default": 14, + "description": "Number of output frames" + }, + "motion_bucket": { + "node_id": 3, + "type": "integer", + "default": 127, + "description": "Motion amount (0-255)" + } + }, + "performance": { + "avg_generation_time": "25-35 seconds", + "vram_usage": "~14-16GB", + "output": "14 frames (~2.3s @ 6fps)" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/image-to-video/svd-xt-i2v-production-v1.json b/models/comfyui/workflows/image-to-video/svd-xt-i2v-production-v1.json index c62414e..ef392d7 100644 --- a/models/comfyui/workflows/image-to-video/svd-xt-i2v-production-v1.json +++ b/models/comfyui/workflows/image-to-video/svd-xt-i2v-production-v1.json @@ -2,13 +2,122 @@ "last_node_id": 8, "last_link_id": 10, "nodes": [ - {"id": 1, "type": "LoadImage", "pos": [50, 100], "widgets_values": ["input_frame.png", "image"], "title": "API Input Image"}, - {"id": 2, "type": "DiffusersLoader", "pos": [50, 400], "widgets_values": ["diffusion_models/stable-video-diffusion-img2vid-xt"], "title": "SVD-XT Model Loader"}, - {"id": 3, "type": "SVDSampler", "pos": [450, 100], "widgets_values": [42, "fixed", 30, 25, 127, 0.02], "title": "SVD-XT Sampler (25 frames)"}, - {"id": 4, "type": "VAEDecode", "pos": [800, 100], "title": "VAE Decode Video"}, - {"id": 5, "type": "VHSVideoCombine", "pos": [1100, 100], "widgets_values": [6, 0, "svd_xt_output", "video/h264-mp4"], "title": "Combine Frames"}, - {"id": 6, "type": "PreviewVideo", "pos": [1400, 100], "title": "Preview Video"}, - {"id": 7, "type": "SaveVideo", "pos": [1400, 350], "widgets_values": ["svd_xt_output"], "title": "API Video Output"} + { + "id": 1, + "type": "LoadImage", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "input_frame.png", + "image" + ], + "title": "API Input Image", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "DiffusersLoader", + "pos": [ + 50, + 400 + ], + "widgets_values": [ + "diffusion_models/stable-video-diffusion-img2vid-xt" + ], + "title": "SVD-XT Model Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "DiffusersLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "SVDSampler", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 30, + 25, + 127, + 0.02 + ], + "title": "SVD-XT Sampler (25 frames)", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "SVDSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 4, + "type": "VAEDecode", + "pos": [ + 800, + 100 + ], + "title": "VAE Decode Video", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 5, + "type": "VHS_VideoCombine", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + 6, + 0, + "svd_xt_output", + "video/h264-mp4" + ], + "title": "Combine Frames", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "links": [], "extra": { @@ -17,16 +126,51 @@ "version": "1.0.0", "description": "Extended animation using SVD-XT. Generate 25-frame video for longer animations with smooth motion.", "category": "image-to-video", - "tags": ["svd-xt", "stable-video-diffusion", "i2v", "extended", "production"], - "requirements": {"models": ["stable-video-diffusion-img2vid-xt"], "custom_nodes": ["ComfyUI-VideoHelperSuite"], "vram_min": "18GB"}, - "parameters": { - "input_image": {"node_id": 1, "type": "image", "required": true}, - "steps": {"node_id": 3, "type": "integer", "default": 30}, - "frames": {"node_id": 3, "type": "integer", "default": 25, "description": "Number of output frames"}, - "motion_bucket": {"node_id": 3, "type": "integer", "default": 127} + "tags": [ + "svd-xt", + "stable-video-diffusion", + "i2v", + "extended", + "production" + ], + "requirements": { + "models": [ + "stable-video-diffusion-img2vid-xt" + ], + "custom_nodes": [ + "ComfyUI-VideoHelperSuite" + ], + "vram_min": "18GB" }, - "performance": {"avg_generation_time": "40-55 seconds", "vram_usage": "~16-18GB", "output": "25 frames (~4.2s @ 6fps)"} + "parameters": { + "input_image": { + "node_id": 1, + "type": "image", + "required": true + }, + "steps": { + "node_id": 3, + "type": "integer", + "default": 30 + }, + "frames": { + "node_id": 3, + "type": "integer", + "default": 25, + "description": "Number of output frames" + }, + "motion_bucket": { + "node_id": 3, + "type": "integer", + "default": 127 + } + }, + "performance": { + "avg_generation_time": "40-55 seconds", + "vram_usage": "~16-18GB", + "output": "25 frames (~4.2s @ 6fps)" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/text-to-music/musicgen-large-t2m-production-v1.json b/models/comfyui/workflows/text-to-music/musicgen-large-t2m-production-v1.json index 2693474..3d48f1f 100644 --- a/models/comfyui/workflows/text-to-music/musicgen-large-t2m-production-v1.json +++ b/models/comfyui/workflows/text-to-music/musicgen-large-t2m-production-v1.json @@ -1,21 +1,134 @@ { "last_node_id": 6, "nodes": [ - {"id": 1, "type": "MusicGenLoader", "pos": [50, 100], "widgets_values": ["facebook/musicgen-large"], "title": "MusicGen Large Loader"}, - {"id": 2, "type": "MusicGenTextEncode", "pos": [400, 100], "widgets_values": ["Upbeat electronic dance music"], "title": "API Music Prompt"}, - {"id": 3, "type": "MusicGenSampler", "pos": [750, 100], "widgets_values": [42, "fixed", 30.0, 250, 3.0], "title": "MusicGen Sampler"}, - {"id": 4, "type": "AudioSave", "pos": [1100, 100], "widgets_values": ["musicgen_large_output", "wav"], "title": "API Audio Output"} + { + "id": 1, + "type": "MusicGenLoader", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "facebook/musicgen-large" + ], + "title": "MusicGen Large Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "MusicGenTextEncode", + "pos": [ + 400, + 100 + ], + "widgets_values": [ + "Upbeat electronic dance music" + ], + "title": "API Music Prompt", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 3, + "type": "MusicGenSampler", + "pos": [ + 750, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 30.0, + 250, + 3.0 + ], + "title": "MusicGen Sampler", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 4, + "type": "AudioSave", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + "musicgen_large_output", + "wav" + ], + "title": "API Audio Output", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "AudioSave" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { "name": "MusicGen Large Text-to-Music", "version": "1.0.0", "category": "text-to-music", - "tags": ["musicgen", "large", "t2m"], - "requirements": {"models": ["musicgen-large"], "custom_nodes": ["comfyui-sound-lab"], "vram_min": "16GB"}, - "parameters": {"prompt": {"node_id": 2, "type": "string"}, "duration": {"node_id": 3, "default": 30.0}}, - "performance": {"avg_generation_time": "45-70 seconds", "vram_usage": "~14-16GB"} + "tags": [ + "musicgen", + "large", + "t2m" + ], + "requirements": { + "models": [ + "musicgen-large" + ], + "custom_nodes": [ + "comfyui-sound-lab" + ], + "vram_min": "16GB" + }, + "parameters": { + "prompt": { + "node_id": 2, + "type": "string" + }, + "duration": { + "node_id": 3, + "default": 30.0 + } + }, + "performance": { + "avg_generation_time": "45-70 seconds", + "vram_usage": "~14-16GB" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/text-to-music/musicgen-medium-t2m-production-v1.json b/models/comfyui/workflows/text-to-music/musicgen-medium-t2m-production-v1.json index 762a00b..b01ed5a 100644 --- a/models/comfyui/workflows/text-to-music/musicgen-medium-t2m-production-v1.json +++ b/models/comfyui/workflows/text-to-music/musicgen-medium-t2m-production-v1.json @@ -1,21 +1,134 @@ { "last_node_id": 6, "nodes": [ - {"id": 1, "type": "MusicGenLoader", "pos": [50, 100], "widgets_values": ["facebook/musicgen-medium"], "title": "MusicGen Medium Loader"}, - {"id": 2, "type": "MusicGenTextEncode", "pos": [400, 100], "widgets_values": ["Upbeat electronic dance music"], "title": "API Music Prompt"}, - {"id": 3, "type": "MusicGenSampler", "pos": [750, 100], "widgets_values": [42, "fixed", 30.0, 250, 3.0], "title": "MusicGen Sampler"}, - {"id": 4, "type": "AudioSave", "pos": [1100, 100], "widgets_values": ["musicgen_medium_output", "wav"], "title": "API Audio Output"} + { + "id": 1, + "type": "MusicGenLoader", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "facebook/musicgen-medium" + ], + "title": "MusicGen Medium Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "MusicGenTextEncode", + "pos": [ + 400, + 100 + ], + "widgets_values": [ + "Upbeat electronic dance music" + ], + "title": "API Music Prompt", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 3, + "type": "MusicGenSampler", + "pos": [ + 750, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 30.0, + 250, + 3.0 + ], + "title": "MusicGen Sampler", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 4, + "type": "AudioSave", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + "musicgen_medium_output", + "wav" + ], + "title": "API Audio Output", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "AudioSave" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { "name": "MusicGen Medium Text-to-Music", "version": "1.0.0", "category": "text-to-music", - "tags": ["musicgen", "medium", "t2m"], - "requirements": {"models": ["musicgen-medium"], "custom_nodes": ["comfyui-sound-lab"], "vram_min": "10GB"}, - "parameters": {"prompt": {"node_id": 2, "type": "string"}, "duration": {"node_id": 3, "default": 30.0}}, - "performance": {"avg_generation_time": "25-40 seconds", "vram_usage": "~8-10GB"} + "tags": [ + "musicgen", + "medium", + "t2m" + ], + "requirements": { + "models": [ + "musicgen-medium" + ], + "custom_nodes": [ + "comfyui-sound-lab" + ], + "vram_min": "10GB" + }, + "parameters": { + "prompt": { + "node_id": 2, + "type": "string" + }, + "duration": { + "node_id": 3, + "default": 30.0 + } + }, + "performance": { + "avg_generation_time": "25-40 seconds", + "vram_usage": "~8-10GB" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/text-to-music/musicgen-melody-t2m-production-v1.json b/models/comfyui/workflows/text-to-music/musicgen-melody-t2m-production-v1.json index 06a37d2..c47cdb0 100644 --- a/models/comfyui/workflows/text-to-music/musicgen-melody-t2m-production-v1.json +++ b/models/comfyui/workflows/text-to-music/musicgen-melody-t2m-production-v1.json @@ -1,22 +1,161 @@ { "last_node_id": 7, "nodes": [ - {"id": 1, "type": "LoadAudio", "pos": [50, 100], "widgets_values": ["melody_reference.wav"], "title": "API Melody Reference"}, - {"id": 2, "type": "MusicGenLoader", "pos": [50, 350], "widgets_values": ["facebook/musicgen-melody"], "title": "MusicGen Melody Loader"}, - {"id": 3, "type": "MusicGenTextEncode", "pos": [400, 100], "widgets_values": ["Electronic music following the melody"], "title": "API Music Prompt"}, - {"id": 4, "type": "MusicGenMelodySampler", "pos": [750, 100], "widgets_values": [42, "fixed", 30.0, 250, 3.0], "title": "MusicGen Melody Sampler"}, - {"id": 5, "type": "AudioSave", "pos": [1100, 100], "widgets_values": ["musicgen_melody_output", "wav"], "title": "API Audio Output"} + { + "id": 1, + "type": "LoadAudio", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "melody_reference.wav" + ], + "title": "API Melody Reference", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadAudio" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "MusicGenLoader", + "pos": [ + 50, + 350 + ], + "widgets_values": [ + "facebook/musicgen-melody" + ], + "title": "MusicGen Melody Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "MusicGenTextEncode", + "pos": [ + 400, + 100 + ], + "widgets_values": [ + "Electronic music following the melody" + ], + "title": "API Music Prompt", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 4, + "type": "MusicGenMelodySampler", + "pos": [ + 750, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 30.0, + 250, + 3.0 + ], + "title": "MusicGen Melody Sampler", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenMelodySampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 5, + "type": "AudioSave", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + "musicgen_melody_output", + "wav" + ], + "title": "API Audio Output", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "AudioSave" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { "name": "MusicGen Melody Text-to-Music", "version": "1.0.0", "category": "text-to-music", - "tags": ["musicgen", "melody", "melody-conditioning", "t2m"], - "requirements": {"models": ["musicgen-melody"], "custom_nodes": ["comfyui-sound-lab"], "vram_min": "12GB"}, - "parameters": {"melody_audio": {"node_id": 1, "type": "audio"}, "prompt": {"node_id": 3, "type": "string"}, "duration": {"node_id": 4, "default": 30.0}}, - "performance": {"avg_generation_time": "35-55 seconds", "vram_usage": "~10-12GB"} + "tags": [ + "musicgen", + "melody", + "melody-conditioning", + "t2m" + ], + "requirements": { + "models": [ + "musicgen-melody" + ], + "custom_nodes": [ + "comfyui-sound-lab" + ], + "vram_min": "12GB" + }, + "parameters": { + "melody_audio": { + "node_id": 1, + "type": "audio" + }, + "prompt": { + "node_id": 3, + "type": "string" + }, + "duration": { + "node_id": 4, + "default": 30.0 + } + }, + "performance": { + "avg_generation_time": "35-55 seconds", + "vram_usage": "~10-12GB" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/text-to-music/musicgen-small-t2m-production-v1.json b/models/comfyui/workflows/text-to-music/musicgen-small-t2m-production-v1.json index 4ddfc5b..a15d7fc 100644 --- a/models/comfyui/workflows/text-to-music/musicgen-small-t2m-production-v1.json +++ b/models/comfyui/workflows/text-to-music/musicgen-small-t2m-production-v1.json @@ -1,21 +1,134 @@ { "last_node_id": 6, "nodes": [ - {"id": 1, "type": "MusicGenLoader", "pos": [50, 100], "widgets_values": ["facebook/musicgen-small"], "title": "MusicGen Small Loader"}, - {"id": 2, "type": "MusicGenTextEncode", "pos": [400, 100], "widgets_values": ["Upbeat electronic dance music"], "title": "API Music Prompt"}, - {"id": 3, "type": "MusicGenSampler", "pos": [750, 100], "widgets_values": [42, "fixed", 30.0, 250, 3.0], "title": "MusicGen Sampler"}, - {"id": 4, "type": "AudioSave", "pos": [1100, 100], "widgets_values": ["musicgen_small_output", "wav"], "title": "API Audio Output"} + { + "id": 1, + "type": "MusicGenLoader", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "facebook/musicgen-small" + ], + "title": "MusicGen Small Loader", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "MusicGenTextEncode", + "pos": [ + 400, + 100 + ], + "widgets_values": [ + "Upbeat electronic dance music" + ], + "title": "API Music Prompt", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 3, + "type": "MusicGenSampler", + "pos": [ + 750, + 100 + ], + "widgets_values": [ + 42, + "fixed", + 30.0, + 250, + 3.0 + ], + "title": "MusicGen Sampler", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "MusicGenSampler" + }, + "size": { + "0": 315, + "1": 474 + } + }, + { + "id": 4, + "type": "AudioSave", + "pos": [ + 1100, + 100 + ], + "widgets_values": [ + "musicgen_small_output", + "wav" + ], + "title": "API Audio Output", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "AudioSave" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { "name": "MusicGen Small Text-to-Music", "version": "1.0.0", "category": "text-to-music", - "tags": ["musicgen", "small", "t2m"], - "requirements": {"models": ["musicgen-small"], "custom_nodes": ["comfyui-sound-lab"], "vram_min": "6GB"}, - "parameters": {"prompt": {"node_id": 2, "type": "string"}, "duration": {"node_id": 3, "default": 30.0}}, - "performance": {"avg_generation_time": "15-25 seconds", "vram_usage": "~4-6GB"} + "tags": [ + "musicgen", + "small", + "t2m" + ], + "requirements": { + "models": [ + "musicgen-small" + ], + "custom_nodes": [ + "comfyui-sound-lab" + ], + "vram_min": "6GB" + }, + "parameters": { + "prompt": { + "node_id": 2, + "type": "string" + }, + "duration": { + "node_id": 3, + "default": 30.0 + } + }, + "performance": { + "avg_generation_time": "15-25 seconds", + "vram_usage": "~4-6GB" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/upscaling/face-upscale-production-v1.json b/models/comfyui/workflows/upscaling/face-upscale-production-v1.json index e03240e..1b8e15a 100644 --- a/models/comfyui/workflows/upscaling/face-upscale-production-v1.json +++ b/models/comfyui/workflows/upscaling/face-upscale-production-v1.json @@ -1,13 +1,161 @@ { "last_node_id": 10, "nodes": [ - {"id": 1, "type": "LoadImage", "pos": [50, 100], "widgets_values": ["input_portrait.png", "image"], "title": "API Input Portrait"}, - {"id": 2, "type": "CheckpointLoaderSimple", "pos": [50, 400], "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], "title": "SDXL Checkpoint Loader"}, - {"id": 3, "type": "FaceDetailer", "pos": [450, 100], "widgets_values": ["bbox/face_yolov8m.pt", 512, 0.5, 20, 8.0, 0.35, 10], "title": "Face Detailer"}, - {"id": 4, "type": "UpscaleModelLoader", "pos": [50, 650], "widgets_values": ["RealESRGAN_x2.pth"], "title": "Face Upscale Model"}, - {"id": 5, "type": "ImageUpscaleWithModel", "pos": [800, 100], "title": "Upscale Face Regions"}, - {"id": 6, "type": "PreviewImage", "pos": [1150, 100], "title": "Preview Enhanced"}, - {"id": 7, "type": "SaveImage", "pos": [1150, 400], "widgets_values": ["face_upscale_output"], "title": "API Image Output"} + { + "id": 1, + "type": "LoadImage", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "input_portrait.png", + "image" + ], + "title": "API Input Portrait", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 400 + ], + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], + "title": "SDXL Checkpoint Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "FaceDetailer", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "bbox/face_yolov8m.pt", + 512, + 0.5, + 20, + 8.0, + 0.35, + 10 + ], + "title": "Face Detailer", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "FaceDetailer" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 4, + "type": "UpscaleModelLoader", + "pos": [ + 50, + 650 + ], + "widgets_values": [ + "RealESRGAN_x2.pth" + ], + "title": "Face Upscale Model", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "UpscaleModelLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 5, + "type": "ImageUpscaleWithModel", + "pos": [ + 800, + 100 + ], + "title": "Upscale Face Regions", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "ImageUpscaleWithModel" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 6, + "type": "PreviewImage", + "pos": [ + 1150, + 100 + ], + "title": "Preview Enhanced", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 7, + "type": "SaveImage", + "pos": [ + 1150, + 400 + ], + "widgets_values": [ + "face_upscale_output" + ], + "title": "API Image Output", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { @@ -15,17 +163,58 @@ "version": "1.0.0", "description": "Portrait-focused upscaling with FaceDetailer from Impact-Pack. Detects and enhances faces with special attention to facial details.", "category": "upscaling", - "tags": ["face-upscale", "portrait", "facedetailer", "impact-pack", "production"], - "requirements": {"models": ["stable-diffusion-xl-base-1.0", "face_yolov8m", "RealESRGAN"], "custom_nodes": ["ComfyUI-Impact-Pack"], "vram_min": "14GB"}, - "parameters": { - "input_image": {"node_id": 1, "type": "image", "required": true}, - "detection_threshold": {"node_id": 3, "type": "float", "default": 0.5, "description": "Face detection confidence"}, - "detail_steps": {"node_id": 3, "type": "integer", "default": 20}, - "denoise": {"node_id": 3, "type": "float", "default": 0.35} + "tags": [ + "face-upscale", + "portrait", + "facedetailer", + "impact-pack", + "production" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "face_yolov8m", + "RealESRGAN" + ], + "custom_nodes": [ + "ComfyUI-Impact-Pack" + ], + "vram_min": "14GB" }, - "performance": {"avg_generation_time": "30-50 seconds", "vram_usage": "~12-16GB"}, - "use_cases": ["Portrait enhancement", "Professional headshots", "Face restoration", "ID photo upscaling"] + "parameters": { + "input_image": { + "node_id": 1, + "type": "image", + "required": true + }, + "detection_threshold": { + "node_id": 3, + "type": "float", + "default": 0.5, + "description": "Face detection confidence" + }, + "detail_steps": { + "node_id": 3, + "type": "integer", + "default": 20 + }, + "denoise": { + "node_id": 3, + "type": "float", + "default": 0.35 + } + }, + "performance": { + "avg_generation_time": "30-50 seconds", + "vram_usage": "~12-16GB" + }, + "use_cases": [ + "Portrait enhancement", + "Professional headshots", + "Face restoration", + "ID photo upscaling" + ] } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/upscaling/simple-upscale-production-v1.json b/models/comfyui/workflows/upscaling/simple-upscale-production-v1.json index 810e99e..4aa81c5 100644 --- a/models/comfyui/workflows/upscaling/simple-upscale-production-v1.json +++ b/models/comfyui/workflows/upscaling/simple-upscale-production-v1.json @@ -1,12 +1,134 @@ { "last_node_id": 6, "nodes": [ - {"id": 1, "type": "LoadImage", "pos": [50, 100], "widgets_values": ["input_image.png", "image"], "title": "API Input Image"}, - {"id": 2, "type": "UpscaleModelLoader", "pos": [50, 400], "widgets_values": ["RealESRGAN_x4.pth"], "title": "Upscale Model Loader"}, - {"id": 3, "type": "ImageUpscaleWithModel", "pos": [450, 100], "title": "Upscale with Model (4x)"}, - {"id": 4, "type": "ImageScale", "pos": [800, 100], "widgets_values": ["lanczos", 2], "title": "Optional Downscale to 2x"}, - {"id": 5, "type": "PreviewImage", "pos": [1150, 100], "title": "Preview Output"}, - {"id": 6, "type": "SaveImage", "pos": [1150, 400], "widgets_values": ["simple_upscale_output"], "title": "API Image Output"} + { + "id": 1, + "type": "LoadImage", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "input_image.png", + "image" + ], + "title": "API Input Image", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "UpscaleModelLoader", + "pos": [ + 50, + 400 + ], + "widgets_values": [ + "RealESRGAN_x4.pth" + ], + "title": "Upscale Model Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "UpscaleModelLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "ImageUpscaleWithModel", + "pos": [ + 450, + 100 + ], + "title": "Upscale with Model (4x)", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "ImageUpscaleWithModel" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 4, + "type": "ImageScale", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + "lanczos", + 2 + ], + "title": "Optional Downscale to 2x", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "ImageScale" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 5, + "type": "PreviewImage", + "pos": [ + 1150, + 100 + ], + "title": "Preview Output", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 6, + "type": "SaveImage", + "pos": [ + 1150, + 400 + ], + "widgets_values": [ + "simple_upscale_output" + ], + "title": "API Image Output", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { @@ -14,15 +136,45 @@ "version": "1.0.0", "description": "Fast, straightforward upscaling using RealESRGAN. No diffusion refinement, optimized for speed.", "category": "upscaling", - "tags": ["simple-upscale", "fast", "realesrgan", "production"], - "requirements": {"models": ["RealESRGAN"], "custom_nodes": [], "vram_min": "8GB"}, - "parameters": { - "input_image": {"node_id": 1, "type": "image", "required": true}, - "model": {"node_id": 2, "type": "string", "default": "RealESRGAN_x4.pth", "options": ["RealESRGAN_x2.pth", "RealESRGAN_x4.pth"]}, - "final_scale": {"node_id": 4, "type": "integer", "default": 2} + "tags": [ + "simple-upscale", + "fast", + "realesrgan", + "production" + ], + "requirements": { + "models": [ + "RealESRGAN" + ], + "custom_nodes": [], + "vram_min": "8GB" }, - "performance": {"avg_generation_time": "5-15 seconds", "vram_usage": "~6-8GB"} + "parameters": { + "input_image": { + "node_id": 1, + "type": "image", + "required": true + }, + "model": { + "node_id": 2, + "type": "string", + "default": "RealESRGAN_x4.pth", + "options": [ + "RealESRGAN_x2.pth", + "RealESRGAN_x4.pth" + ] + }, + "final_scale": { + "node_id": 4, + "type": "integer", + "default": 2 + } + }, + "performance": { + "avg_generation_time": "5-15 seconds", + "vram_usage": "~6-8GB" + } } }, "version": 0.4 -} +} \ No newline at end of file diff --git a/models/comfyui/workflows/upscaling/ultimate-sd-upscale-production-v1.json b/models/comfyui/workflows/upscaling/ultimate-sd-upscale-production-v1.json index bdbebc8..a79f203 100644 --- a/models/comfyui/workflows/upscaling/ultimate-sd-upscale-production-v1.json +++ b/models/comfyui/workflows/upscaling/ultimate-sd-upscale-production-v1.json @@ -1,15 +1,208 @@ { "last_node_id": 12, "nodes": [ - {"id": 1, "type": "LoadImage", "pos": [50, 100], "widgets_values": ["input_image.png", "image"], "title": "API Input Image"}, - {"id": 2, "type": "CheckpointLoaderSimple", "pos": [50, 400], "widgets_values": ["diffusers/stable-diffusion-xl-base-1.0"], "title": "SDXL Checkpoint Loader"}, - {"id": 3, "type": "UpscaleModelLoader", "pos": [50, 600], "widgets_values": ["RealESRGAN_x2.pth"], "title": "Upscale Model Loader"}, - {"id": 4, "type": "CLIPTextEncode", "pos": [450, 100], "widgets_values": ["high quality, detailed, sharp"], "title": "API Positive Prompt"}, - {"id": 5, "type": "CLIPTextEncode", "pos": [450, 300], "widgets_values": ["blurry, low quality"], "title": "API Negative Prompt"}, - {"id": 6, "type": "UltimateSDUpscale", "pos": [800, 100], "widgets_values": [2, 42, 20, 8.0, "dpmpp_2m", "karras", 0.3, "Linear", 512, 64], "title": "Ultimate SD Upscale (2x)"}, - {"id": 7, "type": "VAEDecode", "pos": [1150, 100], "title": "VAE Decode"}, - {"id": 8, "type": "PreviewImage", "pos": [1450, 100], "title": "Preview Output"}, - {"id": 9, "type": "SaveImage", "pos": [1450, 550], "widgets_values": ["ultimate_upscale_output"], "title": "API Image Output"} + { + "id": 1, + "type": "LoadImage", + "pos": [ + 50, + 100 + ], + "widgets_values": [ + "input_image.png", + "image" + ], + "title": "API Input Image", + "flags": {}, + "order": 0, + "mode": 0, + "properties": { + "Node name for S&R": "LoadImage" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 2, + "type": "CheckpointLoaderSimple", + "pos": [ + 50, + 400 + ], + "widgets_values": [ + "diffusers/stable-diffusion-xl-base-1.0" + ], + "title": "SDXL Checkpoint Loader", + "flags": {}, + "order": 1, + "mode": 0, + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 3, + "type": "UpscaleModelLoader", + "pos": [ + 50, + 600 + ], + "widgets_values": [ + "RealESRGAN_x2.pth" + ], + "title": "Upscale Model Loader", + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "Node name for S&R": "UpscaleModelLoader" + }, + "size": { + "0": 350, + "1": 100 + } + }, + { + "id": 4, + "type": "CLIPTextEncode", + "pos": [ + 450, + 100 + ], + "widgets_values": [ + "high quality, detailed, sharp" + ], + "title": "API Positive Prompt", + "flags": {}, + "order": 3, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 5, + "type": "CLIPTextEncode", + "pos": [ + 450, + 300 + ], + "widgets_values": [ + "blurry, low quality" + ], + "title": "API Negative Prompt", + "flags": {}, + "order": 4, + "mode": 0, + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 400, + "1": 200 + } + }, + { + "id": 6, + "type": "UltimateSDUpscale", + "pos": [ + 800, + 100 + ], + "widgets_values": [ + 2, + 42, + 20, + 8.0, + "dpmpp_2m", + "karras", + 0.3, + "Linear", + 512, + 64 + ], + "title": "Ultimate SD Upscale (2x)", + "flags": {}, + "order": 5, + "mode": 0, + "properties": { + "Node name for S&R": "UltimateSDUpscale" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 7, + "type": "VAEDecode", + "pos": [ + 1150, + 100 + ], + "title": "VAE Decode", + "flags": {}, + "order": 6, + "mode": 0, + "properties": { + "Node name for S&R": "VAEDecode" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 8, + "type": "PreviewImage", + "pos": [ + 1450, + 100 + ], + "title": "Preview Output", + "flags": {}, + "order": 7, + "mode": 0, + "properties": { + "Node name for S&R": "PreviewImage" + }, + "size": { + "0": 315, + "1": 100 + } + }, + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1450, + 550 + ], + "widgets_values": [ + "ultimate_upscale_output" + ], + "title": "API Image Output", + "flags": {}, + "order": 8, + "mode": 0, + "properties": { + "Node name for S&R": "SaveImage" + }, + "size": { + "0": 315, + "1": 100 + } + } ], "extra": { "workflow_info": { @@ -17,16 +210,53 @@ "version": "1.0.0", "description": "Professional upscaling with Ultimate SD Upscale. Combines AI upscaling with diffusion refinement for superior detail and quality.", "category": "upscaling", - "tags": ["ultimate-sd-upscale", "upscaling", "enhancement", "production"], - "requirements": {"models": ["stable-diffusion-xl-base-1.0", "RealESRGAN"], "custom_nodes": [], "vram_min": "18GB"}, - "parameters": { - "input_image": {"node_id": 1, "type": "image", "required": true}, - "scale": {"node_id": 6, "type": "integer", "default": 2, "options": [2, 4]}, - "tile_size": {"node_id": 6, "type": "integer", "default": 512, "description": "Processing tile size"}, - "denoise": {"node_id": 6, "type": "float", "default": 0.3, "description": "Refinement strength"} + "tags": [ + "ultimate-sd-upscale", + "upscaling", + "enhancement", + "production" + ], + "requirements": { + "models": [ + "stable-diffusion-xl-base-1.0", + "RealESRGAN" + ], + "custom_nodes": [], + "vram_min": "18GB" }, - "performance": {"avg_generation_time": "60-120 seconds (depending on input size)", "vram_usage": "~16-20GB"} + "parameters": { + "input_image": { + "node_id": 1, + "type": "image", + "required": true + }, + "scale": { + "node_id": 6, + "type": "integer", + "default": 2, + "options": [ + 2, + 4 + ] + }, + "tile_size": { + "node_id": 6, + "type": "integer", + "default": 512, + "description": "Processing tile size" + }, + "denoise": { + "node_id": 6, + "type": "float", + "default": 0.3, + "description": "Refinement strength" + } + }, + "performance": { + "avg_generation_time": "60-120 seconds (depending on input size)", + "vram_usage": "~16-20GB" + } } }, "version": 0.4 -} +} \ No newline at end of file