diff --git a/desktop/src-tauri/locales/en-US/common.json b/desktop/src-tauri/locales/en-US/common.json
index f80bfebc..3e927072 100644
--- a/desktop/src-tauri/locales/en-US/common.json
+++ b/desktop/src-tauri/locales/en-US/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Update Finished",
 	"ask-for-update-body": "Do you want to update vibe into version {{version}}?",
 	"ask-for-update-title": "Confirm update",
+	"ask-for-update-ytdlp-message": "New ytdlp version found. Do you want to update ytdlp?",
+	"ask-for-update-ytdlp-title": "Update ytdlp",
 	"cancel": "Cancel",
 	"cancel-relaunch": "Later",
 	"cancel-update": "Later",
@@ -19,6 +21,7 @@
 	"check-error": "Check failed",
 	"check-loading": "Checking",
 	"check-success": "Tested successfully",
+	"check-ytdlp-updates": "Check ytdlp for updates",
 	"confirm-exit": "Do you want to exit? Unsaved changes will be lost.",
 	"confirm-relaunch": "Relaunch Now",
 	"confirm-update": "Update Now",
@@ -74,6 +77,7 @@
 	"install-now": "Install Now",
 	"invalid-llm-prompt": "Invalid prompt. It must include the following pattern %s which will be replaced with the transcription.",
 	"language": "Language",
+	"later": "Later",
 	"leftover": "Left",
 	"light": "Light",
 	"llm-api-key": "Claude API key",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "Transcript will be displayed here shortly...",
 	"translate-to-english": "Translate To English",
 	"try-again": "Try Again",
+	"update-now": "update now",
 	"update-version": "Update Vibe",
 	"updating-modal-body": "Updating Vibe to version {{version}}",
 	"updating-modal-title": "Updating...",
 	"use-word-timestamps": "Timestamps per each word",
-	"when-completing-transcription": "When completing transcription"
+	"when-completing-transcription": "When completing transcription",
+	"ytdlp-options": "URL Transcription Options",
+	"ytdlp-options-info": "Vibe uses ytdlp for URL transcription."
 }
diff --git a/desktop/src-tauri/locales/es-MX/common.json b/desktop/src-tauri/locales/es-MX/common.json
index eeca6f2d..e4d88f45 100644
--- a/desktop/src-tauri/locales/es-MX/common.json
+++ b/desktop/src-tauri/locales/es-MX/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Actualización finalizada",
 	"ask-for-update-body": "¿Quieres actualizar vibe a la version {{version}}?",
 	"ask-for-update-title": "Confirmar actualización",
+	"ask-for-update-ytdlp-message": "Se encontró una nueva versión de ytdlp. \n¿Quieres actualizar ytdlp?",
+	"ask-for-update-ytdlp-title": "Actualizar ytdlp",
 	"cancel": "Cancelar",
 	"cancel-relaunch": "Después",
 	"cancel-update": "Después",
@@ -19,6 +21,7 @@
 	"check-error": "La verificación falló",
 	"check-loading": "Verificando",
 	"check-success": "Probado con éxito",
+	"check-ytdlp-updates": "Consulte ytdlp para obtener actualizaciones",
 	"confirm-exit": "¿Quieres salir? \nLos cambios no guardados se perderán.",
 	"confirm-relaunch": "Relanzar Ahora",
 	"confirm-update": "Actualizar Ahora",
@@ -74,6 +77,7 @@
 	"install-now": "Instalar Ahora",
 	"invalid-llm-prompt": "Prompt inválido. Debe incluir el siguiente patrón %s que será reemplazado con la transcripción.",
 	"language": "Idioma",
+	"later": "Más tarde",
 	"leftover": "sobrante",
 	"light": "Claro",
 	"llm-api-key": "Clave API de Claude",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "La transcripción se mostrará aquí en breve...",
 	"translate-to-english": "Traducir a Inglés",
 	"try-again": "Intenta de nuevo",
+	"update-now": "actualización ahora",
 	"update-version": "Actualizar Vibe",
 	"updating-modal-body": "Actualizando Vibe a la version {{version}}",
 	"updating-modal-title": "Actualizando...",
 	"use-word-timestamps": "Marcas de tiempo por cada palabra",
-	"when-completing-transcription": "Cuando se complete la transcripción"
+	"when-completing-transcription": "Cuando se complete la transcripción",
+	"ytdlp-options": "Opciones de transcripción de URL",
+	"ytdlp-options-info": "Vibe utiliza ytdlp para la transcripción de URL."
 }
diff --git a/desktop/src-tauri/locales/fr-FR/common.json b/desktop/src-tauri/locales/fr-FR/common.json
index 283e1afa..009e067a 100644
--- a/desktop/src-tauri/locales/fr-FR/common.json
+++ b/desktop/src-tauri/locales/fr-FR/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Mise à jour terminée",
 	"ask-for-update-body": "Voulez-vous mettre à jour Vibe vers la version {{version}} ?",
 	"ask-for-update-title": "Confirmer la mise à jour",
