From cc27208d2aca2cb21cd38dd001b34f488ef24c7c Mon Sep 17 00:00:00 2001 From: Melbar Date: Tue, 5 May 2026 00:06:39 +0200 Subject: [PATCH] Per-shot match for beats with internal cuts; protect cache on --beat runs Two issues fixed: 1. Beats with internal hard cuts (e.g. man-shot then back to woman) were being approximated by a single source clip because the multi-segment path only triggered for fade-bounded multi-island beats. Added _reference_shot_segments(), which returns the shot ranges by splitting each visible island at detected internal cuts. The multi-island gate in cmd_match and the per-island loop in _match_unmatched_visual_segments now use shots, so any beat with cuts > 0 produces one MatchSegment per shot. Each shot is matched independently against the source movie. Effect on Beat 10: 1 segment (3.32 s in scene 558) -> 3 segments covering shots 0-0.88 s, 0.88-2.64 s, 2.64-3.32 s in scenes 554, 559, 556 respectively, with the previously missing "back to woman" cut now correctly placed in scene 556. 2. Targeted --beat N runs were silently dropping cache entries for other beats whose old scores no longer pass current quality gates (_normalize_cached_results runs at load time and removes them). The save path now re-loads the raw cache from disk and writes back every non-targeted beat verbatim, so a per-beat run can never regress another beat's stored match. Co-Authored-By: Claude Opus 4.7 --- CUTTER_REPORT.html | 2 +- CUTTER_REPORT.md | 6 ++-- cli.py | 71 +++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 68 insertions(+), 11 deletions(-) diff --git a/CUTTER_REPORT.html b/CUTTER_REPORT.html index 2bee46e..3c4a230 100644 --- a/CUTTER_REPORT.html +++ b/CUTTER_REPORT.html @@ -41,4 +41,4 @@ table.tab td.num{text-align:right;font-variant-numeric:tabular-nums;}
-

Cutter-Report — 2026-05-04

Trailer BehindTheRedDoor_Trailer_REFERENCE.mp4 @ 25.000 fps
Source BehindTheRedDoor_FTR_1080P_2398_Fixed.mp4 @ 23.976 fps
Trailer-TC in Trailer-Framerate, Source-TC in Source-Framerate.
25 Beats — 23 automatisch (6 bestätigt) — 2 manuell.

Status-Legende

StatusBedeutungWas tun?
OKbestätigt durch CV + Vision-Phasenprüfungübernehmen, optional sichten
?korrekte Szene, Phase ggf. um wenige Frames verschobenim NLE prüfen, Source-In nachjustieren
MAN.kein automatischer Treffermanuell suchen oder Schwarzfade

Beat-Tabelle

