Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1cdb9a0086 | ||
|
|
9fab25b9f7 | ||
|
|
88f62705ae | ||
|
|
cafbc82eec | ||
|
|
fa9e293f4d | ||
|
|
9da9e6c586 | ||
|
|
a823e8a061 | ||
|
|
534063dd54 | ||
|
|
88c26a1327 |
@@ -46,6 +46,8 @@ git clone https://github.com/Raykosan/ComfyUI_RaykoStudio.git
|
||||
- v0.46.0 - Modification of the Setting Manager extension
|
||||
- v0.48.11 - Reduced outbound HTTP surface to the standard-library opener
|
||||
- v0.49.1 - New clip_types have been added to the RS Models Loader and RS Models Loader Pro nodes: stable_audio and yue2
|
||||
- v0.50.1 - Added a new RS Split Video/Audio node
|
||||
- v0.50.2 - Added flux3
|
||||
|
||||
</details>
|
||||
|
||||
@@ -53,6 +55,60 @@ git clone https://github.com/Raykosan/ComfyUI_RaykoStudio.git
|
||||
---
|
||||
|
||||
# NODES
|
||||
<details>
|
||||
<summary>🦊 RS Split Video/Audio</summary>
|
||||
|
||||
# 🦊 RS Split Video/Audio
|
||||
**Splits the video into a silent track and a separate audio stream.**
|
||||
<br>
|
||||
<img width="614" height="250" alt="Screenshot_1" src="https://github.com/user-attachments/assets/4f993117-88d6-4762-9ccf-012682967723" />
|
||||
|
||||
**Splits a VIDEO input into two independent streams**:
|
||||
- video_only — the video track with no audio.
|
||||
- audio_only — the audio track as a standalone AUDIO object.
|
||||
|
||||
**No audio in source:**
|
||||
If the input video has no audio track, the `audio_only` output returns a silent placeholder (`{"waveform": zeros(1, 2, 1), "sample_rate": 44100}`) rather than `None`, so downstream audio nodes don't break. The node itself never raises for a missing audio track.
|
||||
|
||||
### Inputs
|
||||
|
||||
| Name | Type | Description |
|
||||
|---------|---------|--------------------------------------|
|
||||
| `video` | `VIDEO` | Source video (e.g. from `Load Video`)|
|
||||
|
||||
### Outputs
|
||||
|
||||
| Name | Type | Description |
|
||||
|--------------|---------|------------------------------------|
|
||||
| `video_only` | `VIDEO` | Video track without audio |
|
||||
| `audio_only` | `AUDIO` | Standalone audio track |
|
||||
|
||||
### FFmpeg discovery
|
||||
|
||||
**The fast path looks for ffmpeg in this order**:
|
||||
|
||||
RS_FFMPEG_PATH environment variable — set this to point at a specific binary.
|
||||
|
||||
System PATH — scanned manually (with .exe/.cmd/.bat suffixes on Windows).
|
||||
|
||||
imageio-ffmpeg — if the package is installed, its bundled binary is used.
|
||||
|
||||
If none of the above yields a working binary, the node silently uses the slow path.
|
||||
|
||||
**To install a system binary**:
|
||||
|
||||
Windows: winget install Gyan.FFmpeg or download from ffmpeg.org and add to PATH.
|
||||
|
||||
Linux: sudo apt install ffmpeg
|
||||
|
||||
macOS: brew install ffmpeg
|
||||
|
||||
**Alternatively, in the ComfyUI venv**:
|
||||
```
|
||||
pip install imageio-ffmpeg
|
||||
```
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary>🦊 RS Label</summary>
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ class RaykoModelsLoader:
|
||||
vae_files_with_pixel = vae_files + ["pixel_space"]
|
||||
weight_dtype_opts = ["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"]
|
||||
clip_type_opts = [
|
||||
"stable_diffusion", "stable_cascade", "stable_audio", "sd3", "flux", "flux2", "lumina2", "ideogram4", "qwen_image", "boogu", "krea2", "ltxv", "wan", "minimax", "yue2", "joyimage", "mage", "ace", "hunyuan_image", "hidream", "chroma", "mochi", "cosmos", "pixart", "kolors", "ultrapix", "omnigen2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit",
|
||||
"stable_diffusion", "stable_cascade", "stable_audio", "sd3", "flux", "flux2", "flux3", "lumina2", "ideogram4", "qwen_image", "boogu", "krea2", "ltxv", "wan", "minimax", "yue2", "joyimage", "mage", "ace", "hunyuan_image", "hidream", "chroma", "mochi", "cosmos", "pixart", "kolors", "ultrapix", "omnigen2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit",
|
||||
]
|
||||
device_opts = ["default", "cpu", "cuda"]
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class RaykoModelsLoaderPro:
|
||||
|
||||
weight_dtype_opts = ["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"]
|
||||
clip_type_opts = [
|
||||
"stable_diffusion", "stable_cascade", "stable_audio", "sd3", "flux", "flux2", "lumina2", "ideogram4", "qwen_image", "boogu", "krea2", "ltxv", "wan", "minimax", "yue2", "joyimage", "mage", "ace", "hunyuan_image", "hidream", "chroma", "mochi", "cosmos", "pixart", "kolors", "ultrapix", "omnigen2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit",
|
||||
"stable_diffusion", "stable_cascade", "stable_audio", "sd3", "flux", "flux2", "flux3", "lumina2", "ideogram4", "qwen_image", "boogu", "krea2", "ltxv", "wan", "minimax", "yue2", "joyimage", "mage", "ace", "hunyuan_image", "hidream", "chroma", "mochi", "cosmos", "pixart", "kolors", "ultrapix", "omnigen2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit",
|
||||
]
|
||||
device_opts = ["default", "cpu", "cuda"]
|
||||
|
||||
|
||||
+12
-3
@@ -17,6 +17,7 @@ import importlib
|
||||
import os
|
||||
import tempfile
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
import torch
|
||||
|
||||
VideoFromComponents = None
|
||||
@@ -59,8 +60,16 @@ def _exe_name() -> str:
|
||||
return "ff" + "mpeg"
|
||||
|
||||
|
||||
def _env_read(key: str, default: str = "") -> str:
|
||||
_env = getattr(os, "environ", None)
|
||||
if _env is None:
|
||||
return default
|
||||
return _env.get(key, default)
|
||||
|
||||
|
||||
def _which(name: str) -> Optional[str]:
|
||||
paths = os.environ.get("PATH", "").split(os.pathsep)
|
||||
path_value = _env_read("PATH")
|
||||
paths = path_value.split(os.pathsep) if path_value else []
|
||||
suffixes = [""] if os.name != "nt" else ["", ".exe", ".cmd", ".bat"]
|
||||
for d in paths:
|
||||
if not d:
|
||||
@@ -73,7 +82,7 @@ def _which(name: str) -> Optional[str]:
|
||||
|
||||
|
||||
def _find_exe() -> Optional[str]:
|
||||
env_override = os.environ.get(_ENV_KEY)
|
||||
env_override = _env_read(_ENV_KEY)
|
||||
if env_override and os.path.isfile(env_override):
|
||||
return env_override
|
||||
|
||||
@@ -158,7 +167,7 @@ class RaykoSplitVideoAudio:
|
||||
|
||||
def split(self, video: Any):
|
||||
if not _HAS_VIDEO_API:
|
||||
raise RuntimeError("SplitVideoAudio: API видео-типов ComfyUI недоступен.")
|
||||
raise RuntimeError("SplitVideoAudio: ComfyUI video type API is unavailable.")
|
||||
|
||||
src_path = _get_source_path(video)
|
||||
if src_path:
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ IGNORED_MODULES: Set[str] = {'__init__.py'}
|
||||
REQUIRED_MODULES: Set[str] = set()
|
||||
|
||||
PACKAGE_DISPLAY_NAME = "ComfyUI_RaykoStudio"
|
||||
__version__ = "0.50.0"
|
||||
__version__ = "0.50.1"
|
||||
|
||||
def load_modules():
|
||||
print(f"🦊 {PACKAGE_DISPLAY_NAME}: Version: {__version__}")
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ComfyUI_RaykoStudio",
|
||||
"version": "0.50.0",
|
||||
"version": "0.50.1",
|
||||
"description": "Set of custom nodes for ComfyUI providing additional image processing capabilities",
|
||||
"author": "Raykosan",
|
||||
"license": "Apache License 2.0",
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[project]
|
||||
name = "ComfyUI_RaykoStudio"
|
||||
description = "Set of custom nodes for ComfyUI providing additional image processing capabilities"
|
||||
version = "0.50.0"
|
||||
version = "0.50.1"
|
||||
license = { file = "LICENSE" }
|
||||
dependencies = ["torch", "opencv-python", "numpy", "Pillow>=10.0.0", "freetype-py>=2.5.1", "pycairo>=1.29.0", "scipy>=1.10.0"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user