+	"ask-for-update-ytdlp-message": "Nouvelle version YTDLP trouvée. \nVoulez-vous mettre à jour YTDLP?",
+	"ask-for-update-ytdlp-title": "Mettre à jour ytdlp",
 	"cancel": "Annuler",
 	"cancel-relaunch": "Plus tard",
 	"cancel-update": "Plus tard",
@@ -19,6 +21,7 @@
 	"check-error": "La vérification a échoué",
 	"check-loading": "Vérification",
 	"check-success": "Testé avec succès",
+	"check-ytdlp-updates": "Vérifiez ytdlp pour les mises à jour",
 	"confirm-exit": "Voulez-vous sortir ? \nLes modifications non enregistrées seront perdues.",
 	"confirm-relaunch": "Relancer maintenant",
 	"confirm-update": "Mettre à jour maintenant",
@@ -74,6 +77,7 @@
 	"install-now": "Installer maintenant",
 	"invalid-llm-prompt": "Invite invalide. \nil doit inclure le modèle suivant %s qui sera remplacé par la transcription.",
 	"language": "Langue",
+	"later": "Plus tard",
 	"leftover": "encore",
 	"light": "Lumière",
 	"llm-api-key": "Clé API Claude",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "La transcription s’affichera ici sous peu…",
 	"translate-to-english": "Traduire en anglais",
 	"try-again": "Réessayer",
+	"update-now": "mettre à jour maintenant",
 	"update-version": "Mettre à jour Vibe",
 	"updating-modal-body": "Mise à jour de Vibe vers la version {{version}}",
 	"updating-modal-title": "Mise à jour en cours…",
 	"use-word-timestamps": "Horodatages pour chaque mot",
-	"when-completing-transcription": "Quand la transcription est terminée"
+	"when-completing-transcription": "Quand la transcription est terminée",
+	"ytdlp-options": "Options de transcription URL",
+	"ytdlp-options-info": "VIBE utilise YTDLP pour la transcription d'URL."
 }
diff --git a/desktop/src-tauri/locales/he-IL/common.json b/desktop/src-tauri/locales/he-IL/common.json
index 9fb96716..3ff132a4 100644
--- a/desktop/src-tauri/locales/he-IL/common.json
+++ b/desktop/src-tauri/locales/he-IL/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "העדכון הסתיים",
 	"ask-for-update-body": "האם ברצונך לבצע עדכון לגרסה {{version}}?",
 	"ask-for-update-title": "ביצוע עדכון",
+	"ask-for-update-ytdlp-message": "נמצאה גרסת ytdlp חדשה. \nהאם אתה רוצה לעדכן את ytdlp?",
+	"ask-for-update-ytdlp-title": "עדכן את ytdlp",
 	"cancel": "ביטול",
 	"cancel-relaunch": "מאוחר יותר",
 	"cancel-update": "מאוחר יותר",
@@ -19,6 +21,7 @@
 	"check-error": "הבדיקה נכשלה",
 	"check-loading": "בודק",
 	"check-success": "נבדק בהצלחה",
+	"check-ytdlp-updates": "בדוק את ytdlp לעדכונים",
 	"confirm-exit": "האם אתה רוצה לצאת? \nשינויים שלא נשמרו יאבדו.",
 	"confirm-relaunch": "הפעל מחדש עכשיו",
 	"confirm-update": "עדכן עכשיו",
@@ -74,6 +77,7 @@
 	"install-now": "התקן עכשיו",
 	"invalid-llm-prompt": "הפרומפט לא חוקי.\nהוא חייב לכלול את הדפוס הבא %s שיוחלף בתעתיק.",
 	"language": "שפה",
+	"later": "מְאוּחָר יוֹתֵר",
 	"leftover": "נשארו",
 	"light": "בהיר",
 	"llm-api-key": "מפתח API של קלוד",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "התמלול יחל להופיע בעוד מספר רגעים...",
 	"translate-to-english": "תרגם לאנגלית",
 	"try-again": "נסה שוב",
+	"update-now": "עדכן עכשיו",
 	"update-version": "עדכן לגרסה חדשה",
 	"updating-modal-body": "מעדכן את vibe לגרסה {{version}}",
 	"updating-modal-title": "מעדכן...",
 	"use-word-timestamps": "חותמות זמן לכל מילה",
-	"when-completing-transcription": "בעת השלמת התמלול"
+	"when-completing-transcription": "בעת השלמת התמלול",
+	"ytdlp-options": "אפשרויות תמלול מאתרים",
+	"ytdlp-options-info": "VIBE משתמש ב- YTDLP לתמלול כתובת אתר."
 }
diff --git a/desktop/src-tauri/locales/hi-IN/common.json b/desktop/src-tauri/locales/hi-IN/common.json
index ae76ac55..e49295a2 100644
--- a/desktop/src-tauri/locales/hi-IN/common.json
+++ b/desktop/src-tauri/locales/hi-IN/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "अपडेट समाप्त",
 	"ask-for-update-body": "क्या आप वाइब को संस्करण {{version}} में अपडेट करना चाहेंगे?",
 	"ask-for-update-title": "अपडेट की पुष्टि करें",
