3 Commits
Author SHA1 Message Date
Rayko a823e8a061 Update README.md 2026-10-05 01:32:30 +03:00
Raykosan 534063dd54 Added a new RS Split Video/Audio node. 2026-10-05 01:31:51 +03:00
Rayko 88c26a1327 Update README.md 2026-10-05 01:00:25 +03:00
2 changed files with 42 additions and 3 deletions
+30
View File
@@ -46,6 +46,7 @@ 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
</details>
@@ -53,6 +54,35 @@ 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 |
</details>
<details>
<summary>🦊 RS Label</summary>
+12 -3
View File
@@ -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: