Downbender — Descargador de Vídeos Nativo para macOS
Descripción General
Downbender es una aplicación nativa de macOS, open source (GPLv3), que descarga vídeos de YouTube y muchos otros sitios hasta 1080p (H.264/MP4) o extrae su audio como MP3. Está construida en Swift 6.2 con SwiftUI y el nuevo lenguaje de diseño Liquid Glass de macOS 26, y funciona como un frontend nativo sobre yt-dlp: la app embebe yt-dlp, FFmpeg y Deno dentro del bundle, por lo que el usuario no necesita instalar absolutamente nada más.El proyecto está publicado en GitHub, con su propia web de descarga e instalable con Homebrew (brew install --cask naztirs/tap/downbender).
Características Principales:
Descargas hasta 1080p o extracción MP3: El sondeo previo con yt-dlp lista las calidades reales disponibles de cada vídeo, y FFmpeg se encarga del merge a MP4 o de la conversión a MP3 en máxima calidad.
Cola de descargas con pausa y reanudación real: Progreso por ítem (porcentaje, velocidad y ETA), dos descargas simultáneas por defecto (configurable de 1 a 4), cancelación y reintentos; la pausa continúa los archivos .part en lugar de empezar de cero.
Detección de enlaces en el portapapeles: Copia un enlace de vídeo en cualquier aplicación y Downbender lo detecta al activarse, pidiendo confirmación antes de descargar.
Totalmente autocontenida: yt-dlp, FFmpeg y Deno viajan dentro del .app. Deno resuelve los challenges de JavaScript que YouTube exige a los extractores modernos.
Actualizador unificado integrado: Desde Ajustes se comprueban en paralelo las actualizaciones de la propia app (auto-updater con swap atómico y rollback) y del motor yt-dlp, y se aplican con un clic — clave porque YouTube rompe los extractores periódicamente.
Cookies del navegador configurables: Soporte para vídeos con restricción de edad o solo para miembros usando la sesión de Chrome, Safari, Firefox, Edge o Brave.
Tecnologías Utilizadas
Bash
# Core Language
Swift 6.2
# UI Framework
SwiftUI (Liquid Glass, macOS 26)
# Concurrency
Swift Concurrency (@MainActor, @Observable)
# Download Engine
yt-dlp
FFmpeg
Deno
# Testing
Swift Testing
# Build & Distribution
SwiftPM
GitHub Actions
Homebrew Cask
Desafíos y Aprendizajes
El principal desafío fue construir y distribuir una app de macOS completa sin Xcode ni cuenta de developer de pago: el bundle se ensambla a mano con scripts (swift build, Info.plist, icono con sips + iconutil) y se firma ad-hoc, resolviendo las fricciones de Gatekeeper en la instalación y en el auto-updater. A eso se sumó la "guerra" con YouTube: fue necesario embeber Deno como runtime de JavaScript para los challenges de yt-dlp, implementar retries automáticos ante errores 403 con escalada al cliente TV, y diseñar un actualizador del motor en runtime para sobrevivir a los cambios constantes de la plataforma sin reinstalar la app.
Resultados e Impacto
Release pública v1.0.0: Distribuida como DMG (app firmada ad-hoc) y como cask de Homebrew, con web propia en GitHub Pages y código abierto bajo GPLv3.
Cero fricción para el usuario: Al embeber yt-dlp, FFmpeg y Deno, la app funciona nada más arrastrarla a Aplicaciones — sin Homebrew, sin Python, sin dependencias externas.
Calidad verificada: 111 tests con Swift Testing y 86% de cobertura, gracias a una arquitectura MVVM con subprocesos inyectables (FakeProcessRunner) que hace testeable toda la lógica de descarga.
Resiliencia frente a plataformas cambiantes: El actualizador de yt-dlp en runtime y los reintentos inteligentes mantienen la app funcionando cuando YouTube cambia, sin esperar una nueva release.