{"id":50532856,"url":"https://github.com/avilesxd/loudly","last_synced_at":"2026-06-03T15:01:41.818Z","repository":{"id":358913692,"uuid":"1243147898","full_name":"avilesxd/loudly","owner":"avilesxd","description":"Aplicación de escritorio para masterizar tracks musicales. EQ de 4 bandas, control LUFS, auto-master por referencia y exportación WAV/FLAC.","archived":false,"fork":false,"pushed_at":"2026-05-26T22:51:49.000Z","size":437,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T23:21:49.117Z","etag":null,"topics":["audio","audio-editor","audio-processing","customtkinter","desktop-app","equalizer","flac","gui","limiter","loudness","lufs","mastering","matchering","music-production","music-tools","pedalboard","pyinstaller","python","wav","windows"],"latest_commit_sha":null,"homepage":"https://avilesxd.github.io/loudly/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avilesxd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["avilesxd"],"ko_fi":"avilesxd","custom":["https://paypal.me/avilesxd"]}},"created_at":"2026-05-19T05:01:32.000Z","updated_at":"2026-05-26T22:51:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/avilesxd/loudly","commit_stats":null,"previous_names":["avilesxd/loudly"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/avilesxd/loudly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avilesxd%2Floudly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avilesxd%2Floudly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avilesxd%2Floudly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avilesxd%2Floudly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avilesxd","download_url":"https://codeload.github.com/avilesxd/loudly/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avilesxd%2Floudly/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33870026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audio-editor","audio-processing","customtkinter","desktop-app","equalizer","flac","gui","limiter","loudness","lufs","mastering","matchering","music-production","music-tools","pedalboard","pyinstaller","python","wav","windows"],"created_at":"2026-06-03T15:01:40.897Z","updated_at":"2026-06-03T15:01:41.806Z","avatar_url":"https://github.com/avilesxd.png","language":"Python","funding_links":["https://github.com/sponsors/avilesxd","https://ko-fi.com/avilesxd","https://paypal.me/avilesxd"],"categories":[],"sub_categories":[],"readme":"# Loudly — Masterizador de Audio\n\n\u003cdiv align=\"center\"\u003e\n\n![Loudly](https://raw.githubusercontent.com/avilesxd/loudly/refs/heads/main/web/public/og.png)\n\n[![CI](https://github.com/avilesxd/loudly/actions/workflows/ci.yml/badge.svg)](https://github.com/avilesxd/loudly/actions/workflows/ci.yml)\n[![Release](https://github.com/avilesxd/loudly/actions/workflows/release.yml/badge.svg)](https://github.com/avilesxd/loudly/actions/workflows/release.yml)\n[![Latest Release](https://img.shields.io/github/v/release/avilesxd/loudly.svg)](https://github.com/avilesxd/loudly/releases/latest)\n[![Downloads](https://img.shields.io/github/downloads/avilesxd/loudly/total.svg)](https://github.com/avilesxd/loudly/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/avilesxd/loudly/blob/main/LICENSE)\n[![Python 3.13](https://img.shields.io/badge/python-3.13-blue.svg)](https://www.python.org/downloads/)\n\nAplicación de escritorio para masterizar temas musicales. Wizard de 3 pasos: cargá tu track, ajustá EQ y loudness, y aplicá auto-masterización por referencia.\n\n\u003ca href=\"https://github.com/avilesxd/loudly/releases/latest\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/📥_Descargar_Loudly-Windows-blue?style=for-the-badge\u0026logo=windows\u0026logoColor=white\" alt=\"Descargar\"/\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003e [!WARNING]\n\u003e Al ejecutar `Loudly.exe` por primera vez, Windows puede mostrar el mensaje **\"Windows protegió tu PC\"** porque el ejecutable no tiene firma de código comercial. El archivo es seguro — podés verificar el código fuente en este repositorio.\n\u003e\n\u003e **Pasos para ejecutarlo:**\n\u003e 1. Hacé clic en **\"Más información\"**\n\u003e 2. Luego en **\"Ejecutar de todas formas\"**\n\u003e\n\u003e | Paso 1 — Clic en \"Más información\" | Paso 2 — Clic en \"Ejecutar de todas formas\" |\n\u003e | :---------------------------------: | :------------------------------------------: |\n\u003e | ![SmartScreen paso 1](docs/images/smartscreen-warning.png) | ![SmartScreen paso 2](docs/images/smartscreen-run-anyway.png) |\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n| 📂 Paso 1 — Cargar track | 🎚️ Paso 2 — EQ y Limitador | ⚡ Paso 3 — Auto-Master | 🗂️ Batch Processing |\n| :-----------------------: | :-------------------------: | :---------------------: | :------------------: |\n| ![Paso 1](docs/images/step1-load.png) | ![Paso 2](docs/images/step2-edit.png) | ![Paso 3](docs/images/step3-master.png) | ![Batch](docs/images/batch-window.png) |\n\n\u003c/div\u003e\n\n## Características\n\n- **EQ de 4 bandas** — Low (80 Hz), Low-Mid (250 Hz), Hi-Mid (2.5 kHz), High (8 kHz)\n- **Limitador con control LUFS** — normaliza a estándares de streaming (Spotify −14, YouTube −13, CD −9)\n- **Auto-Master por referencia** — iguala automáticamente el EQ, loudness y dinámica de un track de referencia usando [matchering](https://github.com/sergree/matchering)\n- **Procesamiento batch** — auto-masteriza múltiples tracks contra una referencia y los exporta automáticamente como `\u003cnombre\u003e_remastered.wav`\n- **Reproductor con toggle Antes/Después** — escuchá la diferencia en tiempo real\n- **Análisis comparativo** — muestra LUFS, True Peak y Dinámica antes y después del procesado\n- **Exporta a WAV 24-bit o FLAC**\n\n## Formatos soportados\n\n| Entrada               | Salida            |\n| --------------------- | ----------------- |\n| WAV, MP3, FLAC, AIFF  | WAV 24-bit, FLAC  |\n\n## Instalación (uso)\n\nDescargá el instalador desde [Releases](https://github.com/avilesxd/loudly/releases/latest).\nNo requiere Python instalado — es un ejecutable standalone para Windows.\n\n## Instalación (desarrollo)\n\nRequiere Python 3.13.\n\n```bash\ngit clone https://github.com/avilesxd/loudly.git\ncd loudly\npython -m venv .venv\n.venv\\Scripts\\pip install -r requirements.txt\n.venv\\Scripts\\python main.py\n```\n\n## Compilar a .exe\n\n```bash\n.venv\\Scripts\\pyinstaller loudly.spec --clean\n```\n\nEl ejecutable queda en `dist\\Loudly.exe`.\n\n## Tests\n\n```bash\n.venv\\Scripts\\pytest tests/ -v\n```\n\n## Arquitectura\n\n```\nloudly/\n├── main.py              # Punto de entrada\n├── app.py               # LoudlyApp — ventana principal, sesión compartida\n├── audio/\n│   ├── loader.py        # Carga WAV/MP3/FLAC/AIFF → (channels, samples) float32\n│   ├── eq.py            # EQ de 4 bandas con pedalboard\n│   ├── limiter.py       # Normalización LUFS + true-peak limiter\n│   └── automaster.py    # Auto-masterización con matchering\n└── ui/\n    ├── batch_window.py      # Ventana de procesamiento batch (CTkToplevel)\n    ├── steps/\n    │   ├── step1_load.py    # Paso 1: carga de archivos\n    │   ├── step2_edit.py    # Paso 2: EQ + limiter interactivos\n    │   └── step3_master.py  # Paso 3: auto-master + análisis + exportar\n    └── components/\n        ├── player.py        # Reproductor ANTES/DESPUÉS\n        └── waveform.py      # Visualización de forma de onda\n```\n\nEl estado de la sesión se mantiene en un diccionario `session` en `LoudlyApp` y se comparte por referencia con los tres pasos. Las operaciones de audio se ejecutan en hilos daemon para no bloquear la UI.\n\n### Convención de datos de audio\n\nTodos los arrays internos son `(channels, samples)` en `float32`. Las bibliotecas externas (soundfile, pyloudnorm) usan `(samples, channels)` y se transponen en los puntos de integración.\n\n## Stack\n\n- **UI**: CustomTkinter\n- **EQ / Limiter**: [pedalboard](https://github.com/spotify/pedalboard) (Spotify)\n- **Auto-Master**: [matchering](https://github.com/sergree/matchering)\n- **LUFS**: pyloudnorm\n- **Playback**: sounddevice\n- **Waveform**: matplotlib (backend TkAgg)\n- **MP3**: miniaudio\n- **Build**: PyInstaller\n\n## Documentación adicional\n\n- [Guía de usuario](docs/user-guide.md) — cómo usar la aplicación paso a paso\n- [Arquitectura](docs/architecture.md) — detalles técnicos del diseño\n\n## Contribuir\n\n¡Las contribuciones son bienvenidas! Leé la [guía de contribución](.github/CONTRIBUTING.md) para empezar.\n\nSi encontrás un bug o tenés una idea, abrí un [issue](https://github.com/avilesxd/loudly/issues/new/choose).\n\n## Licencia\n\nDistribuido bajo la licencia MIT. Ver [LICENSE](LICENSE) para más información.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n_Hecho con ❤️ por [Ignacio Avilés](www.linkedin.com/in/ignacioavilescardenasso)_\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favilesxd%2Floudly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favilesxd%2Floudly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favilesxd%2Floudly/lists"}