BeatTrailer In / OutSource In / OutScoreStatusPhase
000:00:00:00–00:00:03:0000:00:03:19–00:00:05:090.597?logo animation assembling from distorted shapes with motion blur
100:00:03:00–00:00:08:1000:00:04:09–00:00:06:030.380?Dynamic motion blur and shifting optical distortions across the text
200:00:08:10–00:00:16:2400:00:35:05–00:00:43:060.761OKdrawing a heart shape on a foggy surface
300:00:16:24–00:00:19:0301:02:35:05–01:02:36:220.448?speaking and smiling slightly
400:00:19:03–00:00:20:1601:02:21:09–01:02:22:080.728OKlifting a camera to eye level to take a photo
500:00:20:16–00:00:26:0900:01:33:03–00:01:37:090.499?a metallic cylindrical object is brought toward and touches the skin of the forearm
600:00:26:09–00:00:29:0600:01:03:07–00:01:05:030.396?hand reaching toward and touching an ornate decorative box
700:00:29:06–00:00:31:1701:20:10:10–01:20:12:140.497?man appears to be engaged in conversation
800:00:31:17–00:00:33:1600:00:51:07–00:00:53:010.620?static or slow drifting
900:00:33:16–00:00:36:1901:20:29:03–01:20:32:060.674OKspeaking, transitioning from closed eyes to open mouth and focused gaze
1000:00:36:19–00:00:40:0201:20:35:16–01:20:39:000.560?conversation
1100:00:40:02–00:00:42:0301:20:40:18–01:20:42:180.636?static talking head with slight facial expression changes
1200:00:42:03–00:00:50:0601:14:26:06–01:14:29:180.701OKstatic profile shot transitioning to black/darkness
1300:00:50:06–00:00:53:2100:43:19:13–00:43:23:040.636?static conversation; woman on right is standing and holding a cup
1400:00:53:21–00:00:57:0200:43:38:06–00:43:41:090.626?static conversation, subject holding a white cup
1500:00:57:02–00:01:01:1200:43:46:22–00:43:50:220.531?static conversation
1600:01:01:12–00:01:04:1201:31:16:07–01:31:19:050.344?man reaches out and touches the red door with a small object
1700:01:04:12–00:01:09:0301:31:26:06–01:31:30:180.685OKStatic intimacy transitioning to a spatial arrangement of figures
1800:01:09:03–00:01:10:19—–—MAN.Woman in foreground turns her head from profile to face the camera while speaking
1900:01:10:19–00:01:12:1300:16:48:13–00:16:49:100.403?static conversation, subtle facial expression change
2000:01:12:13–00:01:15:1401:28:04:17–01:28:05:140.663OKman kisses woman's forehead, then they pull back slightly to face each other
2100:01:15:14–00:01:17:1300:23:55:00–00:23:56:230.526?hand raised to mouth, slight facial movement
2200:01:17:13–00:01:19:2301:03:05:11–01:03:07:070.544?man looks up and speaks, transitioning from downward gaze to forward gaze
2300:01:19:23–00:01:25:1401:04:35:21–01:04:41:020.534?static posture, head tilted upwards looking at the sky
2400:01:25:14–00:01:32:07—–—MAN.

Beat-Details

Beat 00 ?

Trailer

TC 00:00:00:00 – 00:00:03:00
Phase logo animation assembling from distorted shapes with motion blur
Bild centered, symmetrical, abstract black void

Source

TC 00:00:03:19 – 00:00:05:09
Scene 1 · Score 0.597

Beat 01 ?

Trailer

TC 00:00:03:00 – 00:00:08:10
Phase Dynamic motion blur and shifting optical distortions across the text
Bild Centered, symmetrical layout with overlapping circular glass-like distortions, Abstract black void

Source

TC 00:00:04:09 – 00:00:06:03
Scene 1 · Score 0.380

Beat 02 OK

Trailer

TC 00:00:08:10 – 00:00:16:24
Phase drawing a heart shape on a foggy surface
Bild extreme close-up, shifting from profile of a face to a hand interacting with a surface, indoor, obscured glass or foggy surface

Source

TC 00:00:35:05 – 00:00:43:06
Scene 3 · Score 0.761

Beat 03 ?

Trailer

TC 00:00:16:24 – 00:00:19:03
Phase speaking and smiling slightly
Bild close-up shot, centered face, outdoor rocky environment

Source

TC 01:02:35:05 – 01:02:36:22
Scene 438 · Score 0.448

Beat 04 OK

Trailer

TC 00:00:19:03 – 00:00:20:16
Phase lifting a camera to eye level to take a photo
Bild medium shot, subject centered, shallow depth of field with blurred treeline background, outdoor forest landscape, overcast sky

Source

TC 01:02:21:09 – 01:02:22:08
Scene 437 · Score 0.728

Beat 05 ?

Trailer

TC 00:00:20:16 – 00:00:26:09
Phase a metallic cylindrical object is brought toward and touches the skin of the forearm
Bild extreme close-up, shallow depth of field, indistinct dark interior

Source

TC 00:01:33:03 – 00:01:37:09
Scene 10 · Score 0.499

Beat 06 ?

Trailer

TC 00:00:26:09 – 00:00:29:06
Phase hand reaching toward and touching an ornate decorative box
Bild close-up, shallow depth of field, hand entering from left frame, dark interior

Source

TC 00:01:03:07 – 00:01:05:03
Scene 5 · Score 0.396

Beat 07 ?

Trailer

TC 00:00:29:06 – 00:00:31:17
Phase man appears to be engaged in conversation
Bild man in a light gray sweater and scarf, seated on a white couch, with a window in the background, indoor with a view of the ocean

Source

TC 01:20:10:10 – 01:20:12:14
Scene 553 · Score 0.497