+	"ask-for-update-ytdlp-message": "नया ytdlp संस्करण मिला. \nक्या आप ytdlp को अपडेट करना चाहते हैं?",
+	"ask-for-update-ytdlp-title": "Ytdlp अद्यतन करें",
 	"cancel": "रद्द करें",
 	"cancel-relaunch": "बाद में",
 	"cancel-update": "बाद में",
@@ -19,6 +21,7 @@
 	"check-error": "जाँच विफल रही",
 	"check-loading": "चेकिंग",
 	"check-success": "सफलतापूर्वक परीक्षण किया गया",
+	"check-ytdlp-updates": "अपडेट के लिए ytdlp की जाँच करें",
 	"confirm-exit": "क्या आपको बाहर निकलना है? \nसहेजे न गए परिवर्तन खो जाएंगे.",
 	"confirm-relaunch": "अब फिर से चालू करें",
 	"confirm-update": "अब अपडेट करें",
@@ -74,6 +77,7 @@
 	"install-now": "अब स्थापित करें",
 	"invalid-llm-prompt": "अमान्य संकेत. \nइसमें निम्नलिखित पैटर्न %s शामिल होना चाहिए जिसे ट्रांसक्रिप्शन के साथ बदल दिया जाएगा।",
 	"language": "भाषा",
+	"later": "बाद में",
 	"leftover": "शेष",
 	"light": "रोशनी",
 	"llm-api-key": "क्लाउड एपीआई कुंजी",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "प्रतिलेख शीघ्र ही यहाँ प्रदर्शित होगा...",
 	"translate-to-english": "अंग्रेजी में अनुवाद करें",
 	"try-again": "फिर से कोशिश करें",
+	"update-now": "अभी अद्यतन करें",
 	"update-version": "वाइब अपडेट करें",
 	"updating-modal-body": "वाइब को संस्करण {{version}} में अपडेट किया जा रहा है",
 	"updating-modal-title": "अपडेट हो रहा है...",
 	"use-word-timestamps": "प्रत्येक शब्द के टाइमस्टैम्प",
-	"when-completing-transcription": "लेखन पूरा होने पर"
+	"when-completing-transcription": "लेखन पूरा होने पर",
+	"ytdlp-options": "URL प्रतिलेखन विकल्प",
+	"ytdlp-options-info": "Vibe URL प्रतिलेखन के लिए YTDLP का उपयोग करता है।"
 }
diff --git a/desktop/src-tauri/locales/it-IT/common.json b/desktop/src-tauri/locales/it-IT/common.json
index ebb405c2..a005f90f 100644
--- a/desktop/src-tauri/locales/it-IT/common.json
+++ b/desktop/src-tauri/locales/it-IT/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Aggiornamento completato",
 	"ask-for-update-body": "Vuoi aggiornare vibe alla versione {{version}}?",
 	"ask-for-update-title": "Conferma aggiornamento",
+	"ask-for-update-ytdlp-message": "Trovata nuova versione ytdlp. \nVuoi aggiornare ytdlp?",
+	"ask-for-update-ytdlp-title": "Aggiorna ytdlp",
 	"cancel": "Stop",
 	"cancel-relaunch": "Dopo",
 	"cancel-update": "Dopo",
@@ -19,6 +21,7 @@
 	"check-error": "Controllo fallito",
 	"check-loading": "Controllo",
 	"check-success": "Testato con successo",
+	"check-ytdlp-updates": "Controlla YTDLP per gli aggiornamenti",
 	"confirm-exit": "Vuoi uscire? \nLe modifiche non salvate andranno perse.",
 	"confirm-relaunch": "Rilancia ora",
 	"confirm-update": "Aggiorna ora",
@@ -74,6 +77,7 @@
 	"install-now": "Installa ora",
 	"invalid-llm-prompt": "Richiesta non valida. \ndeve includere il seguente pattern %s che verrà sostituito con la trascrizione.",
 	"language": "Lingua",
+	"later": "Dopo",
 	"leftover": "rimanente",
 	"light": "Chiaro",
 	"llm-api-key": "Chiave API Claude",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "La trascrizione verrà visualizzata a breve...",
 	"translate-to-english": "Traduci in Inglese",
 	"try-again": "Riprova",
+	"update-now": "Aggiorna ora",
 	"update-version": "Aggiorna Vibe",
 	"updating-modal-body": "Aggiornando Vibe alla versione {{version}}",
 	"updating-modal-title": "Aggiornamento...",
 	"use-word-timestamps": "Timestamp per ogni parola",
-	"when-completing-transcription": "Quando la trascrizione è completata"
+	"when-completing-transcription": "Quando la trascrizione è completata",
+	"ytdlp-options": "Opzioni di trascrizione URL",
+	"ytdlp-options-info": "Vibe utilizza ytdlp per la trascrizione dell'URL."
 }
