()
| 236 | } |
| 237 | |
| 238 | function updateToneNote() { |
| 239 | if (!state.session) return; |
| 240 | const joinTone = state.session.analysis.tone; |
| 241 | const fullTone = state.session.analysis.fullClipTone; |
| 242 | if (!joinTone || !fullTone) return; |
| 243 | const tone = els.toneFullClip.checked ? fullTone : joinTone; |
| 244 | const action = els.toneFullClip.checked |
| 245 | ? "Full video 2 match applies the join correction across the entire second clip." |
| 246 | : (tone.recommended ? `Recommended: smooth clip 2 for ${tone.frames} frames.` : "Tone smoothing is optional for this join."); |
| 247 | els.toneScore.textContent = `tone ${Math.abs(tone.meanDeltaPct).toFixed(1)}% / ${Math.abs(tone.contrastDeltaPct).toFixed(1)}%`; |
| 248 | els.toneNote.textContent = `Join: ${joinTone.note} Full clip: ${fullTone.note} ${action}`; |
| 249 | els.toneNote.classList.toggle("active", els.toneMatch.checked || tone.recommended); |
| 250 | } |
| 251 | |
| 252 | function renderFrames() { |
| 253 | if (!state.session) return; |
no outgoing calls
no test coverage detected