diff --git a/src/main/resources/templates/rework.html b/src/main/resources/templates/rework.html
index 496bdb3..be7d33b 100644
--- a/src/main/resources/templates/rework.html
+++ b/src/main/resources/templates/rework.html
@@ -470,14 +470,18 @@
}
// ===== AI 자막 (음성 Whisper / 화면 Gemini) =====
- function renderAiPanel(elId, segs, error){
+ // segs 있으면 목록, 없으면 error(빨강) 또는 note(회색 안내) 표시.
+ function renderAiPanel(elId, segs, error, note){
const box = document.getElementById(elId);
+ if(segs && segs.length){
+ box.innerHTML = segs.map(sg =>
+ '
'
+ + '' + mmss(sg.start) + ''
+ + '' + esc(sg.text) + '
').join('');
+ return;
+ }
if(error){ box.innerHTML = '' + esc(error) + '
'; return; }
- if(!segs || !segs.length){ box.innerHTML = '자막 없음
'; return; }
- box.innerHTML = segs.map(sg =>
- ''
- + '' + mmss(sg.start) + ''
- + '' + esc(sg.text) + '
').join('');
+ box.innerHTML = '' + esc(note || '자막 없음') + '
';
}
// 음성(Whisper 정밀+한국어) + 화면(Gemini 한국어)을 동시에 생성해 좌우 패널에 표시.
@@ -490,7 +494,8 @@
// 왼쪽: 저장된 Whisper 세그먼트 → 한국어 번역(LibreTranslate)
const audioP = (async () => {
- if(!SEGMENTS || !SEGMENTS.length) return { error: '음성 자막 없음 — 이 영상에 말소리가 없거나(음악·화면자막만) 아직 ‘전사’ 미실행' };
+ // 말소리가 없는(음악·화면자막만) 영상은 오류가 아니라 '음성 없음' 안내.
+ if(!SEGMENTS || !SEGMENTS.length) return { note: '음성 없음 — 말소리가 없거나(음악·화면자막만) ‘전사’ 미실행' };
const r = await api(API + '/' + VIDEO_ID + '/translate?target=ko&format=segments', { method:'POST' });
const ko = (r && r.texts) || [];
return { segments: SEGMENTS.map((sg, i) => ({ start: sg.start, end: sg.end, text: (ko[i] != null ? ko[i] : (sg.text || '')) })) };
@@ -504,8 +509,8 @@
const [audio, screen] = await Promise.all([audioP, screenP]);
AI_AUDIO = audio.segments || [];
AI_SCREEN = screen.segments || [];
- renderAiPanel('aiAudioList', AI_AUDIO, audio.error);
- renderAiPanel('aiScreenList', AI_SCREEN, screen.error);
+ renderAiPanel('aiAudioList', AI_AUDIO, audio.error, audio.note);
+ renderAiPanel('aiScreenList', AI_SCREEN, screen.error, screen.note);
status.style.color = '#4ade80';
status.textContent = '완료 · 음성 ' + AI_AUDIO.length + '개 · 화면 ' + AI_SCREEN.length + '개'