diff --git a/desktop/src-tauri/locales/no-NO/common.json b/desktop/src-tauri/locales/no-NO/common.json
index c0d140be..3adc1ebc 100644
--- a/desktop/src-tauri/locales/no-NO/common.json
+++ b/desktop/src-tauri/locales/no-NO/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Oppdatering fullført",
 	"ask-for-update-body": "Vil du oppdatere Vibe til versjon {{version}}?",
 	"ask-for-update-title": "Bekreft oppdatering",
+	"ask-for-update-ytdlp-message": "Ny YTDLP -versjon funnet. \nVil du oppdatere YTDLP?",
+	"ask-for-update-ytdlp-title": "Oppdater ytdlp",
 	"cancel": "Avbryt",
 	"cancel-relaunch": "Senere",
 	"cancel-update": "Senere",
@@ -19,6 +21,7 @@
 	"check-error": "Kontroll mislyktes",
 	"check-loading": "Kontrollerer",
 	"check-success": "Testet vellykket",
+	"check-ytdlp-updates": "Sjekk YTDLP for oppdateringer",
 	"confirm-exit": "Vil du avslutte? \nUlagrede endringer vil gå tapt.",
 	"confirm-relaunch": "Start på nytt nå",
 	"confirm-update": "Oppdater nå",
@@ -74,6 +77,7 @@
 	"install-now": "Installer nå",
 	"invalid-llm-prompt": "Ugyldig prompt. \nMå inneholde mønsteret %s som vil bli erstattet med transkripsjonen.",
 	"language": "Språk",
+	"later": "Seinere",
 	"leftover": "rester",
 	"light": "Lys",
 	"llm-api-key": "Claude API-nøkkel",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "Transkripsjonen vil vises her snart…",
 	"translate-to-english": "Oversett til engelsk",
 	"try-again": "Prøv igjen",
+	"update-now": "oppdatering nå",
 	"update-version": "Oppdater Vibe",
 	"updating-modal-body": "Oppdaterer Vibe til versjon {{version}}",
 	"updating-modal-title": "Oppdaterer...",
 	"use-word-timestamps": "Ord-tidsstempler",
-	"when-completing-transcription": "Ved fullføring av transkripsjonen"
+	"when-completing-transcription": "Ved fullføring av transkripsjonen",
+	"ytdlp-options": "Alternativer for URL-transkripsjon",
+	"ytdlp-options-info": "Vibe bruker YTDLP for URL -transkripsjon."
 }
diff --git a/desktop/src-tauri/locales/pl-PL/common.json b/desktop/src-tauri/locales/pl-PL/common.json
index 271a292f..b97e0497 100644
--- a/desktop/src-tauri/locales/pl-PL/common.json
+++ b/desktop/src-tauri/locales/pl-PL/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Aktualizacja zakończona",
 	"ask-for-update-body": "Czy chcesz zaaktualizować Vibe do wersji {{version}}?",
 	"ask-for-update-title": "Potwierdź aktualizację",
+	"ask-for-update-ytdlp-message": "Znaleziono nową wersję YTDLP. \nChcesz zaktualizować YTDLP?",
+	"ask-for-update-ytdlp-title": "Zaktualizuj ytdlp",
 	"cancel": "Anuluj",
 	"cancel-relaunch": "Póżniej",
 	"cancel-update": "Póżniej",
@@ -19,6 +21,7 @@
 	"check-error": "Kontrola nie powiodła się",
 	"check-loading": "Kontrola",
 	"check-success": "Przetestowano pomyślnie",
+	"check-ytdlp-updates": "Sprawdź aktualizacje na ytdlp",
 	"confirm-exit": "Czy chcesz wyjść? \nNiezapisane zmiany zostaną utracone.",
 	"confirm-relaunch": "Ponownie uruchom teraz",
 	"confirm-update": "Zaaktualizuj teraz",
@@ -74,6 +77,7 @@
 	"install-now": "Zainstaluj teraz",
 	"invalid-llm-prompt": "Nieprawidłowy monit. \nmusi zawierać następujący wzór %s, który zostanie zastąpiony transkrypcją.",
 	"language": "Język",
+	"later": "Później",
 	"leftover": "pozostałości",
 	"light": "Światło",
 	"llm-api-key": "Klucz API Claude'a",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "Transkrypcja zostanie wkrótce tutaj wyświetlona…",
 	"translate-to-english": "Przetłumacz na angielski",
 	"try-again": "Spróbuj ponownie",
+	"update-now": "aktualizacja teraz",
 	"update-version": "Zaaktualizuj Vibe",
 	"updating-modal-body": "Aktualizowanie Vibe do wersji {{version}}",
 	"updating-modal-title": "Aktualizowanie...",
 	"use-word-timestamps": "Znaczniki czasu dla każdego słowa",
