diff --git a/custom_nodes/Comfyui_FSL_Nodes/8WayImgSwitch.py b/8WayImgSwitch.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/8WayImgSwitch.py rename to 8WayImgSwitch.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/FSLGeminiChat.py b/FSLGeminiChat.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/FSLGeminiChat.py rename to FSLGeminiChat.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/FSLGeminiGenerateImage.py b/FSLGeminiGenerateImage.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/FSLGeminiGenerateImage.py rename to FSLGeminiGenerateImage.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/FSLGeminiGenerateImageV8.py b/FSLGeminiGenerateImageV8.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/FSLGeminiGenerateImageV8.py rename to FSLGeminiGenerateImageV8.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/FSLImageSaverWithMetadataV5.py b/FSLImageSaverWithMetadataV5.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/FSLImageSaverWithMetadataV5.py rename to FSLImageSaverWithMetadataV5.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/__init__.py b/__init__.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/__init__.py rename to __init__.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/README_Gemini.md b/custom_nodes/Comfyui_FSL_Nodes/README_Gemini.md deleted file mode 100644 index d582f57..0000000 --- a/custom_nodes/Comfyui_FSL_Nodes/README_Gemini.md +++ /dev/null @@ -1,131 +0,0 @@ -# FSL Gemini & Veo Workflow for ComfyUI - -**Version:** 6.5 (The "Production" Edition) -**Powered By:** Google DeepMind (Gemini 1.5/2.0/3.0, Veo 3.1, Imagen 3) - -This node suite creates a full-stack, cloud-powered AI media studio inside ComfyUI. It offloads heavy processing to Google Cloud, allowing for high-fidelity **Text-to-Video**, **Image-to-Video**, and **Agent-Assisted Creation** without requiring massive local VRAM. - ---- - -## ✨ Core Features - -1. **The "Creative Director" Agent:** A memory-enabled Chat Node that acts as a middleman. It intelligently detects if you want to chat or create. If you want to create, it writes professional "Hidden Hooks" to control the generators. -2. **True Image-to-Video (Identity Preservation):** Direct integration with **Veo 3.1** allows you to send local pixels to the cloud. Veo animates *your* specific image rather than hallucinating a new one from text. -3. **Smart Gatekeeping ($0 Cost Mode):** The Image and Video nodes feature "Gatekeeper Logic." If you are just chatting with the Agent (e.g., "How are you?"), the generators receive empty prompts and "sleep" instantly, incurring **zero cost**. -4. **Robust Cloud Polling:** Uses a custom HTTP polling engine to bypass Python SDK timeouts, ensuring large video files download successfully even if generation takes minutes. -5. **Hybrid Logic:** Automatically switches Veo configuration based on input type (Text vs. Image) to prevent API validation errors. - ---- - -## 🛠️ Installation - -### 1. Requirements -These nodes rely on Google's modern Unified SDK (`google-genai`). - -**For ComfyUI Portable (Windows):** -Open a terminal in your `ComfyUI_windows_portable` folder and run: -```bash -.\python_embeded\python.exe -m pip install --upgrade google-genai requests -``` - -**For Standard Python:** -```bash -pip install --upgrade google-genai requests -``` - -### 2. API Key & Billing -* **Gemini/Imagen:** Works with standard Google AI Studio keys. -* **Veo (Video):** Requires a Google Cloud Project with **Billing Enabled**. Free-tier keys usually return 403/404 errors for video. - -**Setup:** -* **Option A (Best):** Set an Environment Variable `GEMINI_API_KEY` or `GOOGLE_API_KEY` in your startup batch file. -* **Option B:** Paste the key directly into the `api_key` widget on every node. - ---- - -## 📦 The Node Suite - -### 1. FSL Gemini Chat (Unified SDK) -* **Role:** The Director / Logic Engine. -* **Inputs:** Text Prompt + Optional Image (Vision). -* **Agent Mode:** - * **Text-to-Media:** If you ask for a video, it writes a detailed prompt (Lighting, Camera Move, Physics) into the `MEDIA_PROMPT_HOOK`. - * **Image-to-Media:** If an image is connected, it writes a "Fidelity Prompt" instructing the generator to *preserve the identity* of the input image. -* **Outputs:** `LATEST_REPLY` (Chat), `MEDIA_PROMPT_HOOK` (Technical Prompt), `CONVERSATION_HISTORY` (Log). - -### 2. FSL Google Veo Generator -* **Role:** The Animator. -* **Inputs:** Text Prompt (from Chat Hook) + Optional Image. -* **Feature:** **Save Location**. - * *Note:* Paths are relative to the **ComfyUI Root Folder**, not the Output folder. - * Example: `my_videos` saves to `ComfyUI/my_videos/`. - * Example: `output/my_videos` saves to `ComfyUI/output/my_videos/`. - * Example: `C:/Videos/` saves to an absolute path. - -### 3. FSL Imagen Generator (Pro) -* **Role:** The Artist (Fast). -* **Engine:** Google Imagen 3. -* **Gatekeeper:** Returns a tiny black square instantly if prompt is empty. - -### 4. FSL Gemini Generate Image (Legacy) -* **Role:** The Editor (Advanced). -* **Usage:** Keep this node if you need **Inpainting**, **Masking**, or **Image-to-Image** editing features not present in the lightweight Pro node. -* *Tip:* If you encounter timeouts with this node, edit the `.py` file and increase `timeout=60` to `timeout=180`. - ---- - -## 🚦 Veo Logic & Modes (Critical) - -The **Veo Generator** node has two distinct modes of operation depending on what you connect to it. - -### Mode A: Image-to-Video (Identity Preservation) -* **Trigger:** A wire is connected to `image_input`. -* **Behavior:** Veo animates the pixels provided. -* **Constraint:** **Duration and Aspect Ratio sliders are IGNORED.** - * *Why?* The Veo 3.1 API currently crashes if you try to force a custom duration or aspect ratio onto an existing image. The node automatically strips these settings to prevent errors. - * *Result:* You will get the default Veo output (usually ~5 seconds, Native Aspect Ratio). - -### Mode B: Text-to-Video (Generation) -* **Trigger:** Nothing is connected to `image_input`. -* **Behavior:** Veo generates a video from scratch based on words. -* **Capabilities:** Full control over `duration_seconds` (5s - 8s) and `aspect_ratio`. - -### 🔄 How to Switch Modes -If you want to create a video from scratch (Text-to-Video), you **must disconnect** the image wire. -* **Method:** Drag the wire off the `image_input` pin. -* If you leave the image connected but type "Create a video of a spaceship", Veo will get confused and try to turn your input image *into* a spaceship (or crash). - ---- - -## 🔌 Wiring Strategies - -### Strategy A: The "Creative Director" (Text-to-Video) -1. Connect `FSL Gemini Chat` (Hook) -> `FSL Veo Generator` (Prompt). -2. Ensure `image_input` on Veo is **Disconnected**. -3. **Prompt:** "Generate a cinematic video of a cyberpunk city." - -### Strategy B: "Identity Preservation" (Image-to-Video) -1. **The Y-Split:** Connect your **Load Image** node to **TWO** inputs: - * `FSL Gemini Chat` -> `image_input` (So the Agent sees context). - * `FSL Veo Generator` -> `image_input` (So Veo gets the raw pixels). -2. **Prompt:** "Animate this person turning their head." -3. **Result:** The Agent tells Veo to "preserve fidelity," and Veo uses the direct pixel connection to animate your exact image. - ---- - -## ❓ Troubleshooting - -**Q: Veo Error: "The number value for durationSeconds is out of bound"** -* **A:** This happens if you are in **Image-to-Video** mode but older code was trying to force a duration. Ensure you are using **v6.5+** of the nodes, which automatically disables config parameters when an image is detected. - -**Q: Load Video Path Error: "video is not a valid path..."** -* **A:** This means the Veo node failed to generate the MP4, so it passed an Error Message string instead of a file path. Check the ComfyUI console/terminal to see the real error (usually API Key or Safety Filter related). - -**Q: "RAI Media Filtered" / Blocked by Safety** -* **A:** Google blocked the generation. Veo is strict about photorealistic people. Try describing the *action* rather than the *person*, or try the "Minimize Safety" toggle (though Veo 3.1 is very strict regardless). - ---- - -## 📝 Credits -* **Developer:** FSL (Fred's Super Logic) -* **Engine:** Google DeepMind (Gemini / Veo / Imagen) \ No newline at end of file diff --git a/custom_nodes/Comfyui_FSL_Nodes/fsl_composite_with_mask_cropped.py b/fsl_composite_with_mask_cropped.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/fsl_composite_with_mask_cropped.py rename to fsl_composite_with_mask_cropped.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/fsl_ensure_nhwc_batch.py b/fsl_ensure_nhwc_batch.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/fsl_ensure_nhwc_batch.py rename to fsl_ensure_nhwc_batch.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/fsl_image_memory.py b/fsl_image_memory.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/fsl_image_memory.py rename to fsl_image_memory.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/fsl_prompt_compose.py b/fsl_prompt_compose.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/fsl_prompt_compose.py rename to fsl_prompt_compose.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/fsl_save_and_strip_alpha.py b/fsl_save_and_strip_alpha.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/fsl_save_and_strip_alpha.py rename to fsl_save_and_strip_alpha.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/manual_alpha_mask_painter.py b/manual_alpha_mask_painter.py similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/manual_alpha_mask_painter.py rename to manual_alpha_mask_painter.py diff --git a/custom_nodes/Comfyui_FSL_Nodes/requirements.txt b/requirements.txt similarity index 100% rename from custom_nodes/Comfyui_FSL_Nodes/requirements.txt rename to requirements.txt