Fix forehead_touch action group + always-fresh cutter assets
1. Action-group classifier conflated object-touches and person-touches. "man touches the red door with a small object" was being tagged as forehead_touch because "touch" was in the forehead_touch needles set. That made the realign pass yank Beat 16 from scene 451 (correct: man painting red door, IV stand) over to scene 623 (woman/man in bed) — a totally wrong shot at score 0.344. Fix: removed generic "touch*" verbs from forehead_touch's needle set. forehead_touch is now added in _semantic_action_groups() only when a touch verb is paired with an explicit body-part target (forehead, face, cheek, head, hand, ...) and not paired with an object target (door, handle, brush, tool, lock, ...). Effect on Beat 16 after `match --beat 16 --vision`: scene 623 in=5476.28 score=0.344 -> scene 451 in=3912.48 score=0.626. 2. Cutter-report stills/clips were keyed by source-video mtime, so a match-position change without a video change served stale frames from the previous match. Dropped the mtime cache; both extractors now render fresh every time. Slower (~minute per full regen) but correct. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -19,7 +19,7 @@ video { width: 100%; border-radius: 6px; box-shadow: 0 4px 6px rgba(0,0,0,0.5);
|
||||
.code-hint { background: #000; padding: 10px; border-radius: 4px; font-family: monospace; font-size: 0.9em; margin-top: 15px; color: #a3e635; }
|
||||
</style></head><body>
|
||||
<h1>AI Trailer Generator — Match Report</h1>
|
||||
<div class='stats'>Total Beats: 25 | Matched: 19</div>
|
||||
<div class='stats'>Total Beats: 25 | Matched: 20</div>
|
||||
<script>
|
||||
function syncBeat(row) {
|
||||
const vids = row.querySelectorAll('video');
|
||||
@@ -348,14 +348,18 @@ document.addEventListener('DOMContentLoaded', () => document.querySelectorAll('.
|
||||
<h3>Beat 016</h3>
|
||||
<p><b>Type:</b> UNKNOWN</p>
|
||||
<p><b>Trailer:</b> 61.48s → 64.48s</p>
|
||||
<p class='status-miss'>NO MATCH</p>
|
||||
<p style='color: #fbbf24; font-weight: bold; font-size: 1.1em;'>PROVISIONAL MATCH</p>
|
||||
<p><b>Scene ID:</b> 451</p>
|
||||
<p><b>Movie In:</b> 3912.48s</p>
|
||||
<p><b>Source Dur:</b> 2.80s</p>
|
||||
<p><b>Unmatched Tail:</b> 0.12s placeholder</p>
|
||||
<p><b>Score:</b> <span class='score'>0.626</span></p>
|
||||
<p style='color: #fbbf24; font-size: 0.9em;'>Some trailer frames are still unmatched; report fills only those gaps with placeholder black.</p>
|
||||
<p style='color: #fbbf24; font-size: 0.9em;'>⚠️ Score below 0.80. Verify visually.</p>
|
||||
<div class='code-hint'>python cli.py rematch --beat 16</div>
|
||||
</div>
|
||||
<div class='videos'>
|
||||
<div class='video-container'>
|
||||
<div class='video-col'><p>Reference Trailer</p><video src='beat_016_ref.mp4' controls loop muted autoplay></video></div>
|
||||
<div class='video-col'><p>Matched Source</p><div style='width: 100%; aspect-ratio: 16/9; background: #222; display: flex; align-items: center; justify-content: center; border-radius: 6px; color: #555;'>No Match</div></div>
|
||||
</div>
|
||||
<div class='compare'><p>Frame-Locked Compare</p><video src='beat_016_compare.mp4' controls loop muted autoplay></video></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='beat-row'>
|
||||
|
||||
Reference in New Issue
Block a user