Merge feat/video-edit-input (#15090) into qa/video-edit-combined

Combines the VIDEO_EDIT trim/crop feature with the asset-based video
metadata approach from #15147/#15180. #15090 implemented the same
VIDEO_EDIT node feature (VideoTrim/VideoCrop/LoadVideo edit widget,
DynamicCombo codec, io.VideoEdit type) essentially identically to
#15147, so those files merged cleanly with no functional duplication.

Conflict resolution:
- comfy_api/latest/_input/video_types.py: trivial docstring-only
  conflict on VideoInput.as_cropped(); kept the more descriptive
  docstring from #15090, function body identical on both sides.
- server.py: reverted to master's version, dropping #15090's
  competing `GET /video_metadata` endpoint (and the
  resolve_view_media_path refactor that existed solely to support it).
  That endpoint was #15090's alternative way of sourcing video
  metadata for the frontend widget (live ffprobe via HTTP), which is
  superseded here by #15147/#15180's asset system_metadata extraction
  on ingest/scan. Nothing else in the tree referenced this route, so
  dropping it is safe. No other unique, non-conflicting content from
  #15090 was discarded.
This commit is contained in:
Claude
2026-08-08 00:01:31 +00:00

View File

@@ -64,6 +64,12 @@ class VideoInput(ABC):
"""
Create a new VideoInput spatially cropped to the given pixel rectangle.
The rectangle is clamped to the frame and even-aligned for encoder
compatibility. An empty or full-frame rectangle returns the input
unchanged.
Default implementation materializes the video via get_components();
subclasses should override with lazier strategies when possible.
"""
components = self.get_components()
rect = normalize_crop_rect(