Skip to content

Mats2208/DownloadYoutubeTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ₯ YouTube Downloader

Platform Swift License Version

AplicaciΓ³n nativa de macOS para descargar videos de YouTube en alta calidad

CaracterΓ­sticas β€’ InstalaciΓ³n β€’ Uso β€’ Arquitectura


✨ Características

  • 🎬 Descarga hasta 4K (2160p) - MΓ‘xima calidad disponible con merge automΓ‘tico
  • πŸš€ 100% Portable - Todo incluido: Python, pytubefix y ffmpeg empaquetados
  • 🎨 Interfaz moderna - DiseΓ±o nativo con Swift/SwiftUI 5.9
  • πŸ“Š Progreso en tiempo real - Visualiza el avance byte a byte
  • 🎡 Audio MP3 - Extrae solo el audio en alta calidad
  • πŸ–ΌοΈ Vista previa - Thumbnail y detalles del video antes de descargar
  • πŸ“ Auto-apertura - Finder se abre automΓ‘ticamente al finalizar
  • 🧹 Limpieza automΓ‘tica - Vista se resetea despuΓ©s de cada descarga
  • πŸ’» Sin emojis en logs - Interfaz profesional y limpia

πŸ“¦ InstalaciΓ³n

Para Usuarios Finales

  1. Descarga DownloadTool-Portable-FIXED.zip (60 MB)
  2. Descomprime el archivo
  3. Arrastra DownloadTool.app a tu carpeta Aplicaciones
  4. Abre la app (doble click)

Primera ejecuciΓ³n (Gatekeeper)

Si macOS bloquea la app por Gatekeeper:

xattr -cr /Applications/DownloadTool.app

O: Click derecho β†’ Abrir β†’ Abrir

βœ… Sin Requisitos Adicionales

La app es completamente standalone:

  • βœ… Python 3.14 incluido (empaquetado con PyInstaller)
  • βœ… pytubefix 10.3.6 incluido
  • βœ… ffmpeg incluido para merge de video + audio
  • ❌ No requiere Homebrew
  • ❌ No requiere instalaciΓ³n de Python
  • ❌ No requiere pip install

πŸš€ Uso

  1. Pega un link de YouTube en el campo de bΓΊsqueda
  2. Click en el botΓ³n de bΓΊsqueda πŸ”
  3. VerΓ‘s el thumbnail y detalles del video
  4. Selecciona la calidad deseada (o solo audio)
  5. Click en Descargar Ahora
  6. πŸ“ Finder se abre automΓ‘ticamente mostrando el archivo descargado

Los videos se guardan en:

~/Downloads/MateoTool/Downloads/

🎯 Calidades Disponibles

Calidad ResoluciΓ³n Merge AutomΓ‘tico
4K 2160p βœ… Video + Audio
2K 1440p βœ… Video + Audio
Full HD 1080p βœ… Video + Audio
HD 720p ⚑ Progressive
SD 480p, 360p ⚑ Progressive

Nota: Las calidades 1080p+ requieren merge de video + audio separados. ffmpeg estΓ‘ incluido en el bundle.

πŸ› οΈ CompilaciΓ³n desde CΓ³digo (Desarrolladores)

Requisitos de Desarrollo

  • macOS 13.0+
  • Xcode 15.0+
  • Homebrew (para ffmpeg)
  • Python 3.8+ (para PyInstaller)

Clonar el Repositorio

git clone https://github.com/Mats2208/DownloadYoutubeTool.git
cd DownloadTool

Setup de FFmpeg y Dylibs

# Instalar ffmpeg (si no lo tienes)
brew install ffmpeg

# Las dylibs de ffmpeg se almacenan fuera del proyecto para evitar link automΓ‘tico
mkdir -p ~/temp_ffmpeg_libs

# Copiar dylibs necesarias
cp /opt/homebrew/Cellar/ffmpeg/*/lib/libav*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/Cellar/ffmpeg/*/lib/libsw*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/libvpx/lib/libvpx.*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/dav1d/lib/libdav1d.*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/lame/lib/libmp3lame.*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/opus/lib/libopus.*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/svt-av1/lib/libSvtAv1Enc.*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/x264/lib/libx264.*.dylib ~/temp_ffmpeg_libs/
cp /opt/homebrew/opt/x265/lib/libx265.*.dylib ~/temp_ffmpeg_libs/

# Copiar ffmpeg binary
cp $(which ffmpeg) DownloadTool/Resources/bin/
chmod +x DownloadTool/Resources/bin/ffmpeg

Compilar el Ejecutable Standalone (Opcional)

Si modificaste download_youtube.py, recompila el ejecutable:

# Crear entorno virtual
python3 -m venv .venv
source .venv/bin/activate

# Instalar dependencias
pip install pytubefix pyinstaller

# Compilar ejecutable
cd DownloadTool
python -m PyInstaller --onefile --name youtube_downloader \
    --collect-all pytubefix --clean download_youtube.py

# Copiar al proyecto
cp dist/youtube_downloader Resources/
chmod +x Resources/youtube_downloader

# Limpiar
rm -rf build dist youtube_downloader.spec
cd ..
deactivate

Compilar la App

# Limpiar builds anteriores
rm -rf build/

# Compilar desde terminal
xcodebuild -project DownloadTool.xcodeproj -configuration Debug build

# O desde Xcode: Product β†’ Build (⌘+B)

Empaquetar FFmpeg Dylibs

DespuΓ©s de compilar, ejecuta el script para copiar y configurar las dylibs:

# Copiar dylibs y reescribir paths con install_name_tool
python3 ffmpeg_bundle.py Debug