-	"when-completing-transcription": "Podczas zakończenia transkrypcji"
+	"when-completing-transcription": "Podczas zakończenia transkrypcji",
+	"ytdlp-options": "Opcje transkrypcji URL",
+	"ytdlp-options-info": "Vibe używa ytdlp do transkrypcji adresów URL."
 }
diff --git a/desktop/src-tauri/locales/pt-BR/common.json b/desktop/src-tauri/locales/pt-BR/common.json
index d0df9277..c2da6d72 100644
--- a/desktop/src-tauri/locales/pt-BR/common.json
+++ b/desktop/src-tauri/locales/pt-BR/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Atualização concluída",
 	"ask-for-update-body": "Deseja atualizar o vibe para a versão {{version}}?",
 	"ask-for-update-title": "Confirmar atualização",
+	"ask-for-update-ytdlp-message": "Nova versão YTDLP encontrada. \nDeseja atualizar o YTDLP?",
+	"ask-for-update-ytdlp-title": "Atualizar ytdlp",
 	"cancel": "Cancelar",
 	"cancel-relaunch": "Mais tarde",
 	"cancel-update": "Mais tarde",
@@ -19,6 +21,7 @@
 	"check-error": "Falha na verificação",
 	"check-loading": "Verificando",
 	"check-success": "Testado com sucesso",
+	"check-ytdlp-updates": "Verifique o ytdlp para atualizações",
 	"confirm-exit": "Você quer sair? \nAs alterações não salvas serão perdidas.",
 	"confirm-relaunch": "Reiniciar agora",
 	"confirm-update": "Atualizar agora",
@@ -74,6 +77,7 @@
 	"install-now": "Instale agora",
 	"invalid-llm-prompt": "Solicitação inválida. \ndeve incluir o seguinte padrão %s que será substituído pela transcrição.",
 	"language": "Idioma",
+	"later": "Mais tarde",
 	"leftover": "Esquerda",
 	"light": "Luz",
 	"llm-api-key": "Chave API Claudia",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "A transcrição será exibida aqui em breve...",
 	"translate-to-english": "Traduzir para o inglês",
 	"try-again": "Tente novamente",
+	"update-now": "atualize agora",
 	"update-version": "Atualizar Vibe",
 	"updating-modal-body": "Atualizando o Vibe para a versão {{version}}",
 	"updating-modal-title": "Atualizando....",
 	"use-word-timestamps": "Carimbos de data e hora por cada palavra",
-	"when-completing-transcription": "Ao completar a transcrição"
+	"when-completing-transcription": "Ao completar a transcrição",
+	"ytdlp-options": "Opções de transcrição de URL",
+	"ytdlp-options-info": "O Vibe usa ytdlp para transcrição de URL."
 }
diff --git a/desktop/src-tauri/locales/sv-SE/common.json b/desktop/src-tauri/locales/sv-SE/common.json
index fe411901..64c75f1b 100644
--- a/desktop/src-tauri/locales/sv-SE/common.json
+++ b/desktop/src-tauri/locales/sv-SE/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Updatering klar",
 	"ask-for-update-body": "Vill du uppdatera Vibe till version {{version}}?",
 	"ask-for-update-title": "Bekräfta uppdatering",
+	"ask-for-update-ytdlp-message": "Ny YTDLP -version hittades. \nVill du uppdatera YTDLP?",
+	"ask-for-update-ytdlp-title": "Uppdatera YTDLP",
 	"cancel": "Avbryt",
 	"cancel-relaunch": "Senare",
 	"cancel-update": "Senare",
@@ -19,6 +21,7 @@
 	"check-error": "Kontrollen misslyckades",
 	"check-loading": "Kontroll",
 	"check-success": "Testade framgångsrikt",
+	"check-ytdlp-updates": "Kontrollera YTDLP för uppdateringar",
 	"confirm-exit": "Vill du avsluta? \nOsparade ändringar kommer att gå förlorade.",
 	"confirm-relaunch": "Starta om",
 	"confirm-update": "Updatera Nu",
@@ -74,6 +77,7 @@
 	"install-now": "Installera nu",
 	"invalid-llm-prompt": "Ogiltig uppmaning. \ndet måste innehålla följande mönster %s som kommer att ersättas med transkriptionen.",
 	"language": "Språk",
+	"later": "Senare",
 	"leftover": "vänster",
 	"light": "Ljus",
 	"llm-api-key": "Claude API-nyckel",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "Transkriberingen visas här snart...",
 	"translate-to-english": "Översätt till engelska",
 	"try-again": "Try Again",
+	"update-now": "uppdatera nu",
 	"update-version": "Uppdatera Vibe",
 	"updating-modal-body": "Updaterar Vibe till version {{version}}",
 	"updating-modal-title": "Uppdaterar...",
 	"use-word-timestamps": "Tidsstämplar per ord",
-	"when-completing-transcription": "När du slutför transkriptionen"
+	"when-completing-transcription": "När du slutför transkriptionen",
+	"ytdlp-options": "URL -transkriptionsalternativ",
+	"ytdlp-options-info": "Vibe använder ytdlp för URL-transkription."
 }
