- Auto Stitch: optional crossfade/interpolate transition bridge between clips
(itda/stitch.py render_bridge, itda/server.py stitch_bridge endpoint)
- Timeline: real xfade-based transitions (dissolve/wipe/slide/etc.) between
overlapping clips on export (itda/export.py)
- Standalone app: itda_standalone.py entrypoint, routes/paths made
ComfyUI-optional (itda/server.py, itda/paths.py), install/update scripts
- Send To ComfyUI: HTTP upload path for standalone mode with no shared
filesystem (itda/media.py send_clip_to_comfy_http, via ComfyUI's own
/upload/image API)
- Fix box-select cursor misalignment (duplicate ruler-height offset in the
visual box, double-counted scroll in the lane hit-test)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Completes the v0.1.5 -> v1.0 roadmap and hardens the path handling around it.
Features
- Auto Stitch: recommends where to cut between two clips, scoring candidates
on frame similarity and optical-flow motion continuity (recommend + Apply,
never an automatic edit).
- AI Detect: scene-change detection (ffmpeg scene score) and beat tracking
(librosa), with beats used as snap targets.
- Pre-render: flattens the marked range into one cached file for smooth
playback; invalidated automatically by any edit.
- Version Stack, Wipe Compare, Box/Shift select, per-clip Solo/Gain,
MOV/WebM export, whole-timeline Send To ComfyUI.
Security
- Contain clip paths on export. A clip's path is read from the project file
and POST /itda/api/project/<name> stores arbitrary JSON, so any local
process could point a clip at any file, have ffmpeg composite it into the
export, and fetch it back via /itda/api/file.
- Contain the export path in ITDA Load Export. The node trusted "path" from
last_export.json and handed it straight to a decoder, so a tampered
manifest could emit any file's contents as node output.
- Reject dot-only project names. safe_name() stripped separators but passed
"." and ".." through, collapsing media/<project> to the whole ITDA root;
media/delete would then accept any file under input/ITDA.
- Validate drawtext colors. Unvalidated color/shadow_color were interpolated
into the ffmpeg filter, so "ffffff:textfile=..." appended a real drawtext
option. Also set expansion=none.
Fixes
- ffmpeg no longer blocks ComfyUI's event loop (an export froze the whole UI
for its duration); all calls now run off-loop.
- Auto Stitch no longer ranks on audio: measured against known-correct cut
points it could not separate good cuts from bad, and demoted the perfect
cut to last. Frame + motion scores 5/5 on ground truth.
Removed itda_server.py, web/itda_editor.html/.css and an empty
itda_client.js (all superseded and unreferenced), and stopped tracking
__pycache__.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>