Clip starts EXACTLY on chorus first word (no buffer)

User feedback: 'na refren ne pred na začetek refrena' — the clip should
start right when the chorus begins, not 0.3s before.

Changes:
1. Prompt rule: 'Začetek = TOČNO ko prva beseda refrena začne'
   (was: '~0.3s PRED prvo besedo refrena')
2. Word-level extension: removed -0.15s buffer when extending back
   (now lands exactly on word start)

Reasoning: with no_subs as default, we don't need buffer to avoid
cutting first word during fade-in (fade-in is now 0.05s = imperceptible).
Cleaner cuts directly at chorus onset.
This commit is contained in:
Sebastjan Artič 2026-04-29 19:41:56 +00:00
parent 64b0ed1edc
commit ab5424d37b

View File

@ -1188,11 +1188,11 @@ PROSIM:
Uporabnik je izbral način "**SAMO REFREN**". To pomeni:
## ⚠️ ABSOLUTNO PRAVILO: clip se ZAČNE na PRVI BESEDI prvega refrena
## ⚠️ ABSOLUTNO PRAVILO: clip se ZAČNE TOČNO NA PRVI BESEDI prvega refrena
- **NE** vključuj kateri koli verz, pre-chorus, build-up, ali intro
- **NE** začni "tik pred" refrenom
- **Začetek = ~0.3s PRED prvo besedo refrena** (npr. če prva beseda refrena "Žena" začne pri 78.0s, izberi start = 77.7s)
- **Razlog**: 0.3s buffer da ne odrežeš prve besede zaradi audio fade-in efekta
- **Začetek = TOČNO ko prva beseda refrena začne** (npr. če prva beseda refrena "Žena" začne pri 78.0s, izberi start = 78.0s NE 77.7s)
- **Brez buffer-ja** clip začne natančno na vokalu
## Identifikacija refrena (univerzalno čez jezike):
- Najdi del, ki se v pesmi **ponavlja vsaj 2-krat** (običajno 3-4x)
@ -1793,7 +1793,7 @@ def main():
if gap >= 0.5:
break
anchor_idx = j - 1
new_start = max(0, all_words[anchor_idx]["start"] - 0.15)
new_start = max(0, all_words[anchor_idx]["start"]) # NI buffer-ja
captured = " ".join(w2["text"].strip() for w2 in all_words[anchor_idx:i+1])
print(f" 🎵 Razširim clip začetek {current_start:.2f}s → {new_start:.2f}s "
f"(clip sredi besede; ujamem '{captured}')", file=sys.stderr)
@ -1813,7 +1813,7 @@ def main():
if gap >= 0.5:
break
anchor_idx = j - 1
new_start = max(0, all_words[anchor_idx]["start"] - 0.15)
new_start = max(0, all_words[anchor_idx]["start"]) # NI buffer-ja
captured = " ".join(w2["text"].strip() for w2 in all_words[anchor_idx:i+1])
print(f" 🎵 Razširim clip začetek {current_start:.2f}s → {new_start:.2f}s "
f"(beseda '{w['text'].strip()}' tik pred clip start; "