{"id":33899363,"url":"https://github.com/Merserk/ComfyUI-Flow-Assistor","last_synced_at":"2025-12-16T21:00:39.838Z","repository":{"id":326440522,"uuid":"1105558994","full_name":"Merserk/ComfyUI-Flow-Assistor","owner":"Merserk","description":"Essential utility nodes for ComfyUI: Manage sequential prompt queues, automate complex camera angles, batch process text files, and select aspect-ratio correct resolutions effortlessly.","archived":false,"fork":false,"pushed_at":"2025-12-08T19:45:07.000Z","size":68,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-09T09:48:32.060Z","etag":null,"topics":["comfy-ui","comfyui","comfyui-custom-node","comfyui-node","comfyui-nodes"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Merserk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-27T19:54:06.000Z","updated_at":"2025-12-08T19:45:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"d42b9ff2-f9eb-4303-a875-3aba38204c7e","html_url":"https://github.com/Merserk/ComfyUI-Flow-Assistor","commit_stats":null,"previous_names":["merserk/comfyui-flow-assistor"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Merserk/ComfyUI-Flow-Assistor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merserk%2FComfyUI-Flow-Assistor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merserk%2FComfyUI-Flow-Assistor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merserk%2FComfyUI-Flow-Assistor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merserk%2FComfyUI-Flow-Assistor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Merserk","download_url":"https://codeload.github.com/Merserk/ComfyUI-Flow-Assistor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merserk%2FComfyUI-Flow-Assistor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27771143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comfy-ui","comfyui","comfyui-custom-node","comfyui-node","comfyui-nodes"],"created_at":"2025-12-11T22:00:48.896Z","updated_at":"2025-12-16T21:00:39.828Z","avatar_url":"https://github.com/Merserk.png","language":"Python","funding_links":[],"categories":["Workflows pushed in 7 days"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    ComfyUI-Flow-Assistor\n    \u003cbr\u003e\n    \u003csub\u003e\u003csup\u003e\u003ci\u003eEssential utility nodes for ComfyUI\u003c/i\u003e\u003c/sup\u003e\u003c/sub\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"100%\" alt=\"image\" src=\"https://github.com/user-attachments/assets/c9306ce8-96b0-4535-91f7-144f2ac27840\" /\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n# Get Started\n\n## Install\n\n1. Install the great [ComfyUI](https://github.com/comfyanonymous/ComfyUI).\n2. Clone this repo into `custom_nodes`:\n    ```bash\n    cd ComfyUI/custom_nodes\n    git clone https://github.com/Merserk/ComfyUI-Flow-Assistor.git\n    ```\n3. Start up ComfyUI.\n\n\u003cbr\u003e\n\n## 🛠️ The Nodes\n\n### 1. 📝 Prompt Queue\n**Iterate through prompt lines one by one.**\n\nInstead of randomizing a list, this node strictly follows the order of your text. It is perfect for testing specific prompt variations or storytelling sequences.\n\n\u003e **How it works:**  \n\u003e Paste a multi-line list of prompts. Every time you queue a generation, the node outputs the *next* line in the list.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n| Parameter | Description |\n| :--- | :--- |\n| **Prompts** | The multi-line text input. |\n| **On End** | Behavior when the list finishes: `empty` (stop outputting), `repeat_last` (keep sending the last line), or `loop` (start over). |\n| **Reset Trigger** | Change this integer value to force the queue back to line 1. |\n| **Strip / Skip** | Automatically cleans up whitespace and ignores empty lines. |\n\n\u003c/details\u003e\n\n---\n\n### 2. 📂 Prompt Queue (From Folder)\n**Batch processing made simple.**\n\nStop copying and pasting. Point this node to a folder on your computer, and it will read text files (`.txt`, `.json`, etc.) one by one.\n\n\u003e **Use Case:**  \n\u003e Great for processing wildcards, long metadata files, or batch-generating images based on a library of text descriptions stored locally.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n| Parameter | Description |\n| :--- | :--- |\n| **Folder Path** | The absolute path to your directory (e.g., `C:/Prompts`). |\n| **Extensions** | Comma-separated list of file types to read (default: `txt, json`). |\n| **On End** | `empty` (returns empty string), `loop` (starts at first file), `hold_last` (repeats last file). |\n| **Outputs** | Returns both the **content** of the file and the **filename**. |\n\n\u003c/details\u003e\n\n---\n\n### 3. 🎥 Camera Angle Control\n**Professional camera descriptions without the hassle.**\n\nGenerating specific camera angles in Stable Diffusion can be hit-or-miss. This node constructs precise camera prompts based on rotation, height, depth, and focal length.\n\n**Three Output Modes:**\n1. **Natural:** \"camera rotated slightly to the right, camera raised high angle...\"\n2. **Technical:** \"rotation 45.0°, vertical up 30.0...\"\n3. **Keywords:** \"right side view, high angle, close-up...\"\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n*   **Rotation:** Pan the camera around the subject (Front → Side → Rear).\n*   **Vertical:** Move the camera up or down (Bird's Eye → Eye Level → Worm's Eye).\n*   **Depth:** Push in or pull out (Macro → Close-up → Wide Shot).\n*   **Focal Length:** Simulate lens compression (24mm Wide Angle to 600mm Super Telephoto).\n*   **Prefix/Suffix:** Add extra framing text easily.\n\n\u003c/details\u003e\n\n---\n\n### 4. 📐 Resolution Selector (Groups)\n**Standardized resolutions with aspect ratios.**\n\nStop guessing pixel dimensions. This node groups resolutions by Megapixel count (0.25MP to 4MP) and provides standard aspect ratios (1:1, 16:9, 4:3, 21:9, etc.).\n\n\u003e **Logic:**  \n\u003e Select a resolution from the dropdown, then **Enable** the switch for that group. The node prioritizes the highest enabled quality group (e.g., if both 1MP and 4MP are enabled, it uses 4MP).\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Available Resolutions\u003c/b\u003e\u003c/summary\u003e\n\n*   **0.25MP:** SD 1.5 style small generations.\n*   **0.6MP:** Intermediate sizes.\n*   **1MP (Default):** Standard SDXL / SD 1.5 Hi-Res.\n*   **2MP - 4MP:** High-resolution upscaling targets.\n*   **Aspect Ratios:** Covers 1:1, 4:3, 3:4, 3:2, 2:3, 16:9, 9:16, 21:9, 9:21.\n\n\u003c/details\u003e\n\n---\n\n### 5. 🖼️ Image Resolution Fit\n**Resize images while keeping aspect ratio.**\n\nAllows you to resize an input image to a specific Megapixel target (e.g., 1MP, 2MP) without distorting it. The node automatically calculates the correct width and height to preserve the original shape and rounds dimensions to multiples of 8.\n\n\u003e **Use Case:**  \n\u003e Perfect for Image-to-Image workflows where you want to upscale or downscale a source image to a standard generation size (like 1024x1024 total pixels) but don't want to crop or stretch it.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n| Parameter | Description |\n| :--- | :--- |\n| **Resolution Select** | Choose the target Megapixel count (0.25MP to 4MP). |\n| **Logic** | Calculates `sqrt(target_pixels / current_pixels)` to scale both dimensions equally. |\n| **Outputs** | Returns the resized **Image**, a matching empty **Latent**, and the new **Width/Height**. |\n\n\u003c/details\u003e\n\n---\n\n### 6. ✖️ Multiplication (Dual \u0026 Latent)\n**Mathematical scaling for custom upscaling.**\n\nTakes two integer inputs (like Width and Height) and an optional Latent, and multiplies them by a float factor.\n\n\u003e **Use Case:**  \n\u003e Use this for \"1.5x Upscales\" or \"2x Hires Fix\". Connect your base width/height, set the multiplier to `1.5`, and feed the output into your latent upscaler or resize node.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n| Parameter | Description |\n| :--- | :--- |\n| **Multiplier** | The scaling factor (e.g., `1.5` or `2.0`). |\n| **Inputs** | Accepts two Integers (`value_1`, `value_2`) and a `Latent`. |\n| **Outputs** | Returns the multiplied integers and the bilinearly interpolated latent. |\n\n\u003c/details\u003e\n\n---\n\n### 7. 🧹 VRAM/RAM Cleaner\n**Manage your resources mid-workflow.**\n\nA \"Pass-through\" node that can connect to **any** input (Model, VAE, Image, etc.). It passes the data through unchanged but triggers a garbage collection and VRAM flush event when executed.\n\n\u003e **Modes:**  \n\u003e 1. **Current:** Unloads the specific model passing through the node.  \n\u003e 2. **Others:** Unloads everything else, keeping only the passing model in VRAM.  \n\u003e 3. **All:** Unloads everything to system RAM (clean slate).\n\n---\n\n### 8. 🎮 Flow Control (Sidecar Bypass)\n**Toggle nodes On/Off remotely.**\n\nA control panel that connects to up to 4 other nodes. This acts as a \"Sidecar\" — it does not sit in the flow of data, but rather controls the logic of the connected nodes.\n\n\u003e **How it works:**\n\u003e 1. Connect a node (e.g., a KSampler or ControlNet) to an `input` slot.\n\u003e 2. Toggle the switch on this node.\n\u003e 3. **Off (BYPASS):** Forces the connected node into Bypass mode (purple).\n\u003e 4. **Active:** Forces the connected node into Always/Normal mode.\n\n---\n\n### 9. 🔀 Any Passthrough\n**Universal rerouting tools.**\n\nUse these to clean up \"spaghetti\" wires or create fallback logic. These nodes accept **any** connection type (Model, Image, String, Latent, etc.).\n\n*   **Any Passthrough (6 → 1):** Takes up to 6 inputs. Outputs the **first** one that is not null. Great for fallback defaults.\n*   **Any Passthrough (1 → 6):** Takes 1 input and duplicates it to 6 outputs. Great for organizing wires from a single source.\n\n---\n\n### 10. ⏱️ Add Delay\n**Pause execution for debugging.**\n\nA simple node that connects to any data type, waits for a specified number of seconds, and then passes the data through unchanged. Useful for timing API calls or debugging complex flows.\n\n---\n\n### 11. 📺 Show Text\n**Display text directly on the graph.**\n\nConnect any string output (like the `Prompt Queue` or `Camera Angle Control`) to this node. It will display the text content inside a widget box on the node itself. Useful for verifying what is actually being sent to your CLIP encoder.\n\n---\n\n### 12. 🎨 CLIP Text Encode (Prompt Enrichment)\n**Standard conditioning with built-in style power.**\n\nWhy copy-paste \"masterpiece, best quality, 4k...\" every time? This node acts exactly like the standard CLIP Text Encode but includes a dropdown with **20 curated style presets**.\n\n\u003e **Use Case:**\n\u003e Quickly test how your prompt looks in \"Anime Style\" vs \"Photographic\" without rewriting your text, or use utility presets like \"White Background\" for assets.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n| Parameter | Description |\n| :--- | :--- |\n| **Text** | Your main prompt input. |\n| **Preset** | Choose from 20 styles including: *Cinematic, Digital Art, Dark Fantasy, 3D Render, Crisp/Sharp Focus, Huge Scene, White Background, etc.* |\n| **Behavior** | Appends the specific style keywords to the end of your prompt and generates the Conditioning. |\n\n\u003c/details\u003e\n\n---\n\n### 13. 🖱️ Visual Marquee (Interactive)\n**Pause, Select, and Refine.**\n\nA Human-in-the-Loop tool that pauses your workflow and opens a popup editor over your generated image. You can draw a crop box to select a specific area, then resume the workflow to process just that area.\n\n\u003e **How it works:**\n\u003e 1. The node generates a preview and pauses the execution.\n\u003e 2. A popup appears in your browser. Draw a selection box.\n\u003e 3. Click **Confirm**. The workflow resumes, outputting the cropped image, a mask, and tile coordinates.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔻 Click for Parameters \u0026 Features\u003c/b\u003e\u003c/summary\u003e\n\n| Parameter | Description |\n| :--- | :--- |\n| **Max Resolution** | If `Original Size` is disabled, the crop will be upscaled/downscaled so the longest side matches this value. |\n| **Original Size** | **True:** Returns the exact pixels you selected. **False:** Resizes the selection to `Max Resolution`. |\n| **Outputs** | `cropped_image`, `mask`, and `tile_data` (required for merging back later). |\n\n\u003c/details\u003e\n\n---\n\n### 14. 🧩 Tile Compositor (Merge)\n**Seamlessly paste refined details back.**\n\nThe partner node to **Visual Marquee**. After you have processed/upscaled/inpainted your cropped area, this node puts it back into the original full-size image at the exact correct coordinates.\n\n\u003e **Features:**\n\u003e *   **Auto-Scaling:** Automatically handles size differences if you upscaled the crop in the middle of the workflow.\n\u003e *   **Feathering:** Blends the edges of the pasted tile to prevent visible seams.\n\n\u003cbr\u003e\n\n## 🚀 Workflow Examples\n\n### The \"Storyteller\" Batch\n1. Create a text file with 10 different scenes describing a story.\n2. Use **Prompt Queue** to paste them in.\n3. Connect output to your CLIP Text Encode.\n4. Set \"Batch Count\" in ComfyUI to 10.\n5. Hit Queue. You get 10 images, one for each scene, in order.\n\n### The \"Cinematographer\"\n1. Connect **Camera Angle Control** to a text concatenator or CLIP Encode.\n2. Set Output Format to `Natural`.\n3. Set Focal Length to `85mm` (Portrait) and Depth to `Close-up`.\n4. Resulting Prompt: *\"85.0mm portrait lens with compression, camera very close, close-up\"* appended to your main prompt.\n\n### The \"Smart Upscaler\"\n1. Connect your base `Width` and `Height` to **Multiplication (Dual)**.\n2. Set Multiplier to `1.5`.\n3. Connect the output `Result 1` and `Result 2` to a \"Latent Upscale\" node.\n4. This dynamically calculates a 1.5x resolution regardless of your starting aspect ratio.\n\n### The \"Instant Style Switcher\"\n1. Use **CLIP Text Encode (Prompt Enrichment)** instead of the standard node.\n2. Write a simple prompt: *\"A cat sitting on a wall\"*.\n3. Select Preset: **Cyberpunk**.\n4. Result: It generates *\"A cat sitting on a wall, cyberpunk, neon lights, synthwave, futuristic...\"*.\n5. Switch Preset to **Line Art** or **White Background** to instantly change the vibe.\n\n### The \"Interactive Zoom \u0026 Enhance\"\n1. Feed an image into **Visual Marquee**.\n2. Run flow. It pauses. Select a face or detail. Click Confirm.\n3. Feed `cropped_image` into a KSampler (Img2Img) or UltimateSDUpscale to add detail.\n4. Feed the Result, the Original Image, and the `tile_data` into **Tile Compositor**.\n5. Result: The original image with a high-res, refined detail pasted back in seamlessly.\n\n\u003cbr\u003e\n\n## 🤝 Contributing\n\nIf you have ideas for new flow-assisting nodes or improvements to existing ones, feel free to open an issue or submit a pull request!\n\n## 📄 License\nAGPL-3.0 License. Feel free to use this in any project, personal or commercial.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMerserk%2FComfyUI-Flow-Assistor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMerserk%2FComfyUI-Flow-Assistor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMerserk%2FComfyUI-Flow-Assistor/lists"}