diff --git a/desktop/src-tauri/locales/vi-VN/common.json b/desktop/src-tauri/locales/vi-VN/common.json
index b67ab732..20735b0c 100644
--- a/desktop/src-tauri/locales/vi-VN/common.json
+++ b/desktop/src-tauri/locales/vi-VN/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "Cập nhật hoàn tất",
 	"ask-for-update-body": "Bạn có muốn cập nhật Vibe lên phiên bản {{version}} không?",
 	"ask-for-update-title": "Xác nhận cập nhật",
+	"ask-for-update-ytdlp-message": "Đã tìm thấy phiên bản ytdlp mới. \nBạn có muốn cập nhật ytdlp không?",
+	"ask-for-update-ytdlp-title": "Cập nhật YTDLP",
 	"cancel": "Hủy bỏ",
 	"cancel-relaunch": "Để sau",
 	"cancel-update": "Để sau",
@@ -19,6 +21,7 @@
 	"check-error": "kiểm tra thất bại",
 	"check-loading": "Kiểm tra",
 	"check-success": "Đã kiểm tra thành công",
+	"check-ytdlp-updates": "Kiểm tra YTDLP để cập nhật",
 	"confirm-exit": "Bạn có muốn thoát không? Những thay đổi chưa lưu sẽ bị mất.",
 	"confirm-relaunch": "Khởi chạy lại ngay bây giờ",
 	"confirm-update": "Cập nhật ngay",
@@ -74,6 +77,7 @@
 	"install-now": "Cài đặt Ngay",
 	"invalid-llm-prompt": "Prompt không hợp lệ. Nó phải bao gồm mẫu %s sau sẽ được thay thế bằng bản ghi.",
 	"language": "Ngôn ngữ",
+	"later": "Sau đó",
 	"leftover": "Còn lại",
 	"light": "Sáng",
 	"llm-api-key": "Khóa API của Claude",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "Bản chép lại sẽ được hiển thị ở đây trong giây lát...",
 	"translate-to-english": "Dịch sang tiếng Anh",
 	"try-again": "Hãy thử lại",
+	"update-now": "cập nhật ngay bây giờ",
 	"update-version": "Cập nhật Vibe",
 	"updating-modal-body": "Đang cập nhật Vibe lên phiên bản {{version}}",
 	"updating-modal-title": "Đang cập nhật...",
 	"use-word-timestamps": "Dấu thời gian cho mỗi từ",
-	"when-completing-transcription": "Khi hoàn thành việc chép lại"
+	"when-completing-transcription": "Khi hoàn thành việc chép lại",
+	"ytdlp-options": "Tùy chọn phiên âm URL",
+	"ytdlp-options-info": "Vibe sử dụng YTDLP cho phiên âm URL."
 }
diff --git a/desktop/src-tauri/locales/zh-CN/common.json b/desktop/src-tauri/locales/zh-CN/common.json
index 369adc1e..0d3d13ba 100644
--- a/desktop/src-tauri/locales/zh-CN/common.json
+++ b/desktop/src-tauri/locales/zh-CN/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "更新完成",
 	"ask-for-update-body": "您想将 Vibe 更新到 {{version}} 版本吗?",
 	"ask-for-update-title": "确认更新",
+	"ask-for-update-ytdlp-message": "找到新的 ytdlp 版本。\n您想更新 ytdlp 吗?",
+	"ask-for-update-ytdlp-title": "更新 ytdlp",
 	"cancel": "取消",
 	"cancel-relaunch": "稍后重启",
 	"cancel-update": "稍后更新",
@@ -19,6 +21,7 @@
 	"check-error": "检查失败",
 	"check-loading": "检查",
 	"check-success": "测试成功",
+	"check-ytdlp-updates": "检查YTDLP以获取更新",
 	"confirm-exit": "你想退出吗?\n未保存的更改将会丢失。",
 	"confirm-relaunch": "立即重启",
 	"confirm-update": "立即更新",
@@ -74,6 +77,7 @@
 	"install-now": "立即安装",
 	"invalid-llm-prompt": "提示无效。\n它必须包含以下模式 %s,该模式将被转录替换。",
 	"language": "语言",
+	"later": "之后",
 	"leftover": "剩余",
 	"light": "浅色",
 	"llm-api-key": "克劳德 API 密钥",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "转录结果马上就会显示在这里...",
 	"translate-to-english": "翻译成英语",
 	"try-again": "重试",
+	"update-now": "立即更新",
 	"update-version": "更新 Vibe",
 	"updating-modal-body": "正在将 Vibe 更新到 {{version}} 版本",
 	"updating-modal-title": "正在更新...",
 	"use-word-timestamps": "使用单词级时间戳",
-	"when-completing-transcription": "完成转录时"
+	"when-completing-transcription": "完成转录时",
+	"ytdlp-options": "URL 转录选项",
+	"ytdlp-options-info": "Vibe 使用 ytdlp 进行 URL 转录。"
 }