Beat 08 ?

Trailer

TC 00:00:31:17 – 00:00:33:16
Phase static or slow drifting
Bild close-up, diagonal curve from top-left to bottom-center, dark, indistinct void

Source

TC 00:00:51:07 – 00:00:53:01
Scene 5 · Score 0.620

Beat 09 OK

Trailer

TC 00:00:33:16 – 00:00:36:19
Phase speaking, transitioning from closed eyes to open mouth and focused gaze
Bild medium close-up, subject positioned right of center, profile/three-quarter view, indoor room next to a large window overlooking a blue horizon/sea

Source

TC 01:20:29:03 – 01:20:32:06
Scene 557 · Score 0.674

Beat 10 ?

Trailer

TC 00:00:36:19 – 00:00:40:02
Phase conversation
Bild alternating close-ups and a medium two-shot, indoor living room with large windows showing a blue exterior landscape

Source

TC 01:20:35:16 – 01:20:39:00
Scene 558 · Score 0.560

Beat 11 ?

Trailer

TC 00:00:40:02 – 00:00:42:03
Phase static talking head with slight facial expression changes
Bild medium close-up, subject positioned right of center, profile/three-quarter view facing left, indoor room with a large window showing a blue sea/horizon background

Source

TC 01:20:40:18 – 01:20:42:18
Scene 559 · Score 0.636

Beat 12 OK

Trailer

TC 00:00:42:03 – 00:00:50:06
Phase static profile shot transitioning to black/darkness
Bild medium close-up, profile view, subject positioned on the right side of the frame, dark outdoor environment, blurred trees in background

Source

TC 01:14:26:06 – 01:14:29:18
Scene 519 · Score 0.701

Beat 13 ?

Trailer

TC 00:00:50:06 – 00:00:53:21
Phase static conversation; woman on right is standing and holding a cup
Bild wide shot, two figures positioned on opposite sides of a round dining table, modern glass-walled sunroom or conservatory overlooking a snowy landscape

Source

TC 00:43:19:13 – 00:43:23:04
Scene 308 · Score 0.636

Beat 14 ?

Trailer

TC 00:00:53:21 – 00:00:57:02
Phase static conversation, subject holding a white cup
Bild medium shot, subject positioned on the left, vertical window frame dividing the right third of the frame, interior room with a large window overlooking a snowy pine forest

Source

TC 00:43:38:06 – 00:43:41:09
Scene 309 · Score 0.626

Beat 15 ?

Trailer

TC 00:00:57:02 – 00:01:01:12
Phase static conversation
Bild medium shot, profile view of two characters facing each other, indoor room with a large window overlooking a snowy forest

Source

TC 00:43:46:22 – 00:43:50:22
Scene 309 · Score 0.531

Beat 16 ?

Trailer

TC 00:01:01:12 – 00:01:04:12
Phase man reaches out and touches the red door with a small object
Bild medium side profile shot, subject on left, door on right, indoor dim environment, adjacent to a red wooden door

Source

TC 01:31:16:07 – 01:31:19:05
Scene 623 · Score 0.344

Beat 17 OK

Trailer

TC 00:01:04:12 – 00:01:09:03
Phase Static intimacy transitioning to a spatial arrangement of figures
Bild Medium shot, eye-level. First two frames: static shot of couple in bed. Third frame: wide shot of women among white blocks, Bedroom with bedside table and lamp; transition to a white minimalist interior with pedestals

Source

TC 01:31:26:06 – 01:31:30:18
Scene 623 · Score 0.685

Beat 18 MAN.

Trailer

TC 00:01:09:03 – 00:01:10:19
Phase Woman in foreground turns her head from profile to face the camera while speaking
Bild Medium shot, three-quarter profile of woman in foreground left, two women positioned behind her to the right, Indoors, minimalist dark background

Source

— manuell setzen —
— kein automatischer Treffer —

Beat 19 ?

Trailer

TC 00:01:10:19 – 00:01:12:13
Phase static conversation, subtle facial expression change
Bild medium close-up, over-the-shoulder shot with a blurred figure in the foreground right, outdoor dark forest or wooded area

Source

TC 00:16:48:13 – 00:16:49:10
Scene 126 · Score 0.403

