Releases: wilkinbarban/normalizador-audio
Release list
Normalizador Audio 1.1.2
Normalizador Audio 1.1.2
This release focuses on installation, runtime state handling, and the main conversion interface.
What's Changed
- Replaced the previous split installer flow with a single
install.ps1that supports both local execution and remote bootstrap from GitHub. - Added
Iniciar.batas the local launcher for users who already cloned or downloaded the repository. - Removed the obsolete
install_dependencies.batandinstall_secure.ps1scripts. - Moved runtime state out of the project folder. Configuration, profiles, and logs now live under
%LOCALAPPDATA%\NormalizadorAudio\. - Updated the README and supporting docs to explain the new install and manual launch flows.
- Refreshed the application visual design with a more technical audio-console style, improved controls, and more consistent light/dark themes.
- Expanded the video conversion table area so roughly ten rows are visible and the table gets vertical priority in the layout.
- Added Python runtime detection metadata and tests for the dynamic Python dependency floor behavior.
Validation
python -m pytest: 42 passed.install.ps1parsed successfully.Iniciar.batembedded PowerShell parsed successfully.- Local Windows EXE built with PyInstaller 6.20.0 and Python 3.14.5.
Asset
NormalizadorAudio.exeis attached as a standalone Windows executable.
Full Changelog: v1.1.1...v1.1.2
v1.1.1
🇪🇸 Español
Normalizador Audio v1.1.1
Versión de mantenimiento que completa la experiencia de instalación de la suite v1.1.x, incorporando instalación automática de FFmpeg en todos los puntos de entrada de la aplicación y un manual integrado completamente renovado.
✨ Nuevas Funcionalidades
🔧 Instalación automatizada de FFmpeg
- Validación en instaladores PowerShell: install.ps1 e install_secure.ps1 ahora detectan si FFmpeg está disponible en el sistema y, si no lo está, lo instalan automáticamente mediante
winget(paqueteGyan.FFmpegcon fallback aFFmpeg.FFmpeg), siguiendo el mismo patrón establecido para Python. - Auto-instalación al iniciar la app: si FFmpeg no se detecta al arrancar, la aplicación ofrece instalarlo de inmediato con winget desde una ventana de consola — sin redirigir al usuario a ningún sitio web.
- Menú Ayuda › Instalar FFmpeg: nueva opción visible en el menú Ayuda que verifica primero si FFmpeg ya está presente. Si está instalado, muestra un mensaje informativo; si falta, lanza el instalador automático.
📖 Manual integrado renovado
- Manual completo reescrito: guía completa en los 3 idiomas con 10 secciones estructuradas, emojis e iconos visuales, cubriendo todas las funcionalidades actuales: normalización, presets, GPU, waveform, reportes, configuración e instalación de FFmpeg.
- Guía rápida actualizada: los 6 pasos esenciales ahora incluyen presets predefinidos, perfil de referencia y la opción de instalar FFmpeg.
🧩 Servicio de dependencias
- Nuevos métodos en
DependencyService:install_ffmpeg_via_winget(),check_winget()y_refresh_windows_path(). check_ffmpeg()ahora valida correctamente el código de retorno del proceso, no solo la ausencia de excepciones.- Nuevas claves i18n en los 3 idiomas:
deps_installing_console,deps_install_ok,deps_install_fail,ffmpeg_already_installed.
🛠️ Compatibilidad
- Sin cambios incompatibles. No se requiere actualización de configuración.
- Compatible con entornos creados desde v1.0.0.
📦 Stack Técnico
- Framework: PyQt6 ≥6.0.0
- Backend: Python 3.8–3.14 (recomendado 3.11)
- Procesamiento de audio: FFmpeg con filtro loudnorm
- Gestión de dependencias: winget (Windows Package Manager)
- QR local: qrcode[pil], sin API remota
- CI/CD: GitHub Actions (tests, linting, security checks)
📋 Requisitos del Sistema
- SO: Windows 10/11 64-bit
- Python: 3.8–3.14 (preinstalado o auto-instalable vía winget)
- FFmpeg: Instalado en PATH (auto-instalable vía winget desde la app)
- RAM: Mínimo 2 GB (recomendado 4 GB+ para procesamiento paralelo)
- GPU (opcional): NVIDIA (CUDA), Intel o AMD con soporte DXVA2/D3D11VA
📝 Notas de versión
Tercera entrega del proyecto. Cierra el ciclo de instalación de dependencias iniciado en v1.1.0, garantizando que ningún usuario tenga que configurar FFmpeg manualmente en ningún escenario.
Próximas versiones considerarán:
- Soporte para formatos de audio directo (.mp3, .wav, .flac)
- Historial de procesamiento con rollback
- Interfaz de línea de comandos (CLI)
🇺🇸 English
Audio Normalizer v1.1.1
Maintenance release completing the installation experience of the v1.1.x suite, with automatic FFmpeg installation across all application entry points and a fully rewritten built-in manual.
✨ New Features
🔧 Automated FFmpeg management
- Validation in PowerShell installers: install.ps1 and install_secure.ps1 now detect whether FFmpeg is available and install it automatically via
winget(Gyan.FFmpegwith fallback toFFmpeg.FFmpeg), mirroring the existing Python install pattern. - Auto-install on app startup: if FFmpeg is not detected at launch, the app offers immediate winget installation in a console window — no browser redirect.
- Help › Install FFmpeg menu item: new visible entry in the Help menu that checks whether FFmpeg is already installed before acting — shows an informational message if present, or launches the automatic installer if missing.
📖 Rewritten built-in manual
- Full manual rewritten: complete guide in all 3 languages with 10 structured sections, emojis and visual icons, covering all current features: normalization, presets, GPU, waveform, reports, configuration and FFmpeg management.
- Quick guide updated: the 6 essential steps now include built-in presets, reference profile and the Install FFmpeg option.
🧩 Dependency service
- New methods on
DependencyService:install_ffmpeg_via_winget(),check_winget(), and_refresh_windows_path(). check_ffmpeg()now correctly validates the process return code, not just the absence of exceptions.- New i18n keys in all 3 languages:
deps_installing_console,deps_install_ok,deps_install_fail,ffmpeg_already_installed.
🛠️ Compatibility
- No breaking changes. No configuration update required.
- Compatible with environments created from v1.0.0 onwards.
📦 Tech Stack
- Framework: PyQt6 ≥6.0.0
- Backend: Python 3.8–3.14 (recommended 3.11)
- Audio processing: FFmpeg with loudnorm filter
- Dependency management: winget (Windows Package Manager)
- Local QR: qrcode[pil], no remote API
- CI/CD: GitHub Actions (tests, linting, security checks)
📋 System Requirements
- OS: Windows 10/11 64-bit
- Python: 3.8–3.14 (pre-installed or auto-installable via winget)
- FFmpeg: In PATH (auto-installable via winget from within the app)
- RAM: Minimum 2 GB (4 GB+ recommended for parallel processing)
- GPU (optional): NVIDIA (CUDA), Intel or AMD with DXVA2/D3D11VA support
📝 Release Notes
Third project release. Closes the dependency installation loop started in v1.1.0 — no user should ever need to configure FFmpeg manually regardless of the scenario they come from.
Future versions may include:
- Direct audio format support (.mp3, .wav, .flac)
- Processing history with rollback
- Command-line interface (CLI)
🇧🇷 Português (Brasil)
Normalizador de Áudio v1.1.1
Versão de manutenção que completa a experiência de instalação da suíte v1.1.x, incorporando instalação automática do FFmpeg em todos os pontos de entrada do aplicativo e um manual integrado completamente renovado.
✨ Novas Funcionalidades
🔧 Gerenciamento automatizado de FFmpeg
- Validação nos instaladores PowerShell: install.ps1 e install_secure.ps1 agora verificam se o FFmpeg está disponível e o instalam automaticamente via
winget(Gyan.FFmpegcom fallback paraFFmpeg.FFmpeg), seguindo o mesmo padrão da instalação do Python. - Auto-instalação na inicialização do app: se o FFmpeg não for detectado ao iniciar, o aplicativo oferece instalá-lo imediatamente via winget em uma janela de console — sem redirecionar para nenhum site.
- Menu Ajuda › Instalar FFmpeg: nova opção visível no menu Ajuda que verifica se o FFmpeg já está instalado antes de agir — exibe mensagem informativa se presente, ou inicia o instalador automático se ausente.
📖 Manual integrado renovado
- Manual completo reescrito: guia completo nos 3 idiomas com 10 seções estruturadas, emojis e ícones visuais, cobrindo todas as funcionalidades atuais: normalização, presets, GPU, waveform, relatórios, configuração e instalação do FFmpeg.
- Guia rápido atualizado: os 6 passos essenciais agora incluem presets predefinidos, perfil de referência e a opção de instalar o FFmpeg.
🧩 Serviço de dependências
- Novos métodos em
DependencyService:install_ffmpeg_via_winget(),check_winget()e_refresh_windows_path(). check_ffmpeg()agora valida corretamente o código de retorno do processo, não apenas a ausência de exceções.- Novas chaves i18n nos 3 idiomas:
deps_installing_console,deps_install_ok,deps_install_fail,ffmpeg_already_installed.
🛠️ Compatibilidade
- Sem mudanças incompatíveis. Nenhuma atualização de configuração necessária.
- Compatível com ambientes criados a partir da v1.0.0.
📦 Stack Técnico
- Framework: PyQt6 ≥6.0.0
- Backend: Python 3.8–3.14 (recomendado 3.11)
- Processamento de áudio: FFmpeg com filtro loudnorm
- Gerenciamento de dependências: winget (Windows Package Manager)
- QR local: qrcode[pil], sem API remota
- CI/CD: GitHub Actions (testes, linting, verificações de segurança)
📋 Requisitos do Sistema
- SO: Windows 10/11 64-bit
- Python: 3.8–3.14 (pré-instalado ou instalável automaticamente via winget)
- FFmpeg: No PATH (instalável automaticamente via winget pelo próprio app)
- RAM: Mínimo 2 GB (4 GB+ recomendado para processamento paralelo)
- GPU (opcional): NVIDIA (CUDA), Intel ou AMD com suporte DXVA2/D3D11VA
📝 Notas de Versão
Terceiro lançamento do projeto. Fecha o ciclo de instalação de dependências iniciado na v1.1.0 — nenhum usuário precisará configurar o FFmpeg manualmente em nenhum cenário.
Versões futuras poderão incluir:
- Suporte a formatos de áudio direto (.mp3, .wav, .flac)
- Histórico de processamento com rollback
- Interface de linha de comando (CLI)
Full Changelog: v1.1.0...v1.1.1
v1.1.0
🇪🇸 Español
Normalizador Audio v1.1.0
Esta versión amplía significativamente las capacidades de rendimiento e interfaz de la aplicación, incorporando aceleración por GPU, presets profesionales, procesamiento en paralelo configurable y previsualización de waveform. Compatible sin cambios con la configuración de v1.0.0.
✨ Nuevas Funcionalidades
🚀 Rendimiento y procesamiento
- Aceleración GPU inteligente (FFmpeg): detección automática del método
hwaccelcompatible con el hardware (CUDA, DXVA2, D3D11VA). Activación y desactivación opcional directamente desde la interfaz sin reiniciar la app. - Fallback automático a CPU: si FFmpeg falla al usar
-hwaccel, el procesamiento reintenta automáticamente en CPU sin interrumpir el flujo de trabajo ni generar errores visibles al usuario. - Procesamiento paralelo configurable: el nuevo selector de concurrencia permite procesar entre 1 y 8 videos simultáneamente, ajustado al número de núcleos disponibles en el sistema.
- Cancelación robusta: al pulsar Cancelar, todos los procesos FFmpeg activos son terminados de forma segura, liberando recursos del sistema inmediatamente.
🎛️ Interfaz de usuario
- Presets predefinidos por plataforma: cuatro presets listos para usar (YouTube, Netflix, Spotify, Podcast) aplican automáticamente los valores de LUFS, LRA y TP recomendados para cada estándar. El modo
Customconserva los valores guardados manualmente. - Selector de concurrencia: control visual integrado en la pestaña Normalizar para ajustar la cantidad de procesos simultáneos en tiempo real.
- Waveform visual en la pestaña Perfil: al seleccionar un video de referencia, la app genera y muestra automáticamente la forma de onda del audio usando FFmpeg, sin herramientas externas.
🧩 Infraestructura interna
- Tres nuevos módulos de servicio:
gpu_service(detección y selección de hwaccel),waveform_service(generación de imágenes waveform) ywaveform_worker(procesamiento en background sin bloquear la UI). - La limpieza de caché ahora incluye también el directorio temporal de imágenes waveform.
🔧 Gestión automática de FFmpeg
- Los instaladores install.ps1 e install_secure.ps1 ahora validan si FFmpeg está disponible y, si no lo está, lo instalan automáticamente mediante
winget(paqueteGyan.FFmpegcon fallback aFFmpeg.FFmpeg). - Al iniciar la aplicación, si FFmpeg no se detecta en el sistema, se ofrece instalación automática con winget desde una ventana de consola, sin necesidad de intervención manual adicional.
- El menú Ayuda > Instalar FFmpeg informa si FFmpeg ya está presente o inicia el instalador automático si falta.
🛠️ Compatibilidad
- Sin cambios incompatibles para usuarios que vienen de v1.0.0.
- La configuración existente se migra automáticamente con los nuevos campos
gpu_accelyparallel_jobs. - El entorno virtual
.venvexistente se conserva durante actualizaciones.
📦 Stack Técnico
- Framework: PyQt6 ≥6.0.0
- Backend: Python 3.8–3.14 (recomendado 3.11)
- Procesamiento de audio: FFmpeg con filtro loudnorm
- GPU detection: subprocess + ffmpeg hwaccels probe
- QR local: qrcode[pil], sin API remota
- CI/CD: GitHub Actions (tests, linting, security checks)
📋 Requisitos del Sistema
- SO: Windows 10/11 64-bit
- Python: 3.8–3.14 (preinstalado o auto-instalable vía winget)
- FFmpeg: Instalado en PATH (auto-instalable vía winget desde la app)
- RAM: Mínimo 2 GB (recomendado 4 GB+ para procesamiento paralelo)
- GPU (opcional): NVIDIA (CUDA), Intel o AMD con soporte DXVA2/D3D11VA
📝 Notas de versión
Segunda versión del proyecto. La arquitectura de servicios fue refactorizada internamente para soportar hardware acceleration y procesamiento concurrente de forma estable.
Próximas versiones considerarán:
- Soporte para formatos de audio directo (.mp3, .wav, .flac)
- Historial de procesamiento con rollback
- Interfaz de línea de comandos (CLI)
🇺🇸 English
Audio Normalizer v1.1.0
This release significantly extends the app's performance and interface capabilities, adding GPU acceleration, professional presets, configurable parallel processing, and waveform preview. Fully backward compatible with v1.0.0 configuration.
✨ New Features
🚀 Performance and processing
- Smart GPU acceleration (FFmpeg): automatic detection of the hardware-compatible
hwaccelmethod (CUDA, DXVA2, D3D11VA), with an optional toggle in the UI — no restart required. - Automatic CPU fallback: when FFmpeg fails with
-hwaccel, processing silently retries on CPU without interrupting the workflow or surfacing errors to the user. - Configurable parallel processing: a new concurrency control lets you process 1 to 8 videos simultaneously, automatically capped to the number of available CPU cores.
- Robust cancellation: pressing Cancel safely terminates all active FFmpeg processes and immediately releases system resources.
🎛️ User interface
- Platform presets: four ready-to-use presets (YouTube, Netflix, Spotify, Podcast) apply the recommended LUFS, LRA and TP values for each delivery standard in one click.
Custommode restores manually saved values. - Concurrency selector: inline control in the Normalize tab to adjust simultaneous processing jobs in real time.
- Visual waveform in the Profile tab: when a reference video is selected, the app automatically generates and displays the audio waveform using FFmpeg — no external tools required.
🧩 Internal infrastructure
- Three new service modules:
gpu_service(hwaccel detection and selection),waveform_service(waveform image generation), andwaveform_worker(background processing that keeps the UI responsive). - Cache cleanup now covers the waveform image temp directory.
🔧 Automatic FFmpeg Management
- The install.ps1 and install_secure.ps1 installers now validate whether FFmpeg is available and, if missing, install it automatically via
winget(primary packageGyan.FFmpegwith fallback toFFmpeg.FFmpeg). - On app startup, if FFmpeg is not detected, the user is offered automatic winget installation through a console window — no manual steps required.
- The Help > Install FFmpeg menu item informs the user if FFmpeg is already present, or launches the automatic installer if it is missing.
🛠️ Compatibility
- No breaking changes for users upgrading from v1.0.0.
- Existing configuration is automatically migrated with the new keys
gpu_accelandparallel_jobs. - An existing
.venvenvironment is preserved during in-place updates.
📦 Tech Stack
- Framework: PyQt6 ≥6.0.0
- Backend: Python 3.8–3.14 (recommended 3.11)
- Audio processing: FFmpeg with loudnorm filter
- GPU detection: subprocess + ffmpeg hwaccels probe
- Local QR: qrcode[pil], no remote API
- CI/CD: GitHub Actions (tests, linting, security checks)
📋 System Requirements
- OS: Windows 10/11 64-bit
- Python: 3.8–3.14 (pre-installed or auto-installable via winget)
- FFmpeg: In PATH (auto-installable via winget from within the app)
- RAM: Minimum 2 GB (4 GB+ recommended for parallel processing)
- GPU (optional): NVIDIA (CUDA), Intel or AMD with DXVA2/D3D11VA support
📝 Release Notes
Second project release. The internal service architecture was refactored to reliably support hardware acceleration and concurrent processing.
Future versions may include:
- Direct audio format support (.mp3, .wav, .flac)
- Processing history with rollback
- Command-line interface (CLI)
🇧🇷 Português (Brasil)
Normalizador de Áudio v1.1.0
Esta versão expande significativamente os recursos de desempenho e interface do aplicativo, com aceleração por GPU, presets profissionais, processamento paralelo configurável e pré-visualização de waveform. Totalmente compatível com as configurações da v1.0.0.
✨ Novas Funcionalidades
🚀 Desempenho e processamento
- Aceleração GPU inteligente (FFmpeg): detecção automática do método
hwaccelcompatível com o hardware (CUDA, DXVA2, D3D11VA), com ativação opcional direto na interface — sem necessidade de reiniciar o app. - Fallback automático para CPU: quando o FFmpeg falha com
-hwaccel, o processamento tenta novamente em CPU de forma silenciosa, sem interromper o fluxo de trabalho nem exibir erros ao usuário. - Processamento paralelo configurável: o novo seletor de concorrência permite processar de 1 a 8 vídeos simultaneamente, limitado automaticamente ao número de núcleos disponíveis no sistema.
- Cancelamento robusto: ao pressionar Cancelar, todos os processos FFmpeg ativos são encerrados com segurança e os recursos do sistema são liberados imediatamente.
🎛️ Interface do usuário
- Presets por plataforma: quatro presets prontos (YouTube, Netflix, Spotify, Podcast) aplicam os valores recomendados de LUFS, LRA e TP para cada padrão de entrega com um clique. O modo
Customrestaura os valores salvos manualmente. - Seletor de concorrência: controle integrado na aba Normalizar para ajustar os processos simultâneos em tempo real.
- Waveform visual na aba Perfil: ao selecionar um vídeo de referência, o app gera e exibe automaticamente a forma de onda do áudio usando o FFmpeg — sem ferramentas externas.
🧩 Infraestrutura interna
- Três novos módulos de serviço:
gpu_service(detecção e seleção de hwaccel),waveform_service(geração de imagens waveform) ewaveform_worker(processamento em segundo plano sem bloquear a UI). - A limpeza de cache agora também cobre o diretório temporário de imagens waveform.
🔧 Gerenciamento automático de FFmpeg
- Os instaladores install.ps1 e install_secure.ps1 agora validam se o FFmpeg está disponível e, se não estiver, instalam automaticamente via
winget(pacoteGyan.FFmpeg...
v1.0.0
🎉 Normalizador Audio v1.0.0 — Primera versión estable / First stable release / Primeira versão estável
Español
Aplicación de escritorio para Windows que normaliza el volumen de lotes de videos usando FFmpeg loudnorm (LUFS), con interfaz multilenguaje, tema claro/oscuro, perfil de referencia y reportes detallados.
⬇️ Descarga
| Archivo | Plataforma | Descripción |
|---|---|---|
NormalizadorAudio.exe |
Windows 10/11 64-bit | Ejecutable independiente (no requiere Python instalado) |
FFmpeg requerido. Si no lo tienes, ejecuta
install_dependencies.batdel repo o descárgalo en ffmpeg.org.
✨ Novedades
- 🎵 Normalización LUFS profesional con FFmpeg loudnorm
- 📦 Procesamiento por lotes de múltiples videos
- 🎯 Perfil de referencia: analiza un video y aplica sus parámetros al lote
- 📊 Reportes antes/después (I, LRA, TP) con exportación CSV/TXT
- 🌍 Interfaz en Español · English · Português (Brasil)
- 🌗 Tema claro/oscuro
- 🔄 Verificación automática de actualizaciones desde GitHub Releases
- 💙 Diálogo de apoyo al proyecto con QR code local (Wise / PIX)
- 🚀 Instalación automática de Python y FFmpeg via
install_dependencies.bat
🛠️ Requisitos
- Windows 10/11 64-bit
- FFmpeg instalado y disponible en PATH
- 2 GB RAM mínimo
⚡ Instalación rápida (PowerShell)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/wilkinbarban/normalizador-audio/main/install_secure.ps1 | iex📄 Changelog completo → CHANGELOG.md
English
Windows desktop application that normalizes the volume of video batches using FFmpeg loudnorm (LUFS), with multilingual interface, light/dark theme, reference profile, and detailed reports.
⬇️ Download
| File | Platform | Description |
|---|---|---|
NormalizadorAudio.exe |
Windows 10/11 64-bit | Standalone executable (no Python required) |
FFmpeg required. If not installed, run install_dependencies.bat from the repo or download it at ffmpeg.org.
✨ What's New
- 🎵 Professional LUFS normalization with FFmpeg loudnorm
- 📦 Batch processing of multiple videos
- 🎯 Reference profile: analyze a video and apply its parameters to the batch
- 📊 Before/after reports (I, LRA, TP) with CSV/TXT export
- 🌍 Interface in Español · English · Português (Brasil)
- 🌗 Light/dark theme
- 🔄 Automatic update checker from GitHub Releases
- 💙 Support the project dialog with local QR code (Wise / PIX)
- 🚀 Automatic Python and FFmpeg installation via install_dependencies.bat
🛠️ Requirements
- Windows 10/11 64-bit
- FFmpeg installed and available in PATH
- 2 GB RAM minimum
⚡ Quick install (PowerShell)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/wilkinbarban/normalizador-audio/main/install_secure.ps1 | iex📄 Full changelog → CHANGELOG.md
Português (Brasil)
Aplicativo de desktop para Windows que normaliza o volume de lotes de vídeos usando FFmpeg loudnorm (LUFS), com interface multilíngue, tema claro/escuro, perfil de referência e relatórios detalhados.
⬇️ Download
| Arquivo | Plataforma | Descrição |
|---|---|---|
NormalizadorAudio.exe |
Windows 10/11 64-bit | Executável independente (não requer Python instalado) |
FFmpeg necessário. Se não estiver instalado, execute install_dependencies.bat do repositório ou baixe em ffmpeg.org.
✨ Novidades
- 🎵 Normalização LUFS profissional com FFmpeg loudnorm
- 📦 Processamento em lote de múltiplos vídeos
- 🎯 Perfil de referência: analisa um vídeo e aplica seus parâmetros ao lote
- 📊 Relatórios antes/depois (I, LRA, TP) com exportação CSV/TXT
- 🌍 Interface em Español · English · Português (Brasil)
- 🌗 Tema claro/escuro
- 🔄 Verificação automática de atualizações pelo GitHub Releases
- 💙 Diálogo de apoio ao projeto com QR code local (Wise / PIX)
- 🚀 Instalação automática de Python e FFmpeg via install_dependencies.bat
🛠️ Requisitos
- Windows 10/11 64-bit
- FFmpeg instalado e disponível no PATH
- 2 GB de RAM mínimo
⚡ Instalação rápida (PowerShell)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/wilkinbarban/normalizador-audio/main/install_secure.ps1 | iex📄 Changelog completo → CHANGELOG.md
Desarrollado con Python + PyQt6 · Developed with Python + PyQt6 · Desenvolvido com Python + PyQt6
Licencia / License / Licença: GPL v3