diff --git a/desktop/src-tauri/locales/zh-HK/common.json b/desktop/src-tauri/locales/zh-HK/common.json
index c1fdfa7a..a41eb6d5 100644
--- a/desktop/src-tauri/locales/zh-HK/common.json
+++ b/desktop/src-tauri/locales/zh-HK/common.json
@@ -9,6 +9,8 @@
 	"ask-for-relaunch-title": "更新完成",
 	"ask-for-update-body": "您想將 Vibe 更新至 {{version}} 版本嗎?",
 	"ask-for-update-title": "確認更新",
+	"ask-for-update-ytdlp-message": "找到新的 ytdlp 版本。\n您想更新 ytdlp 嗎?",
+	"ask-for-update-ytdlp-title": "更新YTDLP",
 	"cancel": "取消",
 	"cancel-relaunch": "稍後重啟",
 	"cancel-update": "稍後更新",
@@ -19,6 +21,7 @@
 	"check-error": "檢查失敗",
 	"check-loading": "檢查中",
 	"check-success": "測試成功",
+	"check-ytdlp-updates": "檢查YTDLP以獲取更新",
 	"confirm-exit": "你想退出嗎?\n未儲存的更改將會遺失。",
 	"confirm-relaunch": "立即重啟",
 	"confirm-update": "立即更新",
@@ -74,6 +77,7 @@
 	"install-now": "立即安裝",
 	"invalid-llm-prompt": "提示無效。\n它必須包含以下模式 %s,該模式將被轉錄替換。",
 	"language": "語言",
+	"later": "之後",
 	"leftover": "剩餘",
 	"light": "淺色",
 	"llm-api-key": "Claude API 金鑰",
@@ -149,9 +153,12 @@
 	"transcript-will-displayed-shortly": "轉錄結果馬上就會顯示在這裡...",
 	"translate-to-english": "翻譯成英語",
 	"try-again": "重試",
+	"update-now": "立即更新",
 	"update-version": "更新 Vibe",
 	"updating-modal-body": "正在將 Vibe 更新至 {{version}} 版本",
 	"updating-modal-title": "正在更新...",
 	"use-word-timestamps": "使用單詞級時間戳",
-	"when-completing-transcription": "完成轉錄時"
-}
\ No newline at end of file
+	"when-completing-transcription": "完成轉錄時",
+	"ytdlp-options": "URL轉錄選項",
+	"ytdlp-options-info": "Vibe 使用 ytdlp 進行 URL 轉錄。"
+}
diff --git a/desktop/src/lib/config.ts b/desktop/src/lib/config.ts
index f53ada4d..803947c4 100644
--- a/desktop/src/lib/config.ts
+++ b/desktop/src/lib/config.ts
@@ -18,17 +18,19 @@ export const llmDefaultMaxTokens = 8192 // https://docs.anthropic.com/en/docs/ab
 export const llmLimitsUrl = 'https://console.anthropic.com/settings/limits'
 export const llmCostUrl = 'https://console.anthropic.com/settings/cost'
 
+export const ytDlpVersion = '2025.01.150'
 export const ytDlpConfig = {
 	windows: {
-		url: 'https://github.com/thewh1teagle/vibe/releases/download/v0.0.1/yt-dlp.exe', // signed with self certificate. better than nothing
+		url: 'https://github.com/yt-dlp/yt-dlp/releases/download/2025.01.15/yt-dlp.exe', // signed with self certificate. better than nothing
 		name: 'yt-dlp.exe',
 	},
 	linux: {
-		url: 'https://github.com/yt-dlp/yt-dlp/releases/download/2024.08.06/yt-dlp_linux',
+		url: 'https://github.com/yt-dlp/yt-dlp/releases/download/2025.01.15/yt-dlp_linux',
 		name: 'yt-dlp_linux',
 	},
 	macos: {
-		url: 'https://github.com/yt-dlp/yt-dlp/releases/download/2024.08.06/yt-dlp_macos',
+		// Universal binary
+		url: 'https://github.com/yt-dlp/yt-dlp/releases/download/2025.01.15/yt-dlp_macos',
 		name: 'yt-dlp_macos',
 	},
 }