Beat 20 OK

Trailer

TC 00:01:12:13 – 00:01:15:14
Phase man kisses woman's forehead, then they pull back slightly to face each other
Bild extreme close-up, profile view, faces facing each other, indoor, blurred background

Source

TC 01:28:04:17 – 01:28:05:14
Scene 613 · Score 0.663

Beat 21 ?

Trailer

TC 00:01:15:14 – 00:01:17:13
Phase hand raised to mouth, slight facial movement
Bild extreme close-up, face partially obscured by shadow, dark interior

Source

TC 00:23:55:00 – 00:23:56:23
Scene 175 · Score 0.526

Beat 22 ?

Trailer

TC 00:01:17:13 – 00:01:19:23
Phase man looks up and speaks, transitioning from downward gaze to forward gaze
Bild close-up, profile to three-quarter view, outdoor rocky environment, blurred background

Source

TC 01:03:05:11 – 01:03:07:07
Scene 442 · Score 0.544

Beat 23 ?

Trailer

TC 00:01:19:23 – 00:01:25:14
Phase static posture, head tilted upwards looking at the sky
Bild medium shot, subject positioned on the left third, facing away from camera towards the water, rocky shoreline next to a body of water under an overcast sky

Source

TC 01:04:35:21 – 01:04:41:02
Scene 446 · Score 0.534

Beat 24 MAN.

Trailer

TC 00:01:25:14 – 00:01:32:07

Source

— manuell setzen —
— kein automatischer Treffer —
+

Cutter-Report — 2026-05-05

Trailer BehindTheRedDoor_Trailer_REFERENCE.mp4 @ 25.000 fps
Source BehindTheRedDoor_FTR_1080P_2398_Fixed.mp4 @ 23.976 fps
Trailer-TC in Trailer-Framerate, Source-TC in Source-Framerate.
25 Beats — 23 automatisch (6 bestätigt) — 2 manuell.

Status-Legende

StatusBedeutungWas tun?
OKbestätigt durch CV + Vision-Phasenprüfungübernehmen, optional sichten
?korrekte Szene, Phase ggf. um wenige Frames verschobenim NLE prüfen, Source-In nachjustieren
MAN.kein automatischer Treffermanuell suchen oder Schwarzfade

Beat-Tabelle

BeatTrailer In / OutSource In / OutScoreStatusPhase
000:00:00:00–00:00:03:0000:00:03:19–00:00:05:090.597?logo animation assembling from distorted shapes with motion blur
100:00:03:00–00:00:08:1000:00:04:09–00:00:06:030.380?Dynamic motion blur and shifting optical distortions across the text
200:00:08:10–00:00:16:2400:00:35:05–00:00:43:060.761OKdrawing a heart shape on a foggy surface
300:00:16:24–00:00:19:0301:02:35:05–01:02:36:220.448?speaking and smiling slightly
400:00:19:03–00:00:20:1601:02:21:09–01:02:22:080.728OKlifting a camera to eye level to take a photo
500:00:20:16–00:00:26:0900:01:33:03–00:01:37:090.499?a metallic cylindrical object is brought toward and touches the skin of the forearm
600:00:26:09–00:00:29:0600:01:03:07–00:01:05:030.396?hand reaching toward and touching an ornate decorative box
700:00:29:06–00:00:31:1701:20:10:10–01:20:12:140.497?man appears to be engaged in conversation
800:00:31:17–00:00:33:1600:00:51:07–00:00:53:010.620?static or slow drifting
900:00:33:16–00:00:36:1901:20:29:03–01:20:32:060.674OKspeaking, transitioning from closed eyes to open mouth and focused gaze
1000:00:36:19–00:00:40:0201:20:13:13–01:20:14:110.660?conversation
1100:00:40:02–00:00:42:0301:20:40:18–01:20:42:180.636?static talking head with slight facial expression changes
1200:00:42:03–00:00:50:0601:14:26:06–01:14:29:180.701OKstatic profile shot transitioning to black/darkness
1300:00:50:06–00:00:53:2100:43:19:13–00:43:23:040.636?static conversation; woman on right is standing and holding a cup
1400:00:53:21–00:00:57:0200:43:38:06–00:43:41:090.626?static conversation, subject holding a white cup
1500:00:57:02–00:01:01:1200:43:46:22–00:43:50:220.531?static conversation
1600:01:01:12–00:01:04:1201:31:16:07–01:31:19:050.344?man reaches out and touches the red door with a small object
1700:01:04:12–00:01:09:0301:31:26:06–01:31:30:180.685OKStatic intimacy transitioning to a spatial arrangement of figures
1800:01:09:03–00:01:10:19—–—MAN.Woman in foreground turns her head from profile to face the camera while speaking
1900:01:10:19–00:01:12:1300:16:48:13–00:16:49:100.403?static conversation, subtle facial expression change
2000:01:12:13–00:01:15:1401:28:04:17–01:28:05:140.663OKman kisses woman's forehead, then they pull back slightly to face each other
2100:01:15:14–00:01:17:1300:23:55:00–00:23:56:230.526?hand raised to mouth, slight facial movement
2200:01:17:13–00:01:19:2301:03:05:11–01:03:07:070.544?man looks up and speaks, transitioning from downward gaze to forward gaze
2300:01:19:23–00:01:25:1401:04:35:21–01:04:41:020.534?static posture, head tilted upwards looking at the sky
2400:01:25:14–00:01:32:07—–—MAN.

