diff --git a/bun.lockb b/bun.lockb index 83eca197..ca5b6789 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/config/cameras.ts b/config/cameras.ts index f3b43e63..ab6bb1ab 100644 --- a/config/cameras.ts +++ b/config/cameras.ts @@ -3,3 +3,4 @@ export const DISPLAY_PREFIX = "display"; export const ALTERNATIVE1_PREFIX = "alternative1"; export const ALTERNATIVE2_PREFIX = "alternative2"; export const CAPTIONS_PREFIX = "subs"; +export const CODE_PREFIX = "code"; diff --git a/config/scenes.ts b/config/scenes.ts index 570ccf1f..edda49db 100644 --- a/config/scenes.ts +++ b/config/scenes.ts @@ -118,6 +118,7 @@ export type Cameras = { captions: StaticFile | null; alternative1: StaticFile | null; alternative2: StaticFile | null; + code: StaticFile | null; timestamp: number; }; diff --git a/package.json b/package.json index 64d40bb3..f205b330 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "@remotion/studio-server": "4.0.176", "@remotion/zod-types": "4.0.176", "class-variance-authority": "^0.7.0", + "twoslash-cdn": "^0.2.8", + "codehike": "1.0.0-alpha.19", "clsx": "^2.0.0", "connect": "3.7.0", "eslint": "^8", diff --git a/public/codehike/code1719140172694.tsx b/public/codehike/code1719140172694.tsx new file mode 100644 index 00000000..45a0468e --- /dev/null +++ b/public/codehike/code1719140172694.tsx @@ -0,0 +1,10 @@ +// @noErrors + +type MyProps = { + onClick: () => void; + onDblClick: () => void; +}; + +const props: MyProps = { + onClick: () => {}, +}; diff --git a/public/codehike/code1719140203344.tsx b/public/codehike/code1719140203344.tsx new file mode 100644 index 00000000..aa97dd99 --- /dev/null +++ b/public/codehike/code1719140203344.tsx @@ -0,0 +1,10 @@ +// @errors: 2304 +type Props = { + onClick: () => void; + onDblClick: () => void; +}; + +// @errors: 2741 +const props: Props = { + onClick: () => {}, +}; diff --git a/public/codehike/code1719140219229.tsx b/public/codehike/code1719140219229.tsx new file mode 100644 index 00000000..b2c94f0d --- /dev/null +++ b/public/codehike/code1719140219229.tsx @@ -0,0 +1,9 @@ +type Props = { + onClick: () => void; + onDblClick: () => void; +}; + +const props: Props = { + onClick: () => {}, + onDblClick: () => {}, +}; diff --git a/public/codehike/subs1719140172694.json b/public/codehike/subs1719140172694.json new file mode 100644 index 00000000..8da1902e --- /dev/null +++ b/public/codehike/subs1719140172694.json @@ -0,0 +1,546 @@ +{ + "systeminfo": "AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | METAL = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | CUDA = 0 | COREML = 0 | OPENVINO = 0", + "model": { + "type": "medium", + "multilingual": false, + "vocab": 51864, + "audio": { + "ctx": 1500, + "state": 1024, + "head": 16, + "layer": 24 + }, + "text": { + "ctx": 448, + "state": 1024, + "head": 16, + "layer": 24 + }, + "mels": 80, + "ftype": 1 + }, + "params": { + "model": "/Users/jonathanburger/recorder/whisper.cpp/ggml-medium.en.bin", + "language": "en", + "translate": false + }, + "result": { + "language": "en" + }, + "transcription": [ + { + "timestamps": { + "from": "00:00:00,960", + "to": "00:00:01,010" + }, + "offsets": { + "from": 960, + "to": 1010 + }, + "text": " Welcome", + "tokens": [ + { + "text": " Welcome", + "timestamps": { + "from": "00:00:00,060", + "to": "00:00:00,870" + }, + "offsets": { + "from": 60, + "to": 870 + }, + "id": 19134, + "p": 0.918962, + "t_dtw": 134 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,010", + "to": "00:00:01,140" + }, + "offsets": { + "from": 1010, + "to": 1140 + }, + "text": " to", + "tokens": [ + { + "text": " to", + "timestamps": { + "from": "00:00:01,010", + "to": "00:00:01,140" + }, + "offsets": { + "from": 1010, + "to": 1140 + }, + "id": 284, + "p": 0.996348, + "t_dtw": 166 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,140", + "to": "00:00:01,390" + }, + "offsets": { + "from": 1140, + "to": 1390 + }, + "text": " my", + "tokens": [ + { + "text": " my", + "timestamps": { + "from": "00:00:01,140", + "to": "00:00:01,390" + }, + "offsets": { + "from": 1140, + "to": 1390 + }, + "id": 616, + "p": 0.990596, + "t_dtw": 186 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,390", + "to": "00:00:02,030" + }, + "offsets": { + "from": 1390, + "to": 2030 + }, + "text": " crazy", + "tokens": [ + { + "text": " crazy", + "timestamps": { + "from": "00:00:01,390", + "to": "00:00:02,030" + }, + "offsets": { + "from": 1390, + "to": 2030 + }, + "id": 7165, + "p": 0.961011, + "t_dtw": 232 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,030", + "to": "00:00:02,540" + }, + "offsets": { + "from": 2030, + "to": 2540 + }, + "text": " good", + "tokens": [ + { + "text": " good", + "timestamps": { + "from": "00:00:02,030", + "to": "00:00:02,540" + }, + "offsets": { + "from": 2030, + "to": 2540 + }, + "id": 922, + "p": 0.894896, + "t_dtw": 266 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,540", + "to": "00:00:03,040" + }, + "offsets": { + "from": 2540, + "to": 3040 + }, + "text": " Type", + "tokens": [ + { + "text": " Type", + "timestamps": { + "from": "00:00:02,540", + "to": "00:00:03,000" + }, + "offsets": { + "from": 2540, + "to": 3000 + }, + "id": 5994, + "p": 0.54778, + "t_dtw": 306 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,040", + "to": "00:00:03,870" + }, + "offsets": { + "from": 3040, + "to": 3870 + }, + "text": "Script", + "tokens": [ + { + "text": "Script", + "timestamps": { + "from": "00:00:03,040", + "to": "00:00:03,620" + }, + "offsets": { + "from": 3040, + "to": 3620 + }, + "id": 7391, + "p": 0.999426, + "t_dtw": 326 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,870", + "to": "00:00:04,300" + }, + "offsets": { + "from": 3870, + "to": 4300 + }, + "text": " tip", + "tokens": [ + { + "text": " tip", + "timestamps": { + "from": "00:00:03,870", + "to": "00:00:04,210" + }, + "offsets": { + "from": 3870, + "to": 4210 + }, + "id": 8171, + "p": 0.805748, + "t_dtw": 370 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,300", + "to": "00:00:04,300" + }, + "offsets": { + "from": 4300, + "to": 4300 + }, + "text": ".", + "tokens": [ + { + "text": ".", + "timestamps": { + "from": "00:00:04,300", + "to": "00:00:04,300" + }, + "offsets": { + "from": 4300, + "to": 4300 + }, + "id": 13, + "p": 0.652951, + "t_dtw": 426 + }, + { + "text": "[_TT_215]", + "timestamps": { + "from": "00:00:04,300", + "to": "00:00:04,300" + }, + "offsets": { + "from": 4300, + "to": 4300 + }, + "id": 50578, + "p": 0.0862063, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,300", + "to": "00:00:04,450" + }, + "offsets": { + "from": 4300, + "to": 4450 + }, + "text": " Do", + "tokens": [ + { + "text": " Do", + "timestamps": { + "from": "00:00:04,360", + "to": "00:00:04,450" + }, + "offsets": { + "from": 4360, + "to": 4450 + }, + "id": 2141, + "p": 0.984605, + "t_dtw": 446 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,450", + "to": "00:00:04,770" + }, + "offsets": { + "from": 4450, + "to": 4770 + }, + "text": " you", + "tokens": [ + { + "text": " you", + "timestamps": { + "from": "00:00:04,450", + "to": "00:00:04,650" + }, + "offsets": { + "from": 4450, + "to": 4650 + }, + "id": 345, + "p": 0.999153, + "t_dtw": 458 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,770", + "to": "00:00:04,890" + }, + "offsets": { + "from": 4770, + "to": 4890 + }, + "text": " see", + "tokens": [ + { + "text": " see", + "timestamps": { + "from": "00:00:04,770", + "to": "00:00:04,880" + }, + "offsets": { + "from": 4770, + "to": 4880 + }, + "id": 766, + "p": 0.997425, + "t_dtw": 488 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,890", + "to": "00:00:05,160" + }, + "offsets": { + "from": 4890, + "to": 5160 + }, + "text": " the", + "tokens": [ + { + "text": " the", + "timestamps": { + "from": "00:00:04,890", + "to": "00:00:04,980" + }, + "offsets": { + "from": 4890, + "to": 4980 + }, + "id": 262, + "p": 0.98491, + "t_dtw": 518 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,160", + "to": "00:00:05,490" + }, + "offsets": { + "from": 5160, + "to": 5490 + }, + "text": " error", + "tokens": [ + { + "text": " error", + "timestamps": { + "from": "00:00:05,160", + "to": "00:00:05,490" + }, + "offsets": { + "from": 5160, + "to": 5490 + }, + "id": 4049, + "p": 0.995685, + "t_dtw": 548 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,490", + "to": "00:00:05,640" + }, + "offsets": { + "from": 5490, + "to": 5640 + }, + "text": " in", + "tokens": [ + { + "text": " in", + "timestamps": { + "from": "00:00:05,490", + "to": "00:00:05,640" + }, + "offsets": { + "from": 5490, + "to": 5640 + }, + "id": 287, + "p": 0.99728, + "t_dtw": 580 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,640", + "to": "00:00:05,940" + }, + "offsets": { + "from": 5640, + "to": 5940 + }, + "text": " this", + "tokens": [ + { + "text": " this", + "timestamps": { + "from": "00:00:05,640", + "to": "00:00:05,930" + }, + "offsets": { + "from": 5640, + "to": 5930 + }, + "id": 428, + "p": 0.557551, + "t_dtw": 596 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,940", + "to": "00:00:06,400" + }, + "offsets": { + "from": 5940, + "to": 6400 + }, + "text": " snippet", + "tokens": [ + { + "text": " snippet", + "timestamps": { + "from": "00:00:05,940", + "to": "00:00:06,400" + }, + "offsets": { + "from": 5940, + "to": 6400 + }, + "id": 39442, + "p": 0.995763, + "t_dtw": 642 + } + ] + }, + { + "timestamps": { + "from": "00:00:06,400", + "to": "00:00:06,740" + }, + "offsets": { + "from": 6400, + "to": 6740 + }, + "text": "?", + "tokens": [ + { + "text": "?", + "timestamps": { + "from": "00:00:06,400", + "to": "00:00:06,550" + }, + "offsets": { + "from": 6400, + "to": 6550 + }, + "id": 30, + "p": 0.990973, + "t_dtw": 668 + }, + { + "text": "[_TT_337]", + "timestamps": { + "from": "00:00:06,740", + "to": "00:00:06,740" + }, + "offsets": { + "from": 6740, + "to": 6740 + }, + "id": 50700, + "p": 0.0876958, + "t_dtw": -1 + } + ] + } + ] +} diff --git a/public/codehike/subs1719140203344.json b/public/codehike/subs1719140203344.json new file mode 100644 index 00000000..a86a1ff3 --- /dev/null +++ b/public/codehike/subs1719140203344.json @@ -0,0 +1,627 @@ +{ + "systeminfo": "AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | METAL = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | CUDA = 0 | COREML = 0 | OPENVINO = 0", + "model": { + "type": "medium", + "multilingual": false, + "vocab": 51864, + "audio": { + "ctx": 1500, + "state": 1024, + "head": 16, + "layer": 24 + }, + "text": { + "ctx": 448, + "state": 1024, + "head": 16, + "layer": 24 + }, + "mels": 80, + "ftype": 1 + }, + "params": { + "model": "/Users/jonathanburger/recorder/whisper.cpp/ggml-medium.en.bin", + "language": "en", + "translate": false + }, + "result": { + "language": "en" + }, + "transcription": [ + { + "timestamps": { + "from": "00:00:00,000", + "to": "00:00:00,060" + }, + "offsets": { + "from": 0, + "to": 60 + }, + "text": "", + "tokens": [ + { + "text": "[_BEG_]", + "timestamps": { + "from": "00:00:00,000", + "to": "00:00:00,000" + }, + "offsets": { + "from": 0, + "to": 0 + }, + "id": 50363, + "p": 0.736657, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,060", + "to": "00:00:00,310" + }, + "offsets": { + "from": 60, + "to": 310 + }, + "text": " Let", + "tokens": [ + { + "text": " Let", + "timestamps": { + "from": "00:00:00,060", + "to": "00:00:00,310" + }, + "offsets": { + "from": 60, + "to": 310 + }, + "id": 3914, + "p": 0.867856, + "t_dtw": 114 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,310", + "to": "00:00:00,520" + }, + "offsets": { + "from": 310, + "to": 520 + }, + "text": "'s", + "tokens": [ + { + "text": "'s", + "timestamps": { + "from": "00:00:00,310", + "to": "00:00:00,520" + }, + "offsets": { + "from": 310, + "to": 520 + }, + "id": 338, + "p": 0.979141, + "t_dtw": 126 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,520", + "to": "00:00:00,960" + }, + "offsets": { + "from": 520, + "to": 960 + }, + "text": " see", + "tokens": [ + { + "text": " see", + "timestamps": { + "from": "00:00:00,520", + "to": "00:00:00,820" + }, + "offsets": { + "from": 520, + "to": 820 + }, + "id": 766, + "p": 0.996436, + "t_dtw": 142 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,960", + "to": "00:00:01,280" + }, + "offsets": { + "from": 960, + "to": 1280 + }, + "text": " what", + "tokens": [ + { + "text": " what", + "timestamps": { + "from": "00:00:00,960", + "to": "00:00:01,220" + }, + "offsets": { + "from": 960, + "to": 1220 + }, + "id": 644, + "p": 0.967316, + "t_dtw": 160 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,280", + "to": "00:00:01,560" + }, + "offsets": { + "from": 1280, + "to": 1560 + }, + "text": " the", + "tokens": [ + { + "text": " the", + "timestamps": { + "from": "00:00:01,280", + "to": "00:00:01,560" + }, + "offsets": { + "from": 1280, + "to": 1560 + }, + "id": 262, + "p": 0.965731, + "t_dtw": 184 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,560", + "to": "00:00:01,980" + }, + "offsets": { + "from": 1560, + "to": 1980 + }, + "text": " Type", + "tokens": [ + { + "text": " Type", + "timestamps": { + "from": "00:00:01,560", + "to": "00:00:01,980" + }, + "offsets": { + "from": 1560, + "to": 1980 + }, + "id": 5994, + "p": 0.550982, + "t_dtw": 202 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,980", + "to": "00:00:02,610" + }, + "offsets": { + "from": 1980, + "to": 2610 + }, + "text": "Script", + "tokens": [ + { + "text": "Script", + "timestamps": { + "from": "00:00:01,980", + "to": "00:00:02,610" + }, + "offsets": { + "from": 1980, + "to": 2610 + }, + "id": 7391, + "p": 0.998452, + "t_dtw": 236 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,610", + "to": "00:00:03,130" + }, + "offsets": { + "from": 2610, + "to": 3130 + }, + "text": " error", + "tokens": [ + { + "text": " error", + "timestamps": { + "from": "00:00:02,610", + "to": "00:00:03,130" + }, + "offsets": { + "from": 2610, + "to": 3130 + }, + "id": 4049, + "p": 0.833631, + "t_dtw": 280 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,130", + "to": "00:00:03,750" + }, + "offsets": { + "from": 3130, + "to": 3750 + }, + "text": " says", + "tokens": [ + { + "text": " says", + "timestamps": { + "from": "00:00:03,130", + "to": "00:00:03,400" + }, + "offsets": { + "from": 3130, + "to": 3400 + }, + "id": 1139, + "p": 0.97491, + "t_dtw": 346 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,750", + "to": "00:00:03,810" + }, + "offsets": { + "from": 3750, + "to": 3810 + }, + "text": ".", + "tokens": [ + { + "text": ".", + "timestamps": { + "from": "00:00:03,750", + "to": "00:00:03,810" + }, + "offsets": { + "from": 3750, + "to": 3810 + }, + "id": 13, + "p": 0.791966, + "t_dtw": 386 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,810", + "to": "00:00:04,020" + }, + "offsets": { + "from": 3810, + "to": 4020 + }, + "text": " Wow", + "tokens": [ + { + "text": " Wow", + "timestamps": { + "from": "00:00:03,810", + "to": "00:00:04,020" + }, + "offsets": { + "from": 3810, + "to": 4020 + }, + "id": 24755, + "p": 0.574832, + "t_dtw": 412 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,020", + "to": "00:00:04,170" + }, + "offsets": { + "from": 4020, + "to": 4170 + }, + "text": ",", + "tokens": [ + { + "text": ",", + "timestamps": { + "from": "00:00:04,020", + "to": "00:00:04,110" + }, + "offsets": { + "from": 4020, + "to": 4110 + }, + "id": 11, + "p": 0.658071, + "t_dtw": 418 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,170", + "to": "00:00:04,440" + }, + "offsets": { + "from": 4170, + "to": 4440 + }, + "text": " that", + "tokens": [ + { + "text": " that", + "timestamps": { + "from": "00:00:04,170", + "to": "00:00:04,440" + }, + "offsets": { + "from": 4170, + "to": 4440 + }, + "id": 326, + "p": 0.969733, + "t_dtw": 440 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,440", + "to": "00:00:04,600" + }, + "offsets": { + "from": 4440, + "to": 4600 + }, + "text": " is", + "tokens": [ + { + "text": " is", + "timestamps": { + "from": "00:00:04,440", + "to": "00:00:04,450" + }, + "offsets": { + "from": 4440, + "to": 4450 + }, + "id": 318, + "p": 0.887588, + "t_dtw": 456 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,600", + "to": "00:00:04,860" + }, + "offsets": { + "from": 4600, + "to": 4860 + }, + "text": " very", + "tokens": [ + { + "text": " very", + "timestamps": { + "from": "00:00:04,600", + "to": "00:00:04,860" + }, + "offsets": { + "from": 4600, + "to": 4860 + }, + "id": 845, + "p": 0.975135, + "t_dtw": 488 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,860", + "to": "00:00:05,350" + }, + "offsets": { + "from": 4860, + "to": 5350 + }, + "text": " helpful", + "tokens": [ + { + "text": " helpful", + "timestamps": { + "from": "00:00:04,860", + "to": "00:00:05,350" + }, + "offsets": { + "from": 4860, + "to": 5350 + }, + "id": 7613, + "p": 0.993722, + "t_dtw": 540 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,350", + "to": "00:00:05,600" + }, + "offsets": { + "from": 5350, + "to": 5600 + }, + "text": "!", + "tokens": [ + { + "text": "!", + "timestamps": { + "from": "00:00:05,350", + "to": "00:00:05,520" + }, + "offsets": { + "from": 5350, + "to": 5520 + }, + "id": 0, + "p": 0.378857, + "t_dtw": 558 + }, + { + "text": "[_TT_280]", + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:05,600" + }, + "offsets": { + "from": 5600, + "to": 5600 + }, + "id": 50643, + "p": 0.0203797, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:05,600" + }, + "offsets": { + "from": 5600, + "to": 5600 + }, + "text": "", + "tokens": [ + { + "text": "[_BEG_]", + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:05,600" + }, + "offsets": { + "from": 5600, + "to": 5600 + }, + "id": 50363, + "p": 0.900841, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:06,120" + }, + "offsets": { + "from": 5600, + "to": 6120 + }, + "text": "", + "tokens": [ + { + "text": " Peace", + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:06,120" + }, + "offsets": { + "from": 5600, + "to": 6120 + }, + "id": 12689, + "p": 0.107621, + "t_dtw": 602 + } + ] + }, + { + "timestamps": { + "from": "00:00:06,120", + "to": "00:00:06,440" + }, + "offsets": { + "from": 6120, + "to": 6440 + }, + "text": "", + "tokens": [ + { + "text": ".", + "timestamps": { + "from": "00:00:06,120", + "to": "00:00:06,390" + }, + "offsets": { + "from": 6120, + "to": 6390 + }, + "id": 13, + "p": 0.889157, + "t_dtw": 642 + }, + { + "text": "[_TT_42]", + "timestamps": { + "from": "00:00:06,440", + "to": "00:00:06,440" + }, + "offsets": { + "from": 6440, + "to": 6440 + }, + "id": 50405, + "p": 0.319275, + "t_dtw": -1 + } + ] + } + ] +} \ No newline at end of file diff --git a/public/codehike/subs1719140219229.json b/public/codehike/subs1719140219229.json new file mode 100644 index 00000000..a9f0f9c8 --- /dev/null +++ b/public/codehike/subs1719140219229.json @@ -0,0 +1,1019 @@ +{ + "systeminfo": "AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | METAL = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | CUDA = 0 | COREML = 0 | OPENVINO = 0", + "model": { + "type": "medium", + "multilingual": false, + "vocab": 51864, + "audio": { + "ctx": 1500, + "state": 1024, + "head": 16, + "layer": 24 + }, + "text": { + "ctx": 448, + "state": 1024, + "head": 16, + "layer": 24 + }, + "mels": 80, + "ftype": 1 + }, + "params": { + "model": "/Users/jonathanburger/recorder/whisper.cpp/ggml-medium.en.bin", + "language": "en", + "translate": false + }, + "result": { + "language": "en" + }, + "transcription": [ + { + "timestamps": { + "from": "00:00:00,000", + "to": "00:00:00,070" + }, + "offsets": { + "from": 0, + "to": 70 + }, + "text": "", + "tokens": [ + { + "text": "[_BEG_]", + "timestamps": { + "from": "00:00:00,000", + "to": "00:00:00,000" + }, + "offsets": { + "from": 0, + "to": 0 + }, + "id": 50363, + "p": 0.757939, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,070", + "to": "00:00:00,220" + }, + "offsets": { + "from": 70, + "to": 220 + }, + "text": " So", + "tokens": [ + { + "text": " So", + "timestamps": { + "from": "00:00:00,070", + "to": "00:00:00,190" + }, + "offsets": { + "from": 70, + "to": 190 + }, + "id": 1406, + "p": 0.895692, + "t_dtw": 102 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,220", + "to": "00:00:00,400" + }, + "offsets": { + "from": 220, + "to": 400 + }, + "text": ",", + "tokens": [ + { + "text": ",", + "timestamps": { + "from": "00:00:00,220", + "to": "00:00:00,400" + }, + "offsets": { + "from": 220, + "to": 400 + }, + "id": 11, + "p": 0.562756, + "t_dtw": 120 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,400", + "to": "00:00:00,840" + }, + "offsets": { + "from": 400, + "to": 840 + }, + "text": " it", + "tokens": [ + { + "text": " it", + "timestamps": { + "from": "00:00:00,400", + "to": "00:00:00,600" + }, + "offsets": { + "from": 400, + "to": 600 + }, + "id": 340, + "p": 0.985146, + "t_dtw": 130 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,840", + "to": "00:00:01,160" + }, + "offsets": { + "from": 840, + "to": 1160 + }, + "text": " turns", + "tokens": [ + { + "text": " turns", + "timestamps": { + "from": "00:00:00,840", + "to": "00:00:01,090" + }, + "offsets": { + "from": 840, + "to": 1090 + }, + "id": 4962, + "p": 0.9893, + "t_dtw": 152 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,160", + "to": "00:00:01,420" + }, + "offsets": { + "from": 1160, + "to": 1420 + }, + "text": " out", + "tokens": [ + { + "text": " out", + "timestamps": { + "from": "00:00:01,160", + "to": "00:00:01,420" + }, + "offsets": { + "from": 1160, + "to": 1420 + }, + "id": 503, + "p": 0.994958, + "t_dtw": 186 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,420", + "to": "00:00:01,980" + }, + "offsets": { + "from": 1420, + "to": 1980 + }, + "text": " that", + "tokens": [ + { + "text": " that", + "timestamps": { + "from": "00:00:01,420", + "to": "00:00:01,820" + }, + "offsets": { + "from": 1420, + "to": 1820 + }, + "id": 326, + "p": 0.918566, + "t_dtw": 214 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,980", + "to": "00:00:02,030" + }, + "offsets": { + "from": 1980, + "to": 2030 + }, + "text": " we", + "tokens": [ + { + "text": " we", + "timestamps": { + "from": "00:00:01,980", + "to": "00:00:02,030" + }, + "offsets": { + "from": 1980, + "to": 2030 + }, + "id": 356, + "p": 0.996018, + "t_dtw": 230 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,030", + "to": "00:00:02,790" + }, + "offsets": { + "from": 2030, + "to": 2790 + }, + "text": " forgot", + "tokens": [ + { + "text": " forgot", + "timestamps": { + "from": "00:00:02,030", + "to": "00:00:02,630" + }, + "offsets": { + "from": 2030, + "to": 2630 + }, + "id": 16453, + "p": 0.971439, + "t_dtw": 260 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,790", + "to": "00:00:03,090" + }, + "offsets": { + "from": 2790, + "to": 3090 + }, + "text": " the", + "tokens": [ + { + "text": " the", + "timestamps": { + "from": "00:00:02,790", + "to": "00:00:02,930" + }, + "offsets": { + "from": 2790, + "to": 2930 + }, + "id": 262, + "p": 0.974604, + "t_dtw": 300 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,090", + "to": "00:00:03,130" + }, + "offsets": { + "from": 3090, + "to": 3130 + }, + "text": "` on`", + "tokens": [ + { + "text": " on", + "timestamps": { + "from": "00:00:03,090", + "to": "00:00:03,130" + }, + "offsets": { + "from": 3090, + "to": 3130 + }, + "id": 319, + "p": 0.671318, + "t_dtw": 336 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,130", + "to": "00:00:03,520" + }, + "offsets": { + "from": 3130, + "to": 3520 + }, + "text": "`Dbl`", + "tokens": [ + { + "text": "Double", + "timestamps": { + "from": "00:00:03,130", + "to": "00:00:03,510" + }, + "offsets": { + "from": 3130, + "to": 3510 + }, + "id": 25628, + "p": 0.911378, + "t_dtw": 366 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,520", + "to": "00:00:03,850" + }, + "offsets": { + "from": 3520, + "to": 3850 + }, + "text": "`Click`", + "tokens": [ + { + "text": "Click", + "timestamps": { + "from": "00:00:03,520", + "to": "00:00:03,850" + }, + "offsets": { + "from": 3520, + "to": 3850 + }, + "id": 8164, + "p": 0.995564, + "t_dtw": 396 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,850", + "to": "00:00:04,000" + }, + "offsets": { + "from": 3850, + "to": 4000 + }, + "text": "`()`", + "tokens": [ + { + "text": "()", + "timestamps": { + "from": "00:00:03,850", + "to": "00:00:04,000" + }, + "offsets": { + "from": 3850, + "to": 4000 + }, + "id": 3419, + "p": 0.110995, + "t_dtw": 416 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,000", + "to": "00:00:05,060" + }, + "offsets": { + "from": 4000, + "to": 5060 + }, + "text": " method", + "tokens": [ + { + "text": " method", + "timestamps": { + "from": "00:00:04,000", + "to": "00:00:04,490" + }, + "offsets": { + "from": 4000, + "to": 4490 + }, + "id": 2446, + "p": 0.964046, + "t_dtw": 452 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,060", + "to": "00:00:05,280" + }, + "offsets": { + "from": 5060, + "to": 5280 + }, + "text": ".", + "tokens": [ + { + "text": ".", + "timestamps": { + "from": "00:00:05,060", + "to": "00:00:05,240" + }, + "offsets": { + "from": 5060, + "to": 5240 + }, + "id": 13, + "p": 0.928052, + "t_dtw": 478 + }, + { + "text": "[_TT_264]", + "timestamps": { + "from": "00:00:05,280", + "to": "00:00:05,280" + }, + "offsets": { + "from": 5280, + "to": 5280 + }, + "id": 50627, + "p": 0.043379, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,280", + "to": "00:00:05,490" + }, + "offsets": { + "from": 5280, + "to": 5490 + }, + "text": " Let", + "tokens": [ + { + "text": " Let", + "timestamps": { + "from": "00:00:05,360", + "to": "00:00:05,490" + }, + "offsets": { + "from": 5360, + "to": 5490 + }, + "id": 3914, + "p": 0.96474, + "t_dtw": 526 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,490", + "to": "00:00:05,670" + }, + "offsets": { + "from": 5490, + "to": 5670 + }, + "text": "'s", + "tokens": [ + { + "text": "'s", + "timestamps": { + "from": "00:00:05,490", + "to": "00:00:05,540" + }, + "offsets": { + "from": 5490, + "to": 5540 + }, + "id": 338, + "p": 0.999592, + "t_dtw": 532 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,670", + "to": "00:00:05,840" + }, + "offsets": { + "from": 5670, + "to": 5840 + }, + "text": " add", + "tokens": [ + { + "text": " add", + "timestamps": { + "from": "00:00:05,670", + "to": "00:00:05,840" + }, + "offsets": { + "from": 5670, + "to": 5840 + }, + "id": 751, + "p": 0.997828, + "t_dtw": 558 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,840", + "to": "00:00:06,130" + }, + "offsets": { + "from": 5840, + "to": 6130 + }, + "text": " that", + "tokens": [ + { + "text": " that", + "timestamps": { + "from": "00:00:05,840", + "to": "00:00:06,130" + }, + "offsets": { + "from": 5840, + "to": 6130 + }, + "id": 326, + "p": 0.996185, + "t_dtw": 592 + } + ] + }, + { + "timestamps": { + "from": "00:00:06,130", + "to": "00:00:06,340" + }, + "offsets": { + "from": 6130, + "to": 6340 + }, + "text": " and", + "tokens": [ + { + "text": " and", + "timestamps": { + "from": "00:00:06,130", + "to": "00:00:06,340" + }, + "offsets": { + "from": 6130, + "to": 6340 + }, + "id": 290, + "p": 0.822323, + "t_dtw": 618 + } + ] + }, + { + "timestamps": { + "from": "00:00:06,340", + "to": "00:00:06,550" + }, + "offsets": { + "from": 6340, + "to": 6550 + }, + "text": " now", + "tokens": [ + { + "text": " now", + "timestamps": { + "from": "00:00:06,340", + "to": "00:00:06,550" + }, + "offsets": { + "from": 6340, + "to": 6550 + }, + "id": 783, + "p": 0.989327, + "t_dtw": 648 + } + ] + }, + { + "timestamps": { + "from": "00:00:06,550", + "to": "00:00:06,760" + }, + "offsets": { + "from": 6550, + "to": 6760 + }, + "text": " our", + "tokens": [ + { + "text": " our", + "timestamps": { + "from": "00:00:06,550", + "to": "00:00:06,760" + }, + "offsets": { + "from": 6550, + "to": 6760 + }, + "id": 674, + "p": 0.977252, + "t_dtw": 684 + } + ] + }, + { + "timestamps": { + "from": "00:00:06,760", + "to": "00:00:07,050" + }, + "offsets": { + "from": 6760, + "to": 7050 + }, + "text": " code", + "tokens": [ + { + "text": " code", + "timestamps": { + "from": "00:00:06,760", + "to": "00:00:07,050" + }, + "offsets": { + "from": 6760, + "to": 7050 + }, + "id": 2438, + "p": 0.998197, + "t_dtw": 716 + } + ] + }, + { + "timestamps": { + "from": "00:00:07,050", + "to": "00:00:07,180" + }, + "offsets": { + "from": 7050, + "to": 7180 + }, + "text": " is", + "tokens": [ + { + "text": " is", + "timestamps": { + "from": "00:00:07,050", + "to": "00:00:07,180" + }, + "offsets": { + "from": 7050, + "to": 7180 + }, + "id": 318, + "p": 0.997048, + "t_dtw": 742 + } + ] + }, + { + "timestamps": { + "from": "00:00:07,180", + "to": "00:00:07,550" + }, + "offsets": { + "from": 7180, + "to": 7550 + }, + "text": " fixed", + "tokens": [ + { + "text": " fixed", + "timestamps": { + "from": "00:00:07,180", + "to": "00:00:07,550" + }, + "offsets": { + "from": 7180, + "to": 7550 + }, + "id": 5969, + "p": 0.994886, + "t_dtw": 782 + } + ] + }, + { + "timestamps": { + "from": "00:00:07,550", + "to": "00:00:07,840" + }, + "offsets": { + "from": 7550, + "to": 7840 + }, + "text": ".", + "tokens": [ + { + "text": ".", + "timestamps": { + "from": "00:00:07,550", + "to": "00:00:07,840" + }, + "offsets": { + "from": 7550, + "to": 7840 + }, + "id": 13, + "p": 0.836964, + "t_dtw": 782 + }, + { + "text": "[_TT_392]", + "timestamps": { + "from": "00:00:07,840", + "to": "00:00:07,840" + }, + "offsets": { + "from": 7840, + "to": 7840 + }, + "id": 50755, + "p": 0.111345, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:07,840", + "to": "00:00:07,840" + }, + "offsets": { + "from": 7840, + "to": 7840 + }, + "text": "", + "tokens": [ + { + "text": "[_BEG_]", + "timestamps": { + "from": "00:00:07,840", + "to": "00:00:07,840" + }, + "offsets": { + "from": 7840, + "to": 7840 + }, + "id": 50363, + "p": 0.922616, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:07,840", + "to": "00:00:08,420" + }, + "offsets": { + "from": 7840, + "to": 8420 + }, + "text": " [", + "tokens": [ + { + "text": " [", + "timestamps": { + "from": "00:00:07,840", + "to": "00:00:08,360" + }, + "offsets": { + "from": 7840, + "to": 8360 + }, + "id": 685, + "p": 0.281599, + "t_dtw": 850 + } + ] + }, + { + "timestamps": { + "from": "00:00:08,420", + "to": "00:00:09,590" + }, + "offsets": { + "from": 8420, + "to": 9590 + }, + "text": "BL", + "tokens": [ + { + "text": "BL", + "timestamps": { + "from": "00:00:08,420", + "to": "00:00:09,590" + }, + "offsets": { + "from": 8420, + "to": 9590 + }, + "id": 9148, + "p": 0.659063, + "t_dtw": 964 + } + ] + }, + { + "timestamps": { + "from": "00:00:09,590", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9590, + "to": 9660 + }, + "text": "ANK", + "tokens": [ + { + "text": "ANK", + "timestamps": { + "from": "00:00:09,590", + "to": "00:00:09,650" + }, + "offsets": { + "from": 9590, + "to": 9650 + }, + "id": 15154, + "p": 0.999929, + "t_dtw": 964 + } + ] + }, + { + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "text": "_", + "tokens": [ + { + "text": "_", + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "id": 62, + "p": 0.988318, + "t_dtw": 964 + } + ] + }, + { + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "text": "AUD", + "tokens": [ + { + "text": "AUD", + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "id": 48877, + "p": 0.999691, + "t_dtw": 964 + } + ] + }, + { + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "text": "IO", + "tokens": [ + { + "text": "IO", + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "id": 9399, + "p": 0.999968, + "t_dtw": 964 + } + ] + }, + { + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:15,480" + }, + "offsets": { + "from": 9660, + "to": 15480 + }, + "text": "]", + "tokens": [ + { + "text": "]", + "timestamps": { + "from": "00:00:09,660", + "to": "00:00:09,660" + }, + "offsets": { + "from": 9660, + "to": 9660 + }, + "id": 60, + "p": 0.999333, + "t_dtw": 964 + }, + { + "text": "[_TT_382]", + "timestamps": { + "from": "00:00:15,480", + "to": "00:00:15,480" + }, + "offsets": { + "from": 15480, + "to": 15480 + }, + "id": 50745, + "p": 0.0067522, + "t_dtw": -1 + } + ] + } + ] +} \ No newline at end of file diff --git a/public/codehike/subs1719140404331.json b/public/codehike/subs1719140404331.json new file mode 100644 index 00000000..02e1c592 --- /dev/null +++ b/public/codehike/subs1719140404331.json @@ -0,0 +1,505 @@ +{ + "systeminfo": "AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | METAL = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | CUDA = 0 | COREML = 0 | OPENVINO = 0", + "model": { + "type": "medium", + "multilingual": false, + "vocab": 51864, + "audio": { + "ctx": 1500, + "state": 1024, + "head": 16, + "layer": 24 + }, + "text": { + "ctx": 448, + "state": 1024, + "head": 16, + "layer": 24 + }, + "mels": 80, + "ftype": 1 + }, + "params": { + "model": "/Users/jonathanburger/recorder/whisper.cpp/ggml-medium.en.bin", + "language": "en", + "translate": false + }, + "result": { + "language": "en" + }, + "transcription": [ + { + "timestamps": { + "from": "00:00:00,000", + "to": "00:00:00,060" + }, + "offsets": { + "from": 0, + "to": 60 + }, + "text": "", + "tokens": [ + { + "text": "[_BEG_]", + "timestamps": { + "from": "00:00:00,000", + "to": "00:00:00,000" + }, + "offsets": { + "from": 0, + "to": 0 + }, + "id": 50363, + "p": 0.702479, + "t_dtw": -1 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,060", + "to": "00:00:00,690" + }, + "offsets": { + "from": 60, + "to": 690 + }, + "text": " Follow", + "tokens": [ + { + "text": " Follow", + "timestamps": { + "from": "00:00:00,060", + "to": "00:00:00,690" + }, + "offsets": { + "from": 60, + "to": 690 + }, + "id": 7281, + "p": 0.962518, + "t_dtw": 122 + } + ] + }, + { + "timestamps": { + "from": "00:00:00,690", + "to": "00:00:01,050" + }, + "offsets": { + "from": 690, + "to": 1050 + }, + "text": " me", + "tokens": [ + { + "text": " me", + "timestamps": { + "from": "00:00:00,690", + "to": "00:00:00,800" + }, + "offsets": { + "from": 690, + "to": 800 + }, + "id": 502, + "p": 0.994791, + "t_dtw": 150 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,050", + "to": "00:00:01,150" + }, + "offsets": { + "from": 1050, + "to": 1150 + }, + "text": " on", + "tokens": [ + { + "text": " on", + "timestamps": { + "from": "00:00:01,050", + "to": "00:00:01,150" + }, + "offsets": { + "from": 1050, + "to": 1150 + }, + "id": 319, + "p": 0.974154, + "t_dtw": 182 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,150", + "to": "00:00:01,260" + }, + "offsets": { + "from": 1150, + "to": 1260 + }, + "text": " X", + "tokens": [ + { + "text": " X", + "timestamps": { + "from": "00:00:01,150", + "to": "00:00:01,260" + }, + "offsets": { + "from": 1150, + "to": 1260 + }, + "id": 1395, + "p": 0.37639, + "t_dtw": 210 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,260", + "to": "00:00:01,600" + }, + "offsets": { + "from": 1260, + "to": 1600 + }, + "text": " and", + "tokens": [ + { + "text": " and", + "timestamps": { + "from": "00:00:01,260", + "to": "00:00:01,530" + }, + "offsets": { + "from": 1260, + "to": 1530 + }, + "id": 290, + "p": 0.963482, + "t_dtw": 228 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,600", + "to": "00:00:01,940" + }, + "offsets": { + "from": 1600, + "to": 1940 + }, + "text": " all", + "tokens": [ + { + "text": " all", + "timestamps": { + "from": "00:00:01,600", + "to": "00:00:01,940" + }, + "offsets": { + "from": 1600, + "to": 1940 + }, + "id": 477, + "p": 0.978002, + "t_dtw": 262 + } + ] + }, + { + "timestamps": { + "from": "00:00:01,940", + "to": "00:00:02,170" + }, + "offsets": { + "from": 1940, + "to": 2170 + }, + "text": " my", + "tokens": [ + { + "text": " my", + "timestamps": { + "from": "00:00:01,940", + "to": "00:00:02,170" + }, + "offsets": { + "from": 1940, + "to": 2170 + }, + "id": 616, + "p": 0.971462, + "t_dtw": 284 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,170", + "to": "00:00:02,740" + }, + "offsets": { + "from": 2170, + "to": 2740 + }, + "text": " other", + "tokens": [ + { + "text": " other", + "timestamps": { + "from": "00:00:02,170", + "to": "00:00:02,740" + }, + "offsets": { + "from": 2170, + "to": 2740 + }, + "id": 584, + "p": 0.992748, + "t_dtw": 318 + } + ] + }, + { + "timestamps": { + "from": "00:00:02,740", + "to": "00:00:03,900" + }, + "offsets": { + "from": 2740, + "to": 3900 + }, + "text": " platforms", + "tokens": [ + { + "text": " platforms", + "timestamps": { + "from": "00:00:02,740", + "to": "00:00:03,730" + }, + "offsets": { + "from": 2740, + "to": 3730 + }, + "id": 9554, + "p": 0.985039, + "t_dtw": 370 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,900", + "to": "00:00:03,990" + }, + "offsets": { + "from": 3900, + "to": 3990 + }, + "text": " to", + "tokens": [ + { + "text": " to", + "timestamps": { + "from": "00:00:03,900", + "to": "00:00:03,980" + }, + "offsets": { + "from": 3900, + "to": 3980 + }, + "id": 284, + "p": 0.924626, + "t_dtw": 398 + } + ] + }, + { + "timestamps": { + "from": "00:00:03,990", + "to": "00:00:04,320" + }, + "offsets": { + "from": 3990, + "to": 4320 + }, + "text": " get", + "tokens": [ + { + "text": " get", + "timestamps": { + "from": "00:00:03,990", + "to": "00:00:04,210" + }, + "offsets": { + "from": 3990, + "to": 4210 + }, + "id": 651, + "p": 0.994448, + "t_dtw": 424 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,320", + "to": "00:00:04,700" + }, + "offsets": { + "from": 4320, + "to": 4700 + }, + "text": " more", + "tokens": [ + { + "text": " more", + "timestamps": { + "from": "00:00:04,320", + "to": "00:00:04,580" + }, + "offsets": { + "from": 4320, + "to": 4580 + }, + "id": 517, + "p": 0.986084, + "t_dtw": 468 + } + ] + }, + { + "timestamps": { + "from": "00:00:04,700", + "to": "00:00:05,010" + }, + "offsets": { + "from": 4700, + "to": 5010 + }, + "text": " Type", + "tokens": [ + { + "text": " Type", + "timestamps": { + "from": "00:00:04,700", + "to": "00:00:05,010" + }, + "offsets": { + "from": 4700, + "to": 5010 + }, + "id": 5994, + "p": 0.63517, + "t_dtw": 498 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,010", + "to": "00:00:05,600" + }, + "offsets": { + "from": 5010, + "to": 5600 + }, + "text": "Script", + "tokens": [ + { + "text": "Script", + "timestamps": { + "from": "00:00:05,010", + "to": "00:00:05,600" + }, + "offsets": { + "from": 5010, + "to": 5600 + }, + "id": 7391, + "p": 0.999638, + "t_dtw": 512 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:05,990" + }, + "offsets": { + "from": 5600, + "to": 5990 + }, + "text": " tips", + "tokens": [ + { + "text": " tips", + "timestamps": { + "from": "00:00:05,600", + "to": "00:00:05,720" + }, + "offsets": { + "from": 5600, + "to": 5720 + }, + "id": 9040, + "p": 0.988227, + "t_dtw": 560 + } + ] + }, + { + "timestamps": { + "from": "00:00:05,990", + "to": "00:00:06,000" + }, + "offsets": { + "from": 5990, + "to": 6000 + }, + "text": ".", + "tokens": [ + { + "text": ".", + "timestamps": { + "from": "00:00:05,990", + "to": "00:00:06,000" + }, + "offsets": { + "from": 5990, + "to": 6000 + }, + "id": 13, + "p": 0.639635, + "t_dtw": 594 + }, + { + "text": "[_TT_300]", + "timestamps": { + "from": "00:00:06,000", + "to": "00:00:06,000" + }, + "offsets": { + "from": 6000, + "to": 6000 + }, + "id": 50663, + "p": 0.0467769, + "t_dtw": -1 + } + ] + } + ] +} diff --git a/public/codehike/webcam1719140172694.mp4 b/public/codehike/webcam1719140172694.mp4 new file mode 100644 index 00000000..822045c3 Binary files /dev/null and b/public/codehike/webcam1719140172694.mp4 differ diff --git a/public/codehike/webcam1719140203344.mp4 b/public/codehike/webcam1719140203344.mp4 new file mode 100644 index 00000000..7f507af9 Binary files /dev/null and b/public/codehike/webcam1719140203344.mp4 differ diff --git a/public/codehike/webcam1719140219229.mp4 b/public/codehike/webcam1719140219229.mp4 new file mode 100644 index 00000000..9db9d4a4 Binary files /dev/null and b/public/codehike/webcam1719140219229.mp4 differ diff --git a/public/codehike/webcam1719140404331.mp4 b/public/codehike/webcam1719140404331.mp4 new file mode 100644 index 00000000..fe072ca5 Binary files /dev/null and b/public/codehike/webcam1719140404331.mp4 differ diff --git a/remotion/Root.tsx b/remotion/Root.tsx index d3874da7..7a83be95 100644 --- a/remotion/Root.tsx +++ b/remotion/Root.tsx @@ -13,7 +13,7 @@ export const Root = () => { schema={videoConf} defaultProps={{ theme: "light" as const, - canvasLayout: "square" as const, + canvasLayout: "landscape" as const, scenes: [ { type: "recorder" as const, @@ -103,6 +103,72 @@ export const Root = () => { }} calculateMetadata={calcMetadata} /> + ); }; diff --git a/remotion/calculate-metadata/add-metadata-to-scene.ts b/remotion/calculate-metadata/add-metadata-to-scene.ts index d78758f1..15552d0e 100644 --- a/remotion/calculate-metadata/add-metadata-to-scene.ts +++ b/remotion/calculate-metadata/add-metadata-to-scene.ts @@ -53,7 +53,12 @@ export const addMetadataToScene = async ({ const displayMetadata = cameras.display ? await getVideoMetadata(cameras.display.src) - : null; + : cameras.code + ? { + width: 1920, + height: 1080, + } + : null; const whisperCppOutput = await fetchWhisperCppOutput(cameras.captions); diff --git a/remotion/calculate-metadata/get-camera.ts b/remotion/calculate-metadata/get-camera.ts index 3b07f74f..33432229 100644 --- a/remotion/calculate-metadata/get-camera.ts +++ b/remotion/calculate-metadata/get-camera.ts @@ -3,6 +3,7 @@ import { ALTERNATIVE1_PREFIX, ALTERNATIVE2_PREFIX, CAPTIONS_PREFIX, + CODE_PREFIX, DISPLAY_PREFIX, WEBCAM_PREFIX, } from "../../config/cameras"; @@ -58,6 +59,12 @@ const mapFile = ({ prefix: DISPLAY_PREFIX, timestamp, }); + const code = findMatchingFile({ + files, + compositionId, + prefix: CODE_PREFIX, + timestamp, + }); const sub = findMatchingFile({ files, compositionId, @@ -84,6 +91,7 @@ const mapFile = ({ alternative1: alternative1 ?? null, alternative2: alternative2 ?? null, timestamp: parseInt(timestamp, 10), + code: code ?? null, }; }; diff --git a/remotion/calculate-metadata/get-final-webcam-position.ts b/remotion/calculate-metadata/get-final-webcam-position.ts index ded88914..f639b543 100644 --- a/remotion/calculate-metadata/get-final-webcam-position.ts +++ b/remotion/calculate-metadata/get-final-webcam-position.ts @@ -5,6 +5,7 @@ import { SelectableVideoScene, WebcamPosition, } from "../../config/scenes"; +import { hasDisplay } from "./has-display"; export const getFinalWebcamPosition = ({ scenes, @@ -17,7 +18,7 @@ export const getFinalWebcamPosition = ({ cameras: Cameras; canvasLayout: CanvasLayout; }): WebcamPosition => { - if (!cameras.display && canvasLayout === "landscape") { + if (!hasDisplay(cameras) && canvasLayout === "landscape") { return "center"; } diff --git a/remotion/calculate-metadata/has-display.ts b/remotion/calculate-metadata/has-display.ts new file mode 100644 index 00000000..315c0d1c --- /dev/null +++ b/remotion/calculate-metadata/has-display.ts @@ -0,0 +1,5 @@ +import { Cameras } from "../../config/scenes"; + +export const hasDisplay = (cameras: Cameras): boolean => { + return cameras.display !== null || cameras.code !== null; +}; diff --git a/remotion/helpers/refresh-on-public-folder-change.ts b/remotion/helpers/refresh-on-public-folder-change.ts index d363b753..4e893a00 100644 --- a/remotion/helpers/refresh-on-public-folder-change.ts +++ b/remotion/helpers/refresh-on-public-folder-change.ts @@ -8,6 +8,7 @@ import { StaticFile } from "remotion"; import { ALTERNATIVE1_PREFIX, ALTERNATIVE2_PREFIX, + CODE_PREFIX, DISPLAY_PREFIX, WEBCAM_PREFIX, } from "../../config/cameras"; @@ -22,6 +23,7 @@ const filterForCurrentComposition = ( `${compositionId}/${DISPLAY_PREFIX}`, `${compositionId}/${ALTERNATIVE1_PREFIX}`, `${compositionId}/${ALTERNATIVE2_PREFIX}`, + `${compositionId}/${CODE_PREFIX}`, ]; return PREFIXES_TO_WATCH.some((p) => f.name.startsWith(p)); diff --git a/remotion/scenes/VideoScene/Display.tsx b/remotion/scenes/VideoScene/Display.tsx index 1196b499..2b404fe3 100644 --- a/remotion/scenes/VideoScene/Display.tsx +++ b/remotion/scenes/VideoScene/Display.tsx @@ -8,6 +8,7 @@ import type { import { getDisplayPosition } from "../../animations/display-transitions"; import { BRollStack } from "../BRoll/BRollStack"; import { ScaleDownIfBRollRequiresIt } from "../BRoll/ScaleDownWithBRoll"; +import { CodeFrame } from "./Twoslash/CodeFrame"; const outer: React.CSSProperties = { position: "absolute", @@ -37,10 +38,6 @@ export const Display: React.FC<{ throw new Error("No display"); } - if (scene.cameras.display === null) { - throw new Error("No display"); - } - const frame = useCurrentFrame(); const { width, height } = useVideoConfig(); @@ -81,18 +78,31 @@ export const Display: React.FC<{ bRollType={scene.layout.bRollType} frame={frame} > - + {scene.cameras.display ? ( + + ) : scene.cameras.code ? ( + + ) : null} diff --git a/remotion/scenes/VideoScene/Twoslash/Callout.tsx b/remotion/scenes/VideoScene/Twoslash/Callout.tsx new file mode 100644 index 00000000..03a9847c --- /dev/null +++ b/remotion/scenes/VideoScene/Twoslash/Callout.tsx @@ -0,0 +1,61 @@ +import { AnnotationHandler, InlineAnnotation } from "codehike/code"; +import { interpolate, useCurrentFrame } from "remotion"; + +export const callout: AnnotationHandler = { + name: "callout", + transform: (annotation: InlineAnnotation) => { + const { name, query, lineNumber, fromColumn, toColumn, data } = annotation; + return { + name, + query, + fromLineNumber: lineNumber, + toLineNumber: lineNumber, + data: { ...data, column: (fromColumn + toColumn) / 2 }, + }; + }, + AnnotatedLine: ({ InnerLine, annotation, indentation, ...props }) => { + const { column } = annotation.data; + const frame = useCurrentFrame(); + const opacity = interpolate(frame, [25, 35], [0, 1], { + extrapolateLeft: "clamp", + extrapolateRight: "clamp", + }); + return ( + <> + +
+
+ {annotation.data.children || annotation.query} +
+ + ); + }, +}; diff --git a/remotion/scenes/VideoScene/Twoslash/CodeFrame.tsx b/remotion/scenes/VideoScene/Twoslash/CodeFrame.tsx new file mode 100644 index 00000000..e683656a --- /dev/null +++ b/remotion/scenes/VideoScene/Twoslash/CodeFrame.tsx @@ -0,0 +1,66 @@ +import { StaticFile } from "@remotion/studio"; +import { HighlightedCode } from "codehike/code"; +import React, { useEffect, useState } from "react"; +import { + AbsoluteFill, + cancelRender, + continueRender, + delayRender, +} from "remotion"; +import { CanvasLayout } from "../../../../config/layout"; +import { Layout } from "../../../layout/layout-types"; +import { CodeTransition } from "./CodeTransition"; +import { generateTwoslash } from "./generate-twoslash"; + +type State = { + code: HighlightedCode; + oldCode: HighlightedCode | null; +}; + +export const CodeFrame: React.FC<{ + displayLayout: Layout; + code: StaticFile; + oldCode: StaticFile | null; + canvasLayout: CanvasLayout; +}> = ({ displayLayout, code, oldCode, canvasLayout }) => { + const [slash, setSlash] = useState(null); + const [handle] = useState(() => delayRender()); + + useEffect(() => { + Promise.all([generateTwoslash(code), generateTwoslash(oldCode)]) + .then(([newSlash, oldSlash]) => { + setSlash({ + code: newSlash as HighlightedCode, + oldCode: oldSlash, + }); + continueRender(handle); + }) + .catch((err) => { + cancelRender(err); + }); + }, [code, handle, oldCode]); + + return ( + + {slash ? ( + + ) : null} + + ); +}; diff --git a/remotion/scenes/VideoScene/Twoslash/CodeTransition.tsx b/remotion/scenes/VideoScene/Twoslash/CodeTransition.tsx new file mode 100644 index 00000000..8e4a0ad1 --- /dev/null +++ b/remotion/scenes/VideoScene/Twoslash/CodeTransition.tsx @@ -0,0 +1,101 @@ +import { AnnotationHandler, HighlightedCode, Pre } from "codehike/code"; +import React, { useEffect, useLayoutEffect, useMemo, useState } from "react"; +import { + continueRender, + delayRender, + spring, + useCurrentFrame, + useVideoConfig, +} from "remotion"; + +import { + calculateTransitions, + getStartingSnapshot, + TokenTransitionsSnapshot, +} from "codehike/utils/token-transitions"; + +import { loadFont } from "@remotion/google-fonts/RobotoMono"; +import { CanvasLayout } from "../../../../config/layout"; +import { applyStyle } from "./apply-style"; +import { callout } from "./Callout"; +import { inlineBlockTokens } from "./InlineBlockTokens"; +const { fontFamily } = loadFont(); + +export function CodeTransition({ + oldCode, + newCode, + durationInFrames, + canvasLayout, +}: { + oldCode: HighlightedCode | null; + newCode: HighlightedCode; + durationInFrames: number; + canvasLayout: CanvasLayout; +}) { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + + const ref = React.useRef(null); + const [oldSnapshot, setOldSnapshot] = + useState(null); + const [handle] = React.useState(() => delayRender()); + + const prevCode: HighlightedCode = useMemo(() => { + return oldCode || { ...newCode, tokens: [], annotations: [] }; + }, [newCode, oldCode]); + + const code = useMemo(() => { + return oldSnapshot ? newCode : prevCode; + }, [newCode, prevCode, oldSnapshot]); + + useEffect(() => { + if (!oldSnapshot) { + setOldSnapshot(getStartingSnapshot(ref.current!)); + } + }, [oldSnapshot]); + + useLayoutEffect(() => { + if (!oldSnapshot) { + setOldSnapshot(getStartingSnapshot(ref.current!)); + return; + } + const transitions = calculateTransitions(ref.current!, oldSnapshot); + transitions.forEach(({ element, keyframes, options }) => { + const delay = durationInFrames * options.delay; + const duration = durationInFrames * options.duration; + + const progress = spring({ + fps, + frame, + config: { + damping: 200, + mass: 0.3, + }, + delay: delay, + durationInFrames: duration, + }); + + applyStyle({ + element, + keyframes, + progress, + }); + }); + continueRender(handle); + }); + + const handlers: AnnotationHandler[] = useMemo(() => { + return [inlineBlockTokens, callout]; + }, []); + + const style: React.CSSProperties = useMemo(() => { + return { + position: "relative", + fontSize: canvasLayout === "landscape" ? 60 : 30, + lineHeight: 1.5, + fontFamily, + }; + }, [canvasLayout]); + + return
;
+}
diff --git a/remotion/scenes/VideoScene/Twoslash/InlineBlockTokens.tsx b/remotion/scenes/VideoScene/Twoslash/InlineBlockTokens.tsx
new file mode 100644
index 00000000..7abaa018
--- /dev/null
+++ b/remotion/scenes/VideoScene/Twoslash/InlineBlockTokens.tsx
@@ -0,0 +1,8 @@
+import { AnnotationHandler } from "codehike/code";
+
+export const inlineBlockTokens: AnnotationHandler = {
+  name: "inline-block",
+  Token: ({ InnerToken, ...props }) => (
+    
+  ),
+};
diff --git a/remotion/scenes/VideoScene/Twoslash/apply-style.ts b/remotion/scenes/VideoScene/Twoslash/apply-style.ts
new file mode 100644
index 00000000..a8438ec7
--- /dev/null
+++ b/remotion/scenes/VideoScene/Twoslash/apply-style.ts
@@ -0,0 +1,24 @@
+import { TokenTransition } from "codehike/utils/token-transitions";
+import { interpolate, interpolateColors } from "remotion";
+
+export function applyStyle({
+  element,
+  keyframes,
+  progress,
+}: {
+  element: HTMLElement;
+  keyframes: TokenTransition["keyframes"];
+  progress: number;
+}) {
+  const { translateX, translateY, color, opacity } = keyframes;
+
+  if (opacity) {
+    element.style.opacity = interpolate(progress, [0, 1], opacity).toString();
+  }
+  if (color) {
+    element.style.color = interpolateColors(progress, [0, 1], color);
+  }
+  const x = translateX ? interpolate(progress, [0, 1], translateX) : 0;
+  const y = translateY ? interpolate(progress, [0, 1], translateY) : 0;
+  element.style.translate = `${x}px ${y}px`;
+}
diff --git a/remotion/scenes/VideoScene/Twoslash/generate-twoslash.ts b/remotion/scenes/VideoScene/Twoslash/generate-twoslash.ts
new file mode 100644
index 00000000..3d709bc4
--- /dev/null
+++ b/remotion/scenes/VideoScene/Twoslash/generate-twoslash.ts
@@ -0,0 +1,35 @@
+import { StaticFile } from "@remotion/studio";
+import { highlight } from "codehike/code";
+import { createTwoslashFromCDN } from "twoslash-cdn";
+
+const twoslash = createTwoslashFromCDN();
+
+export const generateTwoslash = async (staticFile: StaticFile | null) => {
+  if (!staticFile) {
+    return null;
+  }
+  const data = await (await fetch(staticFile.src)).text();
+
+  const twoslashResult = await twoslash.run(data, "tsx", {
+    compilerOptions: {
+      lib: ["dom"],
+    },
+  });
+  const highlighted = await highlight(
+    { lang: "typescript", value: twoslashResult.code, meta: "" },
+    "github-dark",
+  );
+
+  twoslashResult.errors.forEach(({ text, line, character, length }) => {
+    highlighted.annotations.push({
+      name: "callout",
+      query: text,
+      lineNumber: line + 1,
+      data: { character },
+      fromColumn: character,
+      toColumn: character + length,
+    });
+  });
+
+  return highlighted;
+};
diff --git a/remotion/scenes/VideoScene/VideoScene.tsx b/remotion/scenes/VideoScene/VideoScene.tsx
index b2f66a64..df512673 100644
--- a/remotion/scenes/VideoScene/VideoScene.tsx
+++ b/remotion/scenes/VideoScene/VideoScene.tsx
@@ -6,6 +6,7 @@ import type {
 } from "../../../config/scenes";
 import type { Theme } from "../../../config/themes";
 import { getShouldTransitionIn } from "../../animations/transitions";