diff --git a/desktop/src/pages/home/viewModel.ts b/desktop/src/pages/home/viewModel.ts
index 2fba7747..8ef377fd 100644
--- a/desktop/src/pages/home/viewModel.ts
+++ b/desktop/src/pages/home/viewModel.ts
@@ -99,20 +99,33 @@ export function viewModel() {
 	}
 
 	async function switchToLinkTab() {
+		const isUpToDate = config.ytDlpVersion === preference.ytDlpVersion
 		const exists = await ytDlp.exists()
-		if (!exists) {
-			const shouldInstall = await dialog.ask(t('common.ask-for-install-ytdlp-message'), {
-				title: t('common.ask-for-install-ytdlp-title'),
-				kind: 'info',
-				cancelLabel: t('common.cancel'),
-				okLabel: t('common.install-now'),
-			})
+		if (!exists || (!isUpToDate && preference.shouldCheckYtDlpVersion)) {
+			let shouldInstall = false
+			if (!isUpToDate) {
+				shouldInstall = await dialog.ask(t('common.ask-for-update-ytdlp-message'), {
+					title: t('common.ask-for-update-ytdlp-title'),
+					kind: 'info',
+					cancelLabel: t('common.later'),
+					okLabel: t('common.update-now'),
+				})
+			} else {
+				shouldInstall = await dialog.ask(t('common.ask-for-install-ytdlp-message'), {
+					title: t('common.ask-for-install-ytdlp-title'),
+					kind: 'info',
+					cancelLabel: t('common.cancel'),
+					okLabel: t('common.install-now'),
+				})
+			}
+
 			if (shouldInstall) {
 				try {
 					toast.setMessage(t('common.downloading-ytdlp'))
 					toast.setProgress(0)
 					toast.setOpen(true)
 					await ytDlp.downloadYtDlp()
+					preference.setYtDlpVersion(config.ytDlpVersion)
 					toast.setOpen(false)
 					preference.setHomeTabIndex(2)
 				} catch (e) {
diff --git a/desktop/src/pages/settings/Page.tsx b/desktop/src/pages/settings/Page.tsx
index 842b7d46..840e3ae0 100644
--- a/desktop/src/pages/settings/Page.tsx
+++ b/desktop/src/pages/settings/Page.tsx
@@ -164,6 +164,25 @@ export default function SettingsPage({ setVisible }: SettingsPageProps) {
 				</button>
 			</div>
 
+			<div className="label mt-10">
+				<span className="label-text flex items-center gap-1">
+					<InfoTooltip text={t('common.ytdlp-options-info')} />
+					{t('common.ytdlp-options')}
+				</span>
+			</div>
+
+			<div className="form-control">
+				<label className="label cursor-pointer">
+					<span className="label-text">{t('common.check-ytdlp-updates')}</span>
+					<input
+						type="checkbox"
+						className="toggle toggle-primary"
+						onChange={(e) => vm.preference.setShouldCheckYtDlpVersion(e.target.checked)}
+						checked={vm.preference.shouldCheckYtDlpVersion}
+					/>
+				</label>
+			</div>
+
 			<div className="label mt-10">
 				<span className="label-text">{t('common.general')}</span>
 			</div>
diff --git a/desktop/src/providers/Preference.tsx b/desktop/src/providers/Preference.tsx
index 890cc0f9..1fd06287 100644
--- a/desktop/src/providers/Preference.tsx
+++ b/desktop/src/providers/Preference.tsx
@@ -56,6 +56,10 @@ export interface Preference {
 	setFfmpegOptions: ModifyState<FfmpegOptions>
 	resetOptions: () => void
 	enableSubtitlesPreset: () => void
+	ytDlpVersion: string | null
+	setYtDlpVersion: ModifyState<string | null>
+	shouldCheckYtDlpVersion: boolean
+	setShouldCheckYtDlpVersion: ModifyState<boolean>
 }
 
 // Create the context
@@ -109,6 +113,8 @@ const defaultOptions = {
 	diarizeThreshold: 0.5,
 	storeRecordInDocuments: true,
 	llmConfig: defaultOllamaConfig(),
+	ytDlpVersion: null,
+	shouldCheckYtDlpVersion: true,
 }
 
 // Preference provider component
@@ -138,6 +144,8 @@ export function PreferenceProvider({ children }: { children: ReactNode }) {
 	const [diarizeThreshold, setDiarizeThreshold] = useLocalStorage<number>('prefs_diarize_threshold', defaultOptions.diarizeThreshold)
 	const [storeRecordInDocuments, setStoreRecordInDocuments] = useLocalStorage('prefs_store_record_in_documents', defaultOptions.storeRecordInDocuments)
 	const [llmConfig, setLlmConfig] = useLocalStorage<LlmConfig>('prefs_llm_config', defaultOptions.llmConfig)
+	const [ytDlpVersion, setYtDlpVersion] = useLocalStorage<string | null>('prefs_ytdlp_version', null)
+	const [shouldCheckYtDlpVersion, setShouldCheckYtDlpVersion] = useLocalStorage<boolean>('prefs_should_check_ytdlp_version', true)
 
 	useEffect(() => {
 		setIsFirstRun(false)
@@ -236,6 +244,10 @@ export function PreferenceProvider({ children }: { children: ReactNode }) {
 		setHomeTabIndex,
 		ffmpegOptions,
 		setFfmpegOptions,
+		ytDlpVersion,
+		setYtDlpVersion,
+		shouldCheckYtDlpVersion,
+		setShouldCheckYtDlpVersion,
 	}
 
 	return <PreferenceContext.Provider value={preference}>{children}</PreferenceContext.Provider>