Beat-Details

Beat 00 ?

Trailer

TC 00:00:00:00 – 00:00:03:00
Phase logo animation assembling from distorted shapes with motion blur
Bild centered, symmetrical, abstract black void

Source

TC 00:00:03:19 – 00:00:05:09
Scene 1 · Score 0.597

Beat 01 ?

Trailer

TC 00:00:03:00 – 00:00:08:10
Phase Dynamic motion blur and shifting optical distortions across the text
Bild Centered, symmetrical layout with overlapping circular glass-like distortions, Abstract black void

Source

TC 00:00:04:09 – 00:00:06:03
Scene 1 · Score 0.380

Beat 02 OK

Trailer

TC 00:00:08:10 – 00:00:16:24
Phase drawing a heart shape on a foggy surface
Bild extreme close-up, shifting from profile of a face to a hand interacting with a surface, indoor, obscured glass or foggy surface

Source

TC 00:00:35:05 – 00:00:43:06
Scene 3 · Score 0.761

Beat 03 ?

Trailer

TC 00:00:16:24 – 00:00:19:03
Phase speaking and smiling slightly
Bild close-up shot, centered face, outdoor rocky environment

Source

TC 01:02:35:05 – 01:02:36:22
Scene 438 · Score 0.448

Beat 04 OK

Trailer

TC 00:00:19:03 – 00:00:20:16
Phase lifting a camera to eye level to take a photo
Bild medium shot, subject centered, shallow depth of field with blurred treeline background, outdoor forest landscape, overcast sky

Source

TC 01:02:21:09 – 01:02:22:08
Scene 437 · Score 0.728

Beat 05 ?

Trailer

TC 00:00:20:16 – 00:00:26:09
Phase a metallic cylindrical object is brought toward and touches the skin of the forearm
Bild extreme close-up, shallow depth of field, indistinct dark interior

Source

TC 00:01:33:03 – 00:01:37:09
Scene 10 · Score 0.499

Beat 06 ?

Trailer

TC 00:00:26:09 – 00:00:29:06
Phase hand reaching toward and touching an ornate decorative box
Bild close-up, shallow depth of field, hand entering from left frame, dark interior

Source

TC 00:01:03:07 – 00:01:05:03
Scene 5 · Score 0.396

Beat 07 ?

Trailer

TC 00:00:29:06 – 00:00:31:17
Phase man appears to be engaged in conversation
Bild man in a light gray sweater and scarf, seated on a white couch, with a window in the background, indoor with a view of the ocean

Source

TC 01:20:10:10 – 01:20:12:14
Scene 553 · Score 0.497

Beat 08 ?

Trailer

TC 00:00:31:17 – 00:00:33:16
Phase static or slow drifting
Bild close-up, diagonal curve from top-left to bottom-center, dark, indistinct void

Source

TC 00:00:51:07 – 00:00:53:01
Scene 5 · Score 0.620

Beat 09 OK

Trailer

