summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/transcription
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-03-27 00:55:15 +0100
committerMaze Winther <mazewinther@gmail.com>2026-03-29 15:56:48 +0200
commit4d127a038bf768eded68aae3cfa5c1b12241bdac (patch)
tree16bbb801caf6770546cff4fdb37b6408ec9ead98 /apps/web/src/lib/transcription
parent82817cb50cb0487350573d6129130aec705f924b (diff)
downloadopencut-4d127a038bf768eded68aae3cfa5c1b12241bdac.tar.gz
chore: normalize line endings
Diffstat (limited to 'apps/web/src/lib/transcription')
-rw-r--r--apps/web/src/lib/transcription/caption.ts98
-rw-r--r--apps/web/src/lib/transcription/types.ts94
2 files changed, 96 insertions, 96 deletions
diff --git a/apps/web/src/lib/transcription/caption.ts b/apps/web/src/lib/transcription/caption.ts
index c7c1b7b4..6f73ddec 100644
--- a/apps/web/src/lib/transcription/caption.ts
+++ b/apps/web/src/lib/transcription/caption.ts
@@ -1,49 +1,49 @@
-import type { TranscriptionSegment, CaptionChunk } from "@/lib/transcription/types";
-import {
- DEFAULT_WORDS_PER_CAPTION,
- MIN_CAPTION_DURATION_SECONDS,
-} from "@/constants/transcription-constants";
-
-export function buildCaptionChunks({
- segments,
- wordsPerChunk = DEFAULT_WORDS_PER_CAPTION,
- minDuration = MIN_CAPTION_DURATION_SECONDS,
-}: {
- segments: TranscriptionSegment[];
- wordsPerChunk?: number;
- minDuration?: number;
-}): CaptionChunk[] {
- const captions: CaptionChunk[] = [];
- let globalEndTime = 0;
-
- for (const segment of segments) {
- const words = segment.text.trim().split(/\s+/);
- if (words.length === 0 || (words.length === 1 && words[0] === "")) continue;
-
- const segmentDuration = segment.end - segment.start;
- const wordsPerSecond = words.length / segmentDuration;
-
- const chunks: string[] = [];
- for (let i = 0; i < words.length; i += wordsPerChunk) {
- chunks.push(words.slice(i, i + wordsPerChunk).join(" "));
- }
-
- let chunkStartTime = segment.start;
- for (const chunk of chunks) {
- const chunkWords = chunk.split(/\s+/).length;
- const chunkDuration = Math.max(minDuration, chunkWords / wordsPerSecond);
- const adjustedStartTime = Math.max(chunkStartTime, globalEndTime);
-
- captions.push({
- text: chunk,
- startTime: adjustedStartTime,
- duration: chunkDuration,
- });
-
- globalEndTime = adjustedStartTime + chunkDuration;
- chunkStartTime += chunkDuration;
- }
- }
-
- return captions;
-}
+import type { TranscriptionSegment, CaptionChunk } from "@/lib/transcription/types";
+import {
+ DEFAULT_WORDS_PER_CAPTION,
+ MIN_CAPTION_DURATION_SECONDS,
+} from "@/constants/transcription-constants";
+
+export function buildCaptionChunks({
+ segments,
+ wordsPerChunk = DEFAULT_WORDS_PER_CAPTION,
+ minDuration = MIN_CAPTION_DURATION_SECONDS,
+}: {
+ segments: TranscriptionSegment[];
+ wordsPerChunk?: number;
+ minDuration?: number;
+}): CaptionChunk[] {
+ const captions: CaptionChunk[] = [];
+ let globalEndTime = 0;
+
+ for (const segment of segments) {
+ const words = segment.text.trim().split(/\s+/);
+ if (words.length === 0 || (words.length === 1 && words[0] === "")) continue;
+
+ const segmentDuration = segment.end - segment.start;
+ const wordsPerSecond = words.length / segmentDuration;
+
+ const chunks: string[] = [];
+ for (let i = 0; i < words.length; i += wordsPerChunk) {
+ chunks.push(words.slice(i, i + wordsPerChunk).join(" "));
+ }
+
+ let chunkStartTime = segment.start;
+ for (const chunk of chunks) {
+ const chunkWords = chunk.split(/\s+/).length;
+ const chunkDuration = Math.max(minDuration, chunkWords / wordsPerSecond);
+ const adjustedStartTime = Math.max(chunkStartTime, globalEndTime);
+
+ captions.push({
+ text: chunk,
+ startTime: adjustedStartTime,
+ duration: chunkDuration,
+ });
+
+ globalEndTime = adjustedStartTime + chunkDuration;
+ chunkStartTime += chunkDuration;
+ }
+ }
+
+ return captions;
+}
diff --git a/apps/web/src/lib/transcription/types.ts b/apps/web/src/lib/transcription/types.ts
index 9724ad70..c4a87aa8 100644
--- a/apps/web/src/lib/transcription/types.ts
+++ b/apps/web/src/lib/transcription/types.ts
@@ -1,47 +1,47 @@
-import type { LanguageCode } from "@/constants/language-constants";
-
-export type TranscriptionLanguage = LanguageCode | "auto";
-
-export interface TranscriptionSegment {
- text: string;
- start: number;
- end: number;
-}
-
-export interface TranscriptionResult {
- text: string;
- segments: TranscriptionSegment[];
- language: string;
-}
-
-export type TranscriptionStatus =
- | "idle"
- | "loading-model"
- | "transcribing"
- | "complete"
- | "error";
-
-export interface TranscriptionProgress {
- status: TranscriptionStatus;
- progress: number;
- message?: string;
-}
-
-export type TranscriptionModelId =
- | "whisper-tiny"
- | "whisper-small"
- | "whisper-medium"
- | "whisper-large-v3-turbo";
-
-export interface TranscriptionModel {
- id: TranscriptionModelId;
- name: string;
- huggingFaceId: string;
- description: string;
-}
-
-export interface CaptionChunk {
- text: string;
- startTime: number;
- duration: number;
-}
+import type { LanguageCode } from "@/constants/language-constants";
+
+export type TranscriptionLanguage = LanguageCode | "auto";
+
+export interface TranscriptionSegment {
+ text: string;
+ start: number;
+ end: number;
+}
+
+export interface TranscriptionResult {
+ text: string;
+ segments: TranscriptionSegment[];
+ language: string;
+}
+
+export type TranscriptionStatus =
+ | "idle"
+ | "loading-model"
+ | "transcribing"
+ | "complete"
+ | "error";
+
+export interface TranscriptionProgress {
+ status: TranscriptionStatus;
+ progress: number;
+ message?: string;
+}
+
+export type TranscriptionModelId =
+ | "whisper-tiny"
+ | "whisper-small"
+ | "whisper-medium"
+ | "whisper-large-v3-turbo";
+
+export interface TranscriptionModel {
+ id: TranscriptionModelId;
+ name: string;
+ huggingFaceId: string;
+ description: string;
+}
+
+export interface CaptionChunk {
+ text: string;
+ startTime: number;
+ duration: number;
+}