{"id":36672691,"url":"https://github.com/vukan322/yt-mp3-go","last_synced_at":"2026-04-26T09:03:34.868Z","repository":{"id":301786236,"uuid":"1010307301","full_name":"vukan322/yt-mp3-go","owner":"vukan322","description":"Download YouTube to MP3, fast and easy.","archived":false,"fork":false,"pushed_at":"2026-01-23T15:03:05.000Z","size":648,"stargazers_count":33,"open_issues_count":0,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-26T03:37:41.638Z","etag":null,"topics":["docker","ffmpeg","golang","javascript","open-source","youtube-downloader","ytdlp"],"latest_commit_sha":null,"homepage":"https://lukavukanovic.xyz/yt-downloader","language":"Go","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/vukan322.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2025-06-28T19:42:59.000Z","updated_at":"2026-01-23T15:02:28.000Z","dependencies_parsed_at":"2026-01-13T15:06:27.364Z","dependency_job_id":null,"html_url":"https://github.com/vukan322/yt-mp3-go","commit_stats":null,"previous_names":["vukan322/yt-mp3-go"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/vukan322/yt-mp3-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vukan322%2Fyt-mp3-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vukan322%2Fyt-mp3-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vukan322%2Fyt-mp3-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vukan322%2Fyt-mp3-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vukan322","download_url":"https://codeload.github.com/vukan322/yt-mp3-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vukan322%2Fyt-mp3-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32291347,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T08:29:33.829Z","status":"ssl_error","status_checked_at":"2026-04-26T08:29:18.366Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","ffmpeg","golang","javascript","open-source","youtube-downloader","ytdlp"],"created_at":"2026-01-12T10:43:32.555Z","updated_at":"2026-04-26T09:03:34.861Z","avatar_url":"https://github.com/vukan322.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YouTube Downloader\n\n\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/vukan322/yt-mp3-go)](https://github.com/vukan322/yt-mp3-go/releases/latest)\n[![Docker Package](https://img.shields.io/badge/ghcr.io-vukan322/yt--mp3--go-blue?logo=docker)](https://github.com/vukan322/yt-mp3-go/pkgs/container/yt-mp3-go)\n[![Build Status](https://github.com/vukan322/yt-mp3-go/actions/workflows/deploy.yml/badge.svg)](https://github.com/vukan322/yt-mp3-go/actions/workflows/deploy.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Live App](https://img.shields.io/badge/Live_App-Online-brightgreen)](https://lukavukanovic.xyz/yt-downloader/)\n\n\nA modern, feature-rich web application for downloading YouTube videos as MP3 files.\nBuilt with a robust Go backend and a dynamic, responsive frontend.\n\n|                                     Initial Page                                      |                                         Download Options                                          |\n|:-------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------:|\n| \u003cimg src=\"/screenshots/app-screenshot.png\" alt=\"Initial Page Screenshot\" width=\"450\"\u003e | \u003cimg src=\"/screenshots/app-screenshot-options.png\" alt=\"Download Options Screenshot\" width=\"450\"\u003e |\n\n## Key Features\n\n- **Asynchronous Downloads:** Utilizes Go's concurrency with goroutines to process downloads in the background, allowing the server to handle multiple users simultaneously without blocking.\n- **Live Status Updates:** Employs Server-Sent Events (SSE) to push real-time progress updates (e.g., \"Processing\", \"Complete\", \"Failed\") to the user's browser.\n- **Dynamic Frontend:** The UI is built with vanilla JavaScript, using AJAX for form submissions and dynamically updating the page content without requiring a full reload.\n- **Internationalization (i18n):** Fully localized interface supporting both English and Serbian, with language detection and a manual switcher.\n- **Modern UI/UX:** Features a clean, responsive design with light/dark themes, video thumbnail previews, file size display, and state persistence across page reloads using `sessionStorage`.\n- **Audio Quality Control:** Allows users to select from multiple quality presets (Low, Medium, High) to balance file size and audio quality.\n- **Custom Filenames:** Lets users easily edit the MP3 filename in the UI before downloading for better file organization.\n- **Audio Normalization:** Provides an option to normalize audio to a standard volume level, ensuring a consistent listening experience across different tracks.\n- **Playlist Safe:** Intelligently handles URLs that are part of a playlist, downloading only the single video specified by the user.\n- **No Ads, No Fees:** A clean, user-focused experience with no advertisements or hidden costs.\n\n## Built With\n\nThis project was brought to life with these modern technologies:\n\n| Technology                    | Description                                                                                           |\n|:------------------------------|:------------------------------------------------------------------------------------------------------|\n| **Go (Golang)**               | The core language for the backend server, chosen for its performance and concurrency features.        |\n| **Vanilla JavaScript (ES6+)** | Used for all client-side logic, including AJAX, DOM manipulation, and handling Server-Sent Events.    |\n| **`yt-dlp`**                  | A powerful command-line tool used by the backend to handle the downloading from YouTube.              |\n| **`ffmpeg`**                  | An essential external program used by `yt-dlp` to perform the audio conversion to MP3.                |\n| **`go-i18n/v2`**              | The Go library used to manage the application's internationalization and translations.                |\n\n---\n\n## Prerequisites\n\nTo run this project locally, you must have the following installed and available in your system's `PATH`.\n\n- **Go** (version 1.22 or later)\n- **`yt-dlp`** \u0026 **`ffmpeg`**:\n\n  ### macOS\n  ```sh\n  brew install yt-dlp/taps/yt-dlp ffmpeg\n  ```\n\n  ### Linux\n  ```sh\n  sudo apt update \u0026\u0026 sudo apt install yt-dlp ffmpeg\n  ```\n  \n\u003chr\u003e\n\n## Getting Started\n\n### Docker (Recommended)\n\nThe easiest way to run this application is using Docker. No need to install Go, yt-dlp, or ffmpeg.\n\n```sh\n  git clone https://github.com/vukan322/yt-mp3-go.git\n  cd yt-mp3-go\n  docker-compose up --build\n```\n\nOr manually with Docker:\n```sh\n  docker build -t yt-mp3-downloader .\n  docker run -p 8080:8080 -v ./downloads:/app/downloads -v ./cookies.txt:/app/cookies.txt:ro yt-mp3-downloader\n```\n\u003chr\u003e\n\n### Local Development\n\n1.  **Clone the repository:**\n    ```sh\n    git clone https://github.com/vukan322/yt-mp3-go.git\n    cd yt-mp3-go\n    ```\n\n2.  **Set up your environment:**\n    Copy the example environment file and edit it if needed.\n    ```sh\n    cp .env.example .env\n    ```\n\n3.  **Tidy dependencies:**\n    This will download the required Go modules.\n    ```sh\n    go mod tidy\n    ```\n\n4.  **Make build script executable:**\n    You only need to do this once.\n    ```sh\n    chmod +x build-assets.sh\n    ```\n\n5.  **Run the application:**\n    ```sh\n    make run\n    ```\n    OR\n    ```sh\n    ./build-assets.sh \u0026\u0026 go run cmd/server/main.go\n    ```\n\n### Access the Application\n\nOpen your browser and navigate to `http://localhost:8080/yt-downloader`.\n\n## Configuration\n\nThe application is configured using environment variables, which are loaded from an .env file during local development.\n\n| Variable                      | Description                                                           | Default                       |\n|:------------------------------|:----------------------------------------------------------------------|:------------------------------|\n| **APP_ENV**                   | The application environment (**development** or **production**).      | **development**               |\n| **DOMAIN**                    | The domain the application is running on.                             | **localhost**                 |\n| **PORT**                      | The port the application will listen on.                              | **8080**                      |\n| **BASE_PATH**                 | The URL path prefix for the application.                              | **/yt-downloader**            |\n\n## Deployment\n\nThis project is configured for continuous deployment using GitHub Actions.\n\n - **Trigger**: A push to the `main` branch automatically triggers the build and deployment workflow.\n - **Strategy**: The deployment is **atomic**, meaning it uses a timestamped release directory and a current symlink to ensure zero downtime.\n - **Versioning**: The application version is automatically injected at build time. The format is `MAJOR.MINOR.PATCH`, \n where the `PATCH` number is the GitHub Actions run number.\n\n## License\n\nThis project is licensed under the MIT License - see the `LICENSE` file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvukan322%2Fyt-mp3-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvukan322%2Fyt-mp3-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvukan322%2Fyt-mp3-go/lists"}