TC 00:00:33:16 – 00:00:36:19
Phase speaking, transitioning from closed eyes to open mouth and focused gaze
Bild medium close-up, subject positioned right of center, profile/three-quarter view, indoor room next to a large window overlooking a blue horizon/sea

Source

TC 01:20:29:03 – 01:20:32:06
Scene 557 · Score 0.674

Beat 10 ?

Trailer

TC 00:00:36:19 – 00:00:40:02
Phase conversation
Bild alternating close-ups and a medium two-shot, indoor living room with large windows showing a blue exterior landscape

Source

TC 01:20:13:13 – 01:20:14:11
Scene 554 · Score 0.660

Beat 11 ?

Trailer

TC 00:00:40:02 – 00:00:42:03
Phase static talking head with slight facial expression changes
Bild medium close-up, subject positioned right of center, profile/three-quarter view facing left, indoor room with a large window showing a blue sea/horizon background

Source

TC 01:20:40:18 – 01:20:42:18
Scene 559 · Score 0.636

Beat 12 OK

Trailer

TC 00:00:42:03 – 00:00:50:06
Phase static profile shot transitioning to black/darkness
Bild medium close-up, profile view, subject positioned on the right side of the frame, dark outdoor environment, blurred trees in background

Source

TC 01:14:26:06 – 01:14:29:18
Scene 519 · Score 0.701

Beat 13 ?

Trailer

TC 00:00:50:06 – 00:00:53:21
Phase static conversation; woman on right is standing and holding a cup
Bild wide shot, two figures positioned on opposite sides of a round dining table, modern glass-walled sunroom or conservatory overlooking a snowy landscape

Source

TC 00:43:19:13 – 00:43:23:04
Scene 308 · Score 0.636

Beat 14 ?

Trailer

TC 00:00:53:21 – 00:00:57:02
Phase static conversation, subject holding a white cup
Bild medium shot, subject positioned on the left, vertical window frame dividing the right third of the frame, interior room with a large window overlooking a snowy pine forest

Source

TC 00:43:38:06 – 00:43:41:09
Scene 309 · Score 0.626

Beat 15 ?

Trailer

TC 00:00:57:02 – 00:01:01:12
Phase static conversation
Bild medium shot, profile view of two characters facing each other, indoor room with a large window overlooking a snowy forest

Source

TC 00:43:46:22 – 00:43:50:22
Scene 309 · Score 0.531

Beat 16 ?

Trailer

TC 00:01:01:12 – 00:01:04:12
Phase man reaches out and touches the red door with a small object
Bild medium side profile shot, subject on left, door on right, indoor dim environment, adjacent to a red wooden door

Source

TC 01:31:16:07 – 01:31:19:05
Scene 623 · Score 0.344

Beat 17 OK

Trailer

TC 00:01:04:12 – 00:01:09:03
Phase Static intimacy transitioning to a spatial arrangement of figures
Bild Medium shot, eye-level. First two frames: static shot of couple in bed. Third frame: wide shot of women among white blocks, Bedroom with bedside table and lamp; transition to a white minimalist interior with pedestals

Source

TC 01:31:26:06 – 01:31:30:18
Scene 623 · Score 0.685

Beat 18 MAN.

Trailer

TC 00:01:09:03 – 00:01:10:19
Phase Woman in foreground turns her head from profile to face the camera while speaking
Bild Medium shot, three-quarter profile of woman in foreground left, two women positioned behind her to the right, Indoors, minimalist dark background

Source

— manuell setzen —
— kein automatischer Treffer —

Beat 19 ?

Trailer

TC 00:01:10:19 – 00:01:12:13
Phase static conversation, subtle facial expression change
Bild medium close-up, over-the-shoulder shot with a blurred figure in the foreground right, outdoor dark forest or wooded area

Source

TC 00:16:48:13 – 00:16:49:10
Scene 126 · Score 0.403

Beat 20 OK

Trailer

TC 00:01:12:13 – 00:01:15:14
Phase man kisses woman's forehead, then they pull back slightly to face each other
Bild extreme close-up, profile view, faces facing each other, indoor, blurred background

Source

TC 01:28:04:17 – 01:28:05:14
Scene 613 · Score 0.663

Beat 21 ?

Trailer

