Nodes/comfyui-AGSoft/🎬AGSoft Video Compare
ComfyUI Node

🎬AGSoft Video Compare

Visually compares two videos (VIDEO objects or IMAGE frame batches) within an optional time window (start_second + compare_duration, 0 = whole clip): the window is decoded via the official video.as_trimmed(), so long clips never load into RAM in full; for IMAGE-batch inputs (no fps metadata) the window seconds are converted to frames via image_fps. UI: synced player with a draggable wipe slider, side_by_side (server stream S with both full frames) and difference modes, plus a save button that stores the current comparison frame as PNG into the output folder. Outputs: wipe_preview, side_by_side_preview, diff_frames. Terminal node: runs even with nothing connected. --- Визуально сравнивает два видео (объекты VIDEO или батчи IMAGE) в опциональном временном окне (start_second + compare_duration, 0 = весь ролик): окно декодируется официальным video.as_trimmed(), поэтому длинные ролики не загружаются в RAM целиком; для входов батчем IMAGE (без метаданных fps) секунды окна переводятся в кадры через image_fps. UI: синхронный плеер с перетаскиваемым wipe-слайдером, режимы side_by_side (серверный поток S с оба полными кадрами) и difference, плюс кнопка сохранения текущего кадра сравнения в PNG в папку output. Выходы: wipe_preview, side_by_side_preview, diff_frames. Терминальная нода: выполняется даже без подключённых выходов.

By Art-xmaster·Created about a year ago·Updated a day ago· 32
🎬AGSoft Video Compare
  • video_a
  • video_b
  • wipe_preview
  • side_by_side_preview
  • diff_frames
◄view_modewipe►
◄wipe_position50►
◄diff_scale5.0►
◄start_second0.0►
◄compare_duration20.0►
◄image_fps24.0►
◄resize_modeto_a►
◄resize_methodlanczos►
◄length_modetrim_shortest►
◄frame_step1►
◄preview_width0►
CategoryAGSoft/Video

Inputs (13)

NameTypeDefaultDescription
video_a*Reference side: VIDEO object or IMAGE frame batch. --- Эталон: объект VIDEO или батч кадров IMAGE.
video_b*Candidate side: VIDEO object or IMAGE frame batch. --- Кандидат: объект VIDEO или батч кадров IMAGE.
view_modeCOMBOwipeUI view mode: wipe slider, server stream S with both full frames side by side, or the amplified difference stream. --- Режим просмотра UI: wipe-слайдер, серверный поток S с оба полными кадрами рядом или усиленный поток разницы.
wipe_positionINT500–100Divider position in percent: left of it shows B, right shows A. Also used for the wipe_preview output and the saved frame. --- Позиция разделителя в процентах: слева B, справа A. Используется для выхода wipe_preview и сохраняемого кадра.
diff_scaleFLOAT5.00.1–50Amplification of the visual difference: |A-B|*scale+0.5. --- Усиление визуальной разницы: |A-B|*scale+0.5.
start_secondFLOAT0.00–86400Window start in seconds for BOTH sides (e.g. 10.0 to skip the intro). Decoded via video.as_trimmed(), so skipped part never loads into RAM. --- Начало окна в секундах для ОБЕИХ сторон (например 10.0, чтобы пропустить вступление). Декодируется через video.as_trimmed(), пропущенная часть в RAM не загружается.
compare_durationFLOAT20.00–86400Window length in seconds (default 20). 0 = compare until the end of the clip — WARNING: full decode of long clips needs huge RAM. --- Длина окна в секундах (по умолчанию 20). 0 = сравнивать до конца ролика — ВНИМАНИЕ: полный декод длинных роликов требует огромной RAM.
image_fpsFLOAT24.01–240Assumed fps for IMAGE-batch inputs (they carry no fps metadata): converts the window seconds to frames and times the preview streams. Ignored for VIDEO inputs, which carry their own fps. --- Предполагаемый fps для входов батчем IMAGE (у них нет метаданных fps): переводит секунды окна в кадры и задаёт тайминг превью-потоков. Игнорируется для входов VIDEO — у них свой fps.
resize_modeCOMBOto_aSize mismatch handling: resize B to A, A to B, both to the smaller, or none (error on mismatch). --- Обработка несовпадения размеров: B к A, A к B, оба к меньшему, или none (ошибка при несовпадении).
resize_methodCOMBOlanczosResampling algorithm used when sizes differ. --- Алгоритм ресемплинга при различии размеров.
length_modeCOMBOtrim_shortestLength mismatch handling: trim to the shortest, pad the shorter with black frames, or require equal lengths. --- Обработка разной длины: обрезка до короткого, добивка короткого чёрными кадрами или требование равенства.
frame_stepINT11–240Use every N-th frame for the image outputs. Preview streams always use all frames of the window. --- Брать каждый N-й кадр для выходов IMAGE. Превью-потоки всегда используют все кадры окна.
preview_widthINT00–7680Max width of cached preview streams (0 = original; stream S is twice as wide as a single clip). --- Макс. ширина кэшируемых превью-потоков (0 = оригинал; поток S вдвое шире одного клипа).

Outputs (3)

NameTypeDescription
wipe_previewIMAGEFrames split at wipe_position: left part from B, right part from A. --- Кадры, разрезанные по wipe_position: слева часть B, справа часть A.
side_by_side_previewIMAGEFull frames glued side by side: B on the left, A on the right (same layout as the side_by_side player mode). --- Полные кадры, склеенные рядом: B слева, A справа (та же раскладка, что и в режиме плеера side_by_side).
diff_framesIMAGEAmplified per-frame difference |A-B|*diff_scale+0.5 (compared frames). --- Усиленная покадровая разница |A-B|*diff_scale+0.5 (сравниваемые кадры).