base on Un cliente de YouTube Music con Material Design 3, para Android # OpenTune
<div align="center">
<img src="https://github.com/Arturo254/OpenTune/blob/master/fastlane/metadata/android/en-US/images/featureGraphic.png" alt="Banner de OpenTune" width="100%"/>
### Cliente avanzado de YouTube Music con Material Design 3 para Android
[](https://github.com/Arturo254/OpenTune/releases)
[](https://github.com/Arturo254/OpenTune/blob/main/LICENSE)
[](https://crowdin.com/project/opentune)
[](https://www.android.com)
</div>
<br>
## Índice de contenidos
- [Visión general](#visión-general)
- [Stack tecnológico](#stack-tecnológico)
- [Características principales](#características-principales)
- [Documentación](#documentación)
- [Instalación](#instalación)
- [Compilación](#compilación-desde-código-fuente)
- [Contribuciones](#contribuciones)
- [Financiación](#apoyo-al-desarrollo)
- [Licencia](#licencia)
<br>
## Visión general
**OpenTune** es un cliente de YouTube Music de código abierto diseñado específicamente para dispositivos Android. Proporciona una experiencia de usuario superior con una interfaz moderna que implementa Material Design 3, ofreciendo funcionalidades avanzadas para explorar, reproducir y gestionar contenido musical sin las limitaciones de la aplicación oficial.
> [!NOTE]
> OpenTune es un proyecto independiente y no está afiliado, patrocinado ni respaldado por YouTube o Google.
<br>
## Stack tecnológico
<div align="center">
<a href="https://kotlinlang.org/">
<img src="https://img.shields.io/badge/Kotlin-7F52FF?style=for-the-badge&logo=kotlin&logoColor=white" alt="Kotlin"/>
</a>
<a href="https://developer.android.com/jetpack/compose">
<img src="https://img.shields.io/badge/Jetpack%20Compose-4285F4?style=for-the-badge&logo=jetpackcompose&logoColor=white" alt="Jetpack Compose"/>
</a>
<a href="https://material.io/design/material-you">
<img src="https://img.shields.io/badge/Material%20Design%203-757575?style=for-the-badge&logo=materialdesign&logoColor=white" alt="Material Design 3"/>
</a>
<a href="https://www.python.org/">
<img src="https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python"/>
</a>
<a href="https://www.tensorflow.org/">
<img src="https://img.shields.io/badge/TensorFlow-FF6F00?style=for-the-badge&logo=tensorflow&logoColor=white" alt="TensorFlow"/>
</a>
</div>
<br>
## Características principales
| Categoría | Funcionalidad | Descripción |
|:----------|:--------------|:------------|
| **Experiencia básica** | Reproducción sin anuncios | Disfruta de música sin interrupciones publicitarias |
| | Reproducción en segundo plano | Continúa escuchando mientras usas otras aplicaciones |
| | Búsqueda avanzada | Encuentra rápidamente canciones, vídeos, álbumes y listas de reproducción |
| **Cuenta y biblioteca** | Inicio de sesión integrado | Accede a tu cuenta para sincronizar preferencias y colecciones |
| | Gestión de biblioteca | Organiza y administra completamente tu colección musical |
| | Modo sin conexión | Descarga contenido para escuchar sin conexión a internet |
| **Características de audio** | Letras sincronizadas | Visualiza letra de canciones perfectamente sincronizada |
| | Omisión inteligente de silencios | Salta automáticamente segmentos sin audio |
| | Normalización de volumen | Equilibra el nivel sonoro entre diferentes pistas |
| | Control de tempo y tono | Ajusta velocidad y tono de reproducción según preferencias |
| **Personalización** | Tema dinámico | Interfaz que se adapta a los colores de portadas de álbumes |
| | Soporte multiidioma | Disponible en numerosos idiomas para usuarios globales |
| **Integración** | Compatibilidad con Android Auto | Integración con sistemas de infoentretenimiento vehicular |
| | Material Design 3 | Diseño alineado con las últimas directrices de diseño de Google |
| | Exportación de portadas | Guarda imágenes de álbumes en alta resolución |
> [!TIP]
> Para maximizar tu experiencia con OpenTune, activa la normalización de audio en los ajustes y prueba el tema dinámico que adapta la interfaz a los colores de tus álbumes favoritos.
<br>
## Documentación
Para información detallada sobre configuración, funcionalidades avanzadas y guías de uso, consulta nuestra documentación oficial:
[<img src="https://img.shields.io/badge/Documentación-GitBook-4285F4?style=for-the-badge&logo=gitbook&logoColor=white">](https://opentune.gitbook.io/)
<br>
## Instalación
### Requisitos del sistema
| Componente | Requisito mínimo |
|:-----------|:-----------------|
| Sistema operativo | Android 6.0 (Marshmallow) o superior |
| Espacio de almacenamiento | 10 MB disponibles |
| Conectividad | Conexión a Internet para streaming |
### Métodos de instalación
#### Desde GitHub Releases
1. Navega a la sección de [Releases](https://github.com/Arturo254/OpenTune/releases) en GitHub
2. Localiza la sección de Descargas
3. Descarga el archivo APK de la última versión estable
4. Habilita "Instalación desde fuentes desconocidas" en la configuración de seguridad de tu dispositivo
5. Abre el archivo APK descargado para completar la instalación
#### Desde la página oficial
1. Visita el sitio web oficial de [OpenTune](https://opentune.netlify.app/)
2. Selecciona la opción de descarga para Android
3. Habilita "Instalación desde fuentes desconocidas" en la configuración de seguridad de tu dispositivo
4. Instala el archivo APK descargado
#### Desde F-Droid:
[Descargar ↓](https://f-droid.org/es/packages/com.Arturo254.opentune/)
#### Desde OpenApk
<div align="center">
<a href="https://www.openapk.net/opentune/com.Arturo254.opentune/">
<img src="https://private-user-images.githubusercontent.com/125956566/395609000-8e21cdf1-06be-47be-9e6d-e862c95738e6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDYxMjIxNzAsIm5iZiI6MTc0NjEyMTg3MCwicGF0aCI6Ii8xMjU5NTY1NjYvMzk1NjA5MDAwLThlMjFjZGYxLTA2YmUtNDdiZS05ZTZkLWU4NjJjOTU3MzhlNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTAxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUwMVQxNzUxMTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMzQ1MWVlODUzMDc5MmE0OTdjNzE3YTQ0YzE2ZGFkOTIwNmI1ZDcxMjEwMzA0Y2FjOTEzMGVmYTU2NzRkMTU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.kkwnNH3MdC17p4Bn14ahzTM67Wwp4lfTYHesrHUMpmg" alt="Kotlin"/>
</a>
La aplicación estará disponible en el repositorio de F-Droid en el futuro cercano.
> [!IMPORTANT]
> Por motivos de seguridad, se recomienda obtener la aplicación exclusivamente a través de los canales oficiales mencionados anteriormente. Evita descargar APKs de fuentes no verificadas.
<br>
## Compilación desde código fuente
### Requisitos previos
| Herramienta | Versión recomendada |
|:------------|:--------------------|
| Gradle | 7.5 o superior |
| Kotlin | 1.7 o superior |
| Android Studio | 2022.1 o superior |
| JDK | 11 o superior |
| Android SDK | API nivel 33 (Android 13) |
### Preparación del entorno
```bash
# Clonar el repositorio
git clone https://github.com/Arturo254/OpenTune.git
# Acceder al directorio del proyecto
cd OpenTune
# Actualizar submódulos (si existen)
git submodule update --init --recursive
```
### Métodos de compilación
<details>
<summary><b>Compilación con Android Studio</b></summary>
1. Abre Android Studio
2. Selecciona "Open an existing Android Studio project"
3. Navega y selecciona el directorio OpenTune
4. Espera a que el proyecto sincronice y los índices se construyan
5. Selecciona Build > Build Bundle(s) / APK(s) > Build APK(s)
</details>
<details>
<summary><b>Compilación por línea de comandos</b></summary>
```bash
# Compilar versión de producción
./gradlew assembleRelease
# Compilar versión de depuración
./gradlew assembleDebug
# Compilación completa con pruebas
./gradlew build
# Ejecutar pruebas unitarias
./gradlew test
```
</details>
> [!NOTE]
> Los archivos APK compilados se encontrarán en el directorio `app/build/outputs/apk/`.
<br>
## Contribuciones
### Código de conducta
Todos los participantes en este proyecto deben adherirse a nuestro código de conducta que promueve un entorno inclusivo, respetuoso y constructivo. Consulta el [Código de Conducta completo](https://github.com/Arturo254/OpenTune/blob/master/CODE_OF_CONDUCT.md) antes de contribuir.
### Traducción
Si deseas ayudar a traducir OpenTune a tu idioma o mejorar las traducciones existentes, puedes participar de las siguientes formas:
1. [POEditor](https://poeditor.com/join/project/208BwCVazA) (Recomendado)
2. [Crowdin](https://crowdin.com/project/opentune)
3. Contacto directo con el desarrollador:
- Email: [
[email protected]](mailto:
[email protected])
### Canales oficiales de comunicación
| Canal | Enlace |
|:------|:-------|
| Chat de Telegram | [OpenTune Chat](https://t.me/OpenTune_chat) |
| Canal de actualizaciones | [OpenTune Updates](https://t.me/opentune_updates) |
### Flujo de trabajo para desarrollo
<details>
<summary><b>Proceso para contribuir al código</b></summary>
1. Revisa las [issues abiertas](https://github.com/Arturo254/OpenTune/issues) o crea una nueva describiendo el problema o característica
2. Realiza un fork del repositorio
3. Crea una rama para tu característica (`git checkout -b feature/nueva-caracteristica`)
4. Implementa tus cambios siguiendo las convenciones de código del proyecto
5. Verifica que el código pasa todas las pruebas (`./gradlew test`)
6. Realiza commits con mensajes descriptivos (`git commit -m 'feat: añadir nueva característica'`)
7. Sube los cambios a tu fork (`git push origin feature/nueva-caracteristica`)
8. Abre un Pull Request detallando los cambios realizados y referenciando la issue correspondiente
</details>
> [!TIP]
> Revisa nuestras [directrices de contribución](https://github.com/Arturo254/OpenTune/blob/master/CONTRIBUTING.md) para obtener información más detallada sobre el proceso de desarrollo, estándares de código y flujo de trabajo.
<br>
## Apoyo al desarrollo
Si encuentras valor en **OpenTune** y deseas contribuir a su desarrollo continuo, considera realizar una donación. Tu apoyo financiero nos permite:
- Implementar nuevas características y mejoras
- Resolver problemas y optimizar el rendimiento
- Mantener la infraestructura del proyecto
- Dedicar más tiempo al desarrollo y mantenimiento
### Métodos de donación
<div align="center">
<a href="https://github.com/sponsors/Arturo254">
<img src="https://img.shields.io/badge/GitHub_Sponsors-181717?style=for-the-badge&logo=github&logoColor=white" alt="GitHub Sponsors">
</a>
</div>
> [!NOTE]
> Las donaciones son completamente opcionales. OpenTune siempre será gratuito y de código abierto, independientemente del apoyo financiero recibido.
<br>
## Agradecimientos:
- mostafaalagamy (MetroList):
- Fabito02 (Por Apoyo incondicional desde el principio)
## Licencia
**Copyright © 2025**
Este programa es software libre: puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a tu elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil, pero **SIN NINGUNA GARANTÍA**, ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulta la [Licencia Pública General de GNU](https://github.com/Arturo254/OpenTune/blob/main/LICENSE) para obtener más detalles.
> [!CAUTION]
> Cualquier uso comercial no autorizado de este software o sus derivados constituye una violación de los términos de licencia.
---
<div align="center">
<p>© 2023-2024 Open Source Projects</p>
<p>Desarrollado con pasión por <a href="https://github.com/Arturo254">Arturo Cervantes</a></p>
</div>
", Assign "at most 3 tags" to the expected json: {"id":"13326","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"