+import { hasDisplay } from "../../calculate-metadata/has-display";
 import { BoxedCaptions } from "../../captions/boxed/BoxedCaptions";
 import { SrtPreviewAndEditor } from "../../captions/srt/SrtPreviewAndEditor/SrtPreviewAndEditor";
 import { LandscapeChapters } from "../../chapters/landscape/LandscapeChapters";
@@ -48,15 +49,15 @@ export const VideoScene: React.FC<{
   });
 
   const bRollsOnTopOfWebcam = useMemo(() => {
-    if (sceneAndMetadata.cameras.display !== null) {
+    if (hasDisplay(sceneAndMetadata.cameras)) {
       return [];
     }
     return sceneAndMetadata.bRolls;
-  }, [sceneAndMetadata.bRolls, sceneAndMetadata.cameras.display]);
+  }, [sceneAndMetadata.bRolls, sceneAndMetadata.cameras]);
 
   return (
     <>
-      {sceneAndMetadata.cameras.display ? (
+      {hasDisplay(sceneAndMetadata.cameras) ? (
         
+  } & Omit
 > = ({ containerLayout, videoSize, enableBlur, ...props }) => {
   const { innerStyle, needsBlur, outerStyle, blurStyle } = useMemo(() => {
     return getBlurLayout({
diff --git a/tsconfig.json b/tsconfig.json
index 3a443948..dc03a3cc 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,7 +10,7 @@
     "strict": true,
     "forceConsistentCasingInFileNames": true,
     "module": "ESNext",
-    "moduleResolution": "Node",
+    "moduleResolution": "Bundler",
     "resolveJsonModule": true,
     "isolatedModules": true,
     "noEmit": true,