diff --git a/src/components/ai-edition/RightPanes.i18n.test.tsx b/src/components/ai-edition/RightPanes.i18n.test.tsx
index 64e40e7d6..fb9fc07ba 100644
--- a/src/components/ai-edition/RightPanes.i18n.test.tsx
+++ b/src/components/ai-edition/RightPanes.i18n.test.tsx
@@ -11,7 +11,7 @@ import type { ReactElement } from "react";
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { I18nProvider } from "@/contexts/I18nContext";
import { LOCALE_STORAGE_KEY } from "@/i18n/config";
-import { CursorPane, LayoutPane, VideoEffectsPane } from "./RightPanes";
+import { CursorPane, LayoutPane, TranscriptPane, VideoEffectsPane } from "./RightPanes";
function renderIn(locale: string, ui: ReactElement) {
localStorage.setItem(LOCALE_STORAGE_KEY, locale);
@@ -77,4 +77,58 @@ describe("right-rail panes are localized", () => {
expect(screen.getByRole("heading", { name: "Composition" })).toBeInTheDocument();
expect(screen.getByText("Blur BG")).toBeInTheDocument();
});
+
+ it("renders the transcript pane title as 'Transcription' in French", () => {
+ const noop = () => {
+ /* noop */
+ };
+ renderIn(
+ "fr",
+ ,
+ );
+ expect(screen.getByRole("heading", { name: "Transcription" })).toBeInTheDocument();
+ });
+
+ it("renders the transcript pane title as 'Transcript' in English", () => {
+ const noop = () => {
+ /* noop */
+ };
+ renderIn(
+ "en",
+ ,
+ );
+ expect(screen.getByRole("heading", { name: "Transcript" })).toBeInTheDocument();
+ });
});
diff --git a/src/i18n/locales/ar/settings.json b/src/i18n/locales/ar/settings.json
index 3a9e392ca..2efb8fc10 100644
--- a/src/i18n/locales/ar/settings.json
+++ b/src/i18n/locales/ar/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "التسجيل",
"noTranscript": "لا يوجد نص بعد",
- "title": "النص الحالي",
+ "title": "النص",
"restoreWord": "استعادة \"{{word}}\"",
"revertWord": "استعادة \"{{original}}\"",
"editingHint": "انقر نقرًا مزدوجًا على كلمة لتصحيحها، واضغط Backspace لقطعها من الفيلم.",
diff --git a/src/i18n/locales/en/settings.json b/src/i18n/locales/en/settings.json
index 7053126b8..cf499104b 100644
--- a/src/i18n/locales/en/settings.json
+++ b/src/i18n/locales/en/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Recording",
"noTranscript": "No transcript yet",
- "title": "Current transcription",
+ "title": "Transcript",
"restoreWord": "Restore \"{{word}}\"",
"revertWord": "Restore \"{{original}}\"",
"editingHint": "Double-click a word to correct it, Backspace cuts it from the film.",
diff --git a/src/i18n/locales/es/settings.json b/src/i18n/locales/es/settings.json
index 84419849c..dbde8bce8 100644
--- a/src/i18n/locales/es/settings.json
+++ b/src/i18n/locales/es/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Grabación",
"noTranscript": "Aún no hay transcripción",
- "title": "Transcripción actual",
+ "title": "Transcripción",
"restoreWord": "Restaurar «{{word}}»",
"revertWord": "Restaurar «{{original}}»",
"editingHint": "Haz doble clic en una palabra para corregirla, Retroceso la corta del vídeo.",
diff --git a/src/i18n/locales/fr/settings.json b/src/i18n/locales/fr/settings.json
index 1c8bf2764..f7ab3d56e 100644
--- a/src/i18n/locales/fr/settings.json
+++ b/src/i18n/locales/fr/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Enregistrement",
"noTranscript": "Aucune transcription pour l'instant",
- "title": "Transcription actuelle",
+ "title": "Transcription",
"restoreWord": "Restaurer « {{word}} »",
"revertWord": "Rétablir « {{original}} »",
"editingHint": "Double-cliquez sur un mot pour le corriger, Retour arrière le coupe du film.",
diff --git a/src/i18n/locales/it/settings.json b/src/i18n/locales/it/settings.json
index 2e5ac7381..0aa569e5c 100644
--- a/src/i18n/locales/it/settings.json
+++ b/src/i18n/locales/it/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Registrazione",
"noTranscript": "Ancora nessuna trascrizione",
- "title": "Trascrizione corrente",
+ "title": "Trascrizione",
"restoreWord": "Ripristina «{{word}}»",
"revertWord": "Ripristina «{{original}}»",
"editingHint": "Fai doppio clic su una parola per correggerla, Backspace la taglia dal video.",
diff --git a/src/i18n/locales/ja-JP/settings.json b/src/i18n/locales/ja-JP/settings.json
index 6c746cdfa..dc49e7092 100644
--- a/src/i18n/locales/ja-JP/settings.json
+++ b/src/i18n/locales/ja-JP/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "録画",
"noTranscript": "文字起こしがまだありません",
- "title": "現在の文字起こし",
+ "title": "文字起こし",
"restoreWord": "「{{word}}」を元に戻す",
"revertWord": "「{{original}}」に戻す",
"editingHint": "ダブルクリックで単語を修正、Backspace で映像からカット。",
diff --git a/src/i18n/locales/ko-KR/settings.json b/src/i18n/locales/ko-KR/settings.json
index 66cbbd245..9095cb565 100644
--- a/src/i18n/locales/ko-KR/settings.json
+++ b/src/i18n/locales/ko-KR/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "녹화",
"noTranscript": "아직 전사가 없습니다",
- "title": "현재 전사",
+ "title": "전사",
"restoreWord": "\"{{word}}\" 복원",
"revertWord": "\"{{original}}\"(으)로 되돌리기",
"editingHint": "단어를 더블 클릭해 수정하고, Backspace로 영상에서 잘라내세요.",
diff --git a/src/i18n/locales/pt-BR/settings.json b/src/i18n/locales/pt-BR/settings.json
index b70b4d05e..ad216ac3d 100644
--- a/src/i18n/locales/pt-BR/settings.json
+++ b/src/i18n/locales/pt-BR/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Gravação",
"noTranscript": "Nenhuma transcrição ainda",
- "title": "Transcrição atual",
+ "title": "Transcrição",
"restoreWord": "Restaurar \"{{word}}\"",
"revertWord": "Restaurar \"{{original}}\"",
"editingHint": "Clique duas vezes em uma palavra para corrigi-la, Backspace a corta do vídeo.",
diff --git a/src/i18n/locales/ru/settings.json b/src/i18n/locales/ru/settings.json
index c390819f5..cdf952de0 100644
--- a/src/i18n/locales/ru/settings.json
+++ b/src/i18n/locales/ru/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Запись",
"noTranscript": "Расшифровки пока нет",
- "title": "Текущая расшифровка",
+ "title": "Расшифровка",
"restoreWord": "Вернуть «{{word}}»",
"revertWord": "Вернуть «{{original}}»",
"editingHint": "Дважды щёлкните слово, чтобы исправить его, Backspace вырезает его из фильма.",
diff --git a/src/i18n/locales/tr/settings.json b/src/i18n/locales/tr/settings.json
index 6309560f7..46812be46 100644
--- a/src/i18n/locales/tr/settings.json
+++ b/src/i18n/locales/tr/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Kayıt",
"noTranscript": "Henüz döküm yok",
- "title": "Geçerli döküm",
+ "title": "Metin Dökümü",
"restoreWord": "\"{{word}}\" kelimesini geri al",
"revertWord": "\"{{original}}\" haline getir",
"editingHint": "Bir kelimeye çift tıklayarak düzeltin, Backspace onu videodan keser.",
diff --git a/src/i18n/locales/vi/settings.json b/src/i18n/locales/vi/settings.json
index 719f80e21..ae6323e29 100644
--- a/src/i18n/locales/vi/settings.json
+++ b/src/i18n/locales/vi/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "Bản ghi",
"noTranscript": "Chưa có bản chép lời",
- "title": "Bản chép lời hiện tại",
+ "title": "Bản chép lời",
"restoreWord": "Khôi phục \"{{word}}\"",
"revertWord": "Khôi phục \"{{original}}\"",
"editingHint": "Nhấp đúp vào một từ để sửa nó, Backspace cắt nó khỏi video.",
diff --git a/src/i18n/locales/zh-CN/settings.json b/src/i18n/locales/zh-CN/settings.json
index fb5033f53..316d6a2a9 100644
--- a/src/i18n/locales/zh-CN/settings.json
+++ b/src/i18n/locales/zh-CN/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "录制",
"noTranscript": "暂无转录",
- "title": "当前转录",
+ "title": "转录",
"restoreWord": "恢复“{{word}}”",
"revertWord": "还原为“{{original}}”",
"editingHint": "双击单词即可修正,Backspace 将其从影片中剪掉。",
diff --git a/src/i18n/locales/zh-TW/settings.json b/src/i18n/locales/zh-TW/settings.json
index cb02cc88f..c878478ce 100644
--- a/src/i18n/locales/zh-TW/settings.json
+++ b/src/i18n/locales/zh-TW/settings.json
@@ -113,7 +113,7 @@
"transcript": {
"laneRecording": "錄影",
"noTranscript": "尚無逐字稿",
- "title": "目前的逐字稿",
+ "title": "逐字稿",
"restoreWord": "還原「{{word}}」",
"revertWord": "還原為「{{original}}」",
"editingHint": "雙擊單字即可修正,Backspace 將其從影片中剪掉。",
diff --git a/website/scripts/gen-recreation.mjs b/website/scripts/gen-recreation.mjs
index 0d3a416ef..4887bc83e 100644
--- a/website/scripts/gen-recreation.mjs
+++ b/website/scripts/gen-recreation.mjs
@@ -104,6 +104,7 @@ const appModule = (rel) => import(pathToFileURL(resolve(APP, rel)).href);
const { formatSec, formatMs } = await appModule("src/lib/ai-edition/timeline/format.ts");
const { effectiveZoomScale } = await appModule("src/lib/ai-edition/timeline/zoom-scale.ts");
+const { removedRawSpans } = await appModule("src/lib/ai-edition/timeline/programme-time.ts");
const { buildClipSection, isSilenceWord, SILENCE_THRESHOLD_SEC } = await appModule(
"src/lib/ai-edition/timeline/aggregated-transcript.ts",
);
@@ -332,8 +333,9 @@ const asset = doc.assets[0];
const clip = doc.timeline.clips[0];
const totalSec = asset.durationSec;
const trims = doc.timeline.trimRanges;
+const removed = removedRawSpans(doc.timeline.clips, trims);
-const section = buildClipSection(clip, { ...doc.transcript, segments: [] }, asset, trims);
+const section = buildClipSection(clip, { ...doc.transcript, segments: [] }, asset, removed);
const pct = (sec) => Number(((sec / totalSec) * 100).toFixed(4));
@@ -354,7 +356,7 @@ const WORDS = section.words.map((cw, i) => {
startSec: cw.word.startSec,
endSec: cw.word.endSec,
kept: cw.kept,
- trimId: cw.trimId,
+ trimId: cw.trimIds[0] ?? null,
};
});
diff --git a/website/src/components/Recreation/generated.ts b/website/src/components/Recreation/generated.ts
index 1409939ba..4205cb6a2 100644
--- a/website/src/components/Recreation/generated.ts
+++ b/website/src/components/Recreation/generated.ts
@@ -71,7 +71,7 @@ export const META = {
/** The transcript pane's header. */
export const INSPECTOR = {
- title: "Current transcription",
+ title: "Transcript",
indexBadge: "1",
filename: "Bellrock — docs walkthrough",
clipRange: "Clip 1 · 0:00.0—0:40.0",
@@ -765,7 +765,7 @@ export const TOKENS = {
/** One entry per string on screen. */
export const PROVENANCE: ProvenanceEntry[] = [
- { shown: "Current transcription", source: "src/i18n/locales/en/settings.json → transcript.title" },
+ { shown: "Transcript", source: "src/i18n/locales/en/settings.json → transcript.title" },
{ shown: "Clip 1 · 0:00.0—0:40.0", source: "computed: settings.json transcript.clipLabel with index 1, joined to formatMs(0) and formatMs(40033) from src/lib/ai-edition/timeline/format.ts" },
{ shown: "Bellrock — docs walkthrough", source: "fixture assets[0].label" },
{ shown: "[silence 2.2s]", source: "computed: settings.json transcript.silence over the 2.190s gap 0–2.19 that buildClipSection inserted at SILENCE_THRESHOLD_SEC 0.2; inside trimRange trim_f52989cf-489c-47f5-a6c7-b95a7d71b399" },
diff --git a/website/src/components/Recreation/index.tsx b/website/src/components/Recreation/index.tsx
index 53dbc524f..8fbbde9ee 100644
--- a/website/src/components/Recreation/index.tsx
+++ b/website/src/components/Recreation/index.tsx
@@ -49,7 +49,7 @@ import {
import { useEffect, useRef } from "react";
import { attachDriver, SCENE_QUERIES } from "./driver";
-import { CONTROLS, CURSORS, PANELS } from "./generated";
+import { CONTROLS, CURSORS, INSPECTOR, PANELS } from "./generated";
import {
BEATS,
CLIPS,
@@ -224,7 +224,7 @@ export default function Recreation() {
{PANELS.cursor.title}
- Current transcription
+ {INSPECTOR.title}
@@ -337,7 +337,7 @@ export default function Recreation() {
/>
- {/* ── Current transcription ── */}
+ {/* ── Transcript ── */}