@@ -26,9 +26,12 @@ import {
2626 applyCaptionResultToProject ,
2727 CAPTION_MODEL_FOLDER ,
2828 DEFAULT_CAPTION_MODEL ,
29+ DEFAULT_WHISPER_CAPTION_MODEL ,
2930 getCaptionGenerationErrorMessage ,
3031 getModelPath ,
3132 PARAKEET_DIR_MODELS ,
33+ resolveCaptionModel ,
34+ supportsParakeetTranscription ,
3235 syncCaptionWordsWithText ,
3336 transcribeEditorCaptions ,
3437} from "./captions" ;
@@ -186,7 +189,9 @@ export function CaptionsTab() {
186189 setProject ( "captions" , "settings" , key , value ) ;
187190 } ;
188191
189- const [ selectedModel , setSelectedModel ] = createSignal ( DEFAULT_CAPTION_MODEL ) ;
192+ const [ selectedModel , setSelectedModel ] = createSignal (
193+ resolveCaptionModel ( DEFAULT_CAPTION_MODEL ) ,
194+ ) ;
190195 const [ selectedLanguage , setSelectedLanguage ] = createSignal ( "auto" ) ;
191196 const [ downloadedModels , setDownloadedModels ] = createSignal < string [ ] > ( [ ] ) ;
192197
@@ -203,8 +208,15 @@ export function CaptionsTab() {
203208 const setIsGenerating = ( value : boolean ) =>
204209 setEditorState ( "captions" , "isGenerating" , value ) ;
205210 const [ hasAudio , setHasAudio ] = createSignal ( false ) ;
211+ const availableModelOptions = createMemo ( ( ) =>
212+ supportsParakeetTranscription ( )
213+ ? MODEL_OPTIONS
214+ : MODEL_OPTIONS . filter ( ( model ) => ! PARAKEET_DIR_MODELS . has ( model . name ) ) ,
215+ ) ;
206216 const selectedModelOption = createMemo (
207- ( ) => MODEL_OPTIONS . find ( ( model ) => model . name === selectedModel ( ) ) ?? null ,
217+ ( ) =>
218+ availableModelOptions ( ) . find ( ( model ) => model . name === selectedModel ( ) ) ??
219+ null ,
208220 ) ;
209221
210222 createEffect (
@@ -231,7 +243,7 @@ export function CaptionsTab() {
231243 }
232244
233245 const models = await Promise . all (
234- MODEL_OPTIONS . map ( async ( model ) => {
246+ availableModelOptions ( ) . map ( async ( model ) => {
235247 const downloaded = await checkModelExists ( model . name ) ;
236248 return { name : model . name , downloaded } ;
237249 } ) ,
@@ -242,9 +254,18 @@ export function CaptionsTab() {
242254 . map ( ( m ) => m . name ) ;
243255 setDownloadedModels ( downloadedModelNames ) ;
244256
245- const savedModel = localStorage . getItem ( "selectedTranscriptionModel" ) ;
246- if ( savedModel && MODEL_OPTIONS . some ( ( m ) => m . name === savedModel ) ) {
257+ const savedModel = resolveCaptionModel (
258+ localStorage . getItem ( "selectedTranscriptionModel" ) ,
259+ ) ;
260+ if (
261+ savedModel &&
262+ availableModelOptions ( ) . some ( ( model ) => model . name === savedModel )
263+ ) {
247264 setSelectedModel ( savedModel ) ;
265+ } else {
266+ setSelectedModel (
267+ availableModelOptions ( ) [ 0 ] ?. name ?? DEFAULT_WHISPER_CAPTION_MODEL ,
268+ ) ;
248269 }
249270
250271 const savedLanguage = localStorage . getItem (
@@ -430,13 +451,13 @@ export function CaptionsTab() {
430451 < div class = "space-y-4" >
431452 < Subfield name = "Model" class = "items-start" >
432453 < KSelect < string >
433- options = { MODEL_OPTIONS . map ( ( model ) => model . name ) }
454+ options = { availableModelOptions ( ) . map ( ( model ) => model . name ) }
434455 value = { selectedModel ( ) }
435456 onChange = { ( value : string | null ) => {
436457 if ( value ) setSelectedModel ( value ) ;
437458 } }
438459 itemComponent = { ( props ) => {
439- const model = MODEL_OPTIONS . find (
460+ const model = availableModelOptions ( ) . find (
440461 ( option ) => option . name === props . item . rawValue ,
441462 ) ;
442463
@@ -532,6 +553,13 @@ export function CaptionsTab() {
532553 </ KSelect >
533554 </ Subfield >
534555
556+ < Show when = { ! supportsParakeetTranscription ( ) } >
557+ < p class = "text-xs text-gray-10" >
558+ Parakeet caption models are unavailable on Intel Macs. Whisper
559+ models remain available.
560+ </ p >
561+ </ Show >
562+
535563 < Subfield name = "Language" >
536564 < KSelect < string >
537565 options = { LANGUAGE_OPTIONS . map ( ( l ) => l . code ) }
@@ -600,7 +628,7 @@ export function CaptionsTab() {
600628 < IconLucideDownload class = "size-4" />
601629 Download{ " " }
602630 {
603- MODEL_OPTIONS . find (
631+ availableModelOptions ( ) . find (
604632 ( m ) => m . name === selectedModel ( ) ,
605633 ) ?. label
606634 } { " " }
0 commit comments