Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1db7aa4
Initial ComfyUI pipeline and client implementations.
jonoomph Feb 12, 2026
32af63a
Refactoring Comfy UI service code to it's own file, improving code to…
jonoomph Feb 12, 2026
559aa8c
Add Comfy audio/video generation pipelines and generalized output import
jonoomph Feb 13, 2026
a881607
Merge branch 'develop' into comfy-ui
jonoomph Feb 14, 2026
263dd13
Adding support for Whisper/SRT subtitles to the Generate dialog. Also…
jonoomph Feb 14, 2026
a20d997
- Add Comfy templates for img2video-svd and RIFE 2x frame interpolat…
jonoomph Feb 15, 2026
2eca529
Add TransNet scene segmentation template and robust segment import ha…
jonoomph Feb 15, 2026
af05981
Lowering quality and fps of text to video (for now)
jonoomph Feb 15, 2026
71951d9
Large refactor of ComfyUI context menus, trying to simplify and impro…
jonoomph Feb 16, 2026
68793f4
Merge branch 'develop' into comfy-ui
jonoomph Feb 16, 2026
e08b0a3
Fixing file multi-selections in this branch (so right click doesn't n…
jonoomph Feb 16, 2026
ab7f0e8
Large refactor to support user-defined ComfyUI JSON files in .opensho…
jonoomph Feb 17, 2026
e9397a8
Merge branch 'develop' into comfy-ui
jonoomph Feb 17, 2026
5c9f81b
- Added new SAM2 Blur Anything templates:
jonoomph Feb 17, 2026
84b6063
- Harden Comfy progress updates after sleep/wake: detect stale WS, re…
jonoomph Feb 18, 2026
0c5eefc
- Fix Comfy progress tracking for meta-batch follow-up prompts and cl…
jonoomph Feb 20, 2026
8e7fa85
- Replaced built-in txt2img-basic and txt2video-svd workflows with WA…
jonoomph Feb 21, 2026
6803d8c
Replaces the WAN-based image workflow with a standard SDXL graph (Che…
jonoomph Feb 21, 2026
6aa3abd
- Comfy scene splitting now returns range metadata and OpenShot creat…
jonoomph Feb 21, 2026
e959c07
- Region UI now supports multi-tool annotations (pos/neg points + rec…
jonoomph Feb 21, 2026
1b6aa17
- Fixed Track Object output routing: Blur/Highlight now only import f…
jonoomph Feb 21, 2026
5da1f6a
Added a loop icon on video preview dialog, and SPACE now controls pla…
jonoomph Feb 21, 2026
58afbf2
- Prevented cross-job state contamination with a per-run cache key fo…
jonoomph Feb 21, 2026
c41c222
- Added Music... ACE 1.5 template + music icon.
jonoomph Feb 22, 2026
f350a18
Fixing selection handling after a generated file was added and auto s…
jonoomph Feb 22, 2026
2d6b311
Fixing SAM2 tracking on images to mirror the functionality on videos:
jonoomph Feb 22, 2026
69faf4c
Make meta batches for tracking objects with SAM2 use dynamic batch si…
jonoomph Feb 22, 2026
c6e8fde
Improvements to theming for AI context menus, generate dialog, and re…
jonoomph Feb 22, 2026
3493483
Fixing Retro theme and removing theme specific code from our region d…
jonoomph Feb 22, 2026
b2adc3f
Fixing playhead snapping inaccuracy on the Experimental timeline, whi…
jonoomph Feb 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/classes/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ def get_assets_path(file_path=None, create_paths=True):
os.mkdir(asset_clipboard_folder)
log.info("New clipboard folder: {}".format(asset_clipboard_folder))

# Create asset ComfyUI output folder
asset_comfy_output_folder = os.path.join(asset_path, "comfyui-output")
if not os.path.exists(asset_comfy_output_folder):
os.mkdir(asset_comfy_output_folder)
log.info("New ComfyUI output folder: {}".format(asset_comfy_output_folder))

return asset_path

except Exception as ex:
Expand Down
36 changes: 36 additions & 0 deletions src/classes/clip_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,50 @@
"""

import logging
import json
from fractions import Fraction
from typing import Any, Mapping, Optional, Tuple

import openshot

from classes.app import get_app

logger = logging.getLogger(__name__)


def apply_file_caption_to_clip(clip_data: Any, file_obj: Any, *, dedupe: bool = True) -> bool:
"""Attach a Caption effect to clip_data when file metadata includes caption text."""
if not isinstance(clip_data, Mapping):
return False
file_data = getattr(file_obj, "data", None)
if not isinstance(file_data, Mapping):
return False
caption_text = str(file_data.get("caption", "") or "").strip()
if not caption_text:
return False

effects = clip_data.get("effects")
if not isinstance(effects, list):
effects = list(effects) if effects else []
clip_data["effects"] = effects

if dedupe:
for effect in effects:
if not isinstance(effect, Mapping):
continue
if str(effect.get("class_name", "")).lower() == "caption":
existing_text = str(effect.get("caption_text", "") or "").strip()
if existing_text == caption_text:
return False

caption_effect = openshot.EffectInfo().CreateEffect("Caption")
caption_effect.Id(get_app().project.generate_id())
caption_json = json.loads(caption_effect.Json())
caption_json["caption_text"] = caption_text
effects.append(caption_json)
return True


def _as_mapping(candidate: Any) -> Mapping[str, Any]:
"""Return dict-style metadata for clips, readers, or similar."""
if isinstance(candidate, Mapping):
Expand Down
Loading