TC 00:01:15:14 – 00:01:17:13
Phase hand raised to mouth, slight facial movement
Bild extreme close-up, face partially obscured by shadow, dark interior

Source

TC 00:23:55:00 – 00:23:56:23
Scene 175 · Score 0.526

Beat 22 ?

Trailer

TC 00:01:17:13 – 00:01:19:23
Phase man looks up and speaks, transitioning from downward gaze to forward gaze
Bild close-up, profile to three-quarter view, outdoor rocky environment, blurred background

Source

TC 01:03:05:11 – 01:03:07:07
Scene 442 · Score 0.544

Beat 23 ?

Trailer

TC 00:01:19:23 – 00:01:25:14
Phase static posture, head tilted upwards looking at the sky
Bild medium shot, subject positioned on the left third, facing away from camera towards the water, rocky shoreline next to a body of water under an overcast sky

Source

TC 01:04:35:21 – 01:04:41:02
Scene 446 · Score 0.534

Beat 24 MAN.

Trailer

TC 00:01:25:14 – 00:01:32:07

Source

— manuell setzen —
— kein automatischer Treffer —
diff --git a/CUTTER_REPORT.md b/CUTTER_REPORT.md index f471bfc..24e778f 100644 --- a/CUTTER_REPORT.md +++ b/CUTTER_REPORT.md @@ -1,6 +1,6 @@ # Cutter-Report — manuelles Nachschneiden -Stand: 2026-05-04 +Stand: 2026-05-05 - **Trailer**: `BehindTheRedDoor_Trailer_REFERENCE.mp4` @ 25.000 fps - **Source** : `BehindTheRedDoor_FTR_1080P_2398_Fixed.mp4` @ 23.976 fps @@ -33,7 +33,7 @@ Bilder sind base64-eingebettet (kein toter Link). Für Video-Vorschau siehe `CUT | 7 | 00:00:29:06-00:00:31:17 | 01:20:10:10-01:20:12:14 | 0.497 | ? | man appears to be engaged in conversation | | 8 | 00:00:31:17-00:00:33:16 | 00:00:51:07-00:00:53:01 | 0.620 | ? | static or slow drifting | | 9 | 00:00:33:16-00:00:36:19 | 01:20:29:03-01:20:32:06 | 0.674 | OK | speaking, transitioning from closed eyes to open mouth and focused gaze | -| 10 | 00:00:36:19-00:00:40:02 | 01:20:35:16-01:20:39:00 | 0.560 | ? | conversation | +| 10 | 00:00:36:19-00:00:40:02 | 01:20:13:13-01:20:14:11 | 0.660 | ? | conversation | | 11 | 00:00:40:02-00:00:42:03 | 01:20:40:18-01:20:42:18 | 0.636 | ? | static talking head with slight facial expression changes | | 12 | 00:00:42:03-00:00:50:06 | 01:14:26:06-01:14:29:18 | 0.701 | OK | static profile shot transitioning to black/darkness | | 13 | 00:00:50:06-00:00:53:21 | 00:43:19:13-00:43:23:04 | 0.636 | ? | static conversation; woman on right is standing and holding a cup | @@ -164,7 +164,7 @@ Bilder sind base64-eingebettet (kein toter Link). Für Video-Vorschau siehe `CUT ### Beat 10 — Status `?` - **Trailer**: 00:00:36:19 – 00:00:40:02 -- **Source** : 01:20:35:16 – 01:20:39:00 (scene 558, score 0.560) +- **Source** : 01:20:13:13 – 01:20:14:11 (scene 554, score 0.660) - **Phase** : conversation - **Bild** : alternating close-ups and a medium two-shot, indoor living room with large windows showing a blue exterior landscape diff --git a/cli.py b/cli.py index 1e3a060..19a1546 100644 --- a/cli.py +++ b/cli.py @@ -562,6 +562,51 @@ def _reference_scoreable_segments(beat, cfg) -> list[tuple[float, float]]: return merged +def _reference_shot_segments(beat, cfg) -> list[tuple[float, float]]: + """Source-matchable shot ranges inside a trailer beat. + + Like ``_reference_scoreable_segments`` but additionally splits each + visible island at detected hard cuts (frame-to-frame correlation drops + below ``cfg.vision.multi_shot_cut_corr_threshold``). A shot is a + fade-bounded AND cut-bounded sub-range of the trailer beat: this is + what we want to match against an individual source clip. + + Tiny sub-shots (below ``min_shot_s``) are merged into the previous shot + so noisy cut detection doesn't fragment a real shot into useless slivers. + """ + from src.cv.global_scan import _reference_internal_cut_offsets + + islands = _reference_scoreable_segments(beat, cfg) + try: + cut_offsets = sorted(_reference_internal_cut_offsets(beat, cfg)) + except Exception: + cut_offsets = [] + if not cut_offsets: + return islands + + min_shot_s = max(0.4, cfg.cv.deep_scan.span_sample_step_s * 4.0) + shots: list[tuple[float, float]] = [] + for start_s, end_s in islands: + boundaries = [start_s] + for cut in cut_offsets: + if start_s + 1e-3 < cut < end_s - 1e-3: + boundaries.append(cut) + boundaries.append(end_s) + for i in range(len(boundaries) - 1): + seg_start = boundaries[i] + seg_end = boundaries[i + 1] + if seg_end - seg_start < min_shot_s and shots and shots[-1][1] >= seg_start - 1e-3: + # merge into previous if the new piece is too short + shots[-1] = (shots[-1][0], seg_end) + elif seg_end - seg_start >= min_shot_s: + shots.append((seg_start, seg_end)) + elif shots: + shots[-1] = (shots[-1][0], seg_end) + else: + shots.append((seg_start, seg_end)) + return shots if shots else islands + + def _trim_beats_to_single_visual_island(beats: list, cfg) -> tuple[list, dict[int, tuple[float, float]]]: """Use a single visible island as the primary match target for faded beats.""" from dataclasses import replace @@ -1276,7 +1321,9 @@ def _match_unmatched_visual_segments( if beat.beat_id in matched_ids: continue - islands = _reference_scoreable_segments(beat, cfg) + # Per-shot matching when the beat has either fade-bounded islands + # OR internal hard cuts; each shot becomes its own MatchSegment. + islands = _reference_shot_segments(beat, cfg) if not islands: continue @@ -1423,10 +1470,15 @@ def cmd_match(args: argparse.Namespace, cfg) -> list: all_beats = _load_beats(cfg) beats = _select_beats(all_beats, getattr(args, "beat", None)) cached = _normalize_cached_results(all_beats, _load_results(cfg), cfg) if _results_cache_path(cfg).exists() else [] + # Multi-shot beats: either fade-bounded multiple islands, OR a single + # island with internal hard cuts (e.g. man-shot then back to woman). Both + # cases are routed through the per-segment match path so each shot gets + # its own source clip instead of being approximated by one continuous + # span. multi_island_beat_ids = { beat.beat_id for beat in beats - if len(_reference_scoreable_segments(beat, cfg)) > 1 + if len(_reference_shot_segments(beat, cfg)) > 1 } scan_beats, single_island_trims = _trim_beats_to_single_visual_island(beats, cfg) scan_beats = [b for b in scan_beats if b.beat_id not in multi_island_beat_ids] @@ -1480,13 +1532,18 @@ def cmd_match(args: argparse.Namespace, cfg) -> list: results = _filter_semantically_invalid_vision_matches(results, beats, cfg) results = _recover_unmatched_beats_via_vision(results, beats, cfg) - # A targeted one-beat match should improve the cache without deleting - # automatic matches for other beats. + # A targeted one-beat match must NEVER delete or modify any other beat's + # cache entry. We deliberately re-load the raw cache from disk here so + # the upstream normalisation pass (which drops entries that no longer + # pass current quality gates) cannot leak into the save: only the + # targeted beat's slot gets replaced, every other entry is written back + # bit-for-bit identical to what it was before this run. if getattr(args, "beat", None) is not None and _results_cache_path(cfg).exists(): - cached = [r for r in cached if r.beat_id != args.beat] + raw_cached = _load_results(cfg) + raw_cached = [r for r in raw_cached if r.beat_id != args.beat] for result in results: - cached = _update_result(result, cached) - results_to_save = cached + raw_cached = _update_result(result, raw_cached) + results_to_save = sorted(raw_cached, key=lambda r: r.beat_id) else: results_to_save = results