# Firmar todo (ad-hoc signature)
for dylib in build/Debug/DownloadTool.app/Contents/Resources/ffmpeg_libs/*.dylib; do
    codesign --force --sign - "$dylib"
done
codesign --force --sign - "build/Debug/DownloadTool.app/Contents/Resources/ffmpeg"
codesign --force --sign - "build/Debug/DownloadTool.app/Contents/Resources/youtube_downloader"
codesign --force --sign - "build/Debug/DownloadTool.app"

Crear DistribuciΓ³n ZIP

# Crear ZIP sin metadata de macOS
cd build/Debug
ditto -c -k --keepParent --norsrc DownloadTool.app "../../DownloadTool-Portable.zip"
cd ../..

# El ZIP estarΓ‘ en la raΓ­z del proyecto
ls -lh DownloadTool-Portable.zip

Notas Importantes para el Build

⚠️ Las dylibs de ffmpeg NO deben estar en DownloadTool/Resources/ffmpeg_libs/ durante la compilación, porque Xcode las enlazaría automÑticamente al binario principal. Por eso se guardan en ~/temp_ffmpeg_libs/ y se copian después del build con ffmpeg_bundle.py.

⚠️ ffmpeg_bundle.py usa install_name_tool para reescribir todos los load paths de las dylibs de rutas absolutas (/opt/homebrew/...) a rutas relativas (@loader_path/ffmpeg_libs/...), haciendo el app portable.

⚠️ Cada vez que uses install_name_tool se invalida la firma del código, por eso hay que re-firmar todo con codesign.

πŸ—οΈ Arquitectura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   SwiftUI Interface                 β”‚
β”‚   (DownloaderView.swift)            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   YouTubeManager (Singleton)        β”‚
β”‚   - Process management              β”‚
β”‚   - Environment variables (FFMPEG)  β”‚
β”‚   - JSON communication              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
         β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
         β”‚           β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ youtube_     β”‚ β”‚ Python + Script   β”‚
β”‚ downloader   β”‚ β”‚ (Fallback Dev)    β”‚
β”‚ (9.9 MB)     β”‚ β”‚                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚           β”‚
         β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   pytubefix (YouTube API)           β”‚
β”‚   - Stream resolution detection     β”‚
β”‚   - Progressive/Adaptive formats    β”‚
β”‚   - Download with progress          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   ffmpeg (Bundle: 432 KB)           β”‚
β”‚   - Merge video + audio streams     β”‚
β”‚   - Format: -c:v copy -c:a aac      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Componentes Principales

Componente DescripciΓ³n TamaΓ±o
DownloaderView.swift UI SwiftUI moderna (650x800px) -
YouTubeManager.swift Singleton, maneja procesos y estado -
download_youtube.py Script Python con pytubefix 10 KB
youtube_downloader Python 3.14 + pytubefix empaquetado 8.1 MB
ffmpeg Herramienta de merge incluida 432 KB

πŸ”„ Flujo de Descarga 1080p+

1. Usuario selecciona 1080p
   ↓
2. Manager ejecuta: youtube_downloader download <url> 1080p
   ↓
3. Python (pytubefix) descarga:
   - video_12345.mp4 (1080p sin audio)
   - audio_12345.m4a (audio high quality)
   ↓
4. Manager pasa FFMPEG_PATH al proceso
   ↓
5. Python ejecuta ffmpeg desde bundle:
   ffmpeg -i video.mp4 -i audio.m4a -c:v copy -c:a aac final.mp4
   ↓
6. Archivos temporales eliminados
   ↓
7. βœ… Video final con audio β†’ Finder auto-abre β†’ Vista se limpia

πŸ› SoluciΓ³n de Problemas

"La app estΓ‘ daΓ±ada y no se puede abrir"

xattr -cr /Applications/DownloadTool.app

Videos sin audio en 1080p+

SoluciΓ³n: La versiΓ³n v3-FIXED incluye ffmpeg empaquetado. Descarga la ΓΊltima versiΓ³n.

Error al buscar video

  • Verifica que el link sea vΓ‘lido de YouTube
  • Comprueba tu conexiΓ³n a internet
  • Algunos videos tienen restricciones regionales o de edad

Logs del sistema

La app muestra logs en la parte inferior. Haz click en "Logs del sistema" para expandir y ver detalles del proceso.

πŸ“Š Especificaciones TΓ©cnicas

Componente VersiΓ³n/Info
Plataforma macOS 13.0+ (Apple Silicon + Intel)
Swift 5.9
SwiftUI 5.9
Python 3.14.2 (empaquetado)
pytubefix 10.3.6
ffmpeg 8.0.1
PyInstaller 6.18.0
TamaΓ±o Total 44 MB (comprimido)

⚠️ Aviso Legal

Esta herramienta es solo para uso personal y educativo. El usuario es responsable de:

  • Respetar los tΓ©rminos de servicio de YouTube
  • Cumplir las leyes de copyright de su regiΓ³n
  • Descargar ΓΊnicamente contenido del que tenga derechos

πŸ“ Licencia

MIT License - Ver LICENSE para mΓ‘s detalles.


Hecho con ❀️ usando Swift y Python

Reportar Bug β€’ Solicitar Feature

2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`) 3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`) 4. Push a la rama (`git push origin feature/AmazingFeature`) 5. Abre un Pull Request

πŸ“ž Soporte

Si encuentras algΓΊn problema:

  1. Revisa la secciΓ³n SoluciΓ³n de Problemas
  2. Verifica los logs del sistema en la app
  3. Abre un issue con los detalles

Hecho con ❀️ usando Swift y Python

⭐ Si te gusta este proyecto, dale una estrella en GitHub ⭐

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors