{"id":35299664,"url":"https://github.com/jackysi/pawtunes","last_synced_at":"2026-04-14T17:01:09.631Z","repository":{"id":266486112,"uuid":"890228400","full_name":"Jackysi/PawTunes","owner":"Jackysi","description":"Discover PawTunes, The Ultimate HTML5 Internet Radio Player with Purrfect Visuals, Customizable Templates, and Clean Code. Built for Pros, Loved by Cats!","archived":false,"fork":false,"pushed_at":"2026-04-11T15:17:02.000Z","size":8399,"stargazers_count":61,"open_issues_count":3,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-11T15:22:30.423Z","etag":null,"topics":["centovacast","fanarttv","html5-player","icecast","internet-radio-player","itunes","lastfm","lastfm-api","radio-player","radio-station-player","sam-broadcaster","shoutcast","spotify","web-player","web-radio","webradio"],"latest_commit_sha":null,"homepage":"https://prahec.com/pawtunes","language":"SCSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Jackysi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"jackysi","custom":["https://www.paypal.com/donate/?hosted_button_id=VN3SBVYNHC2SE"]}},"created_at":"2024-11-18T08:04:17.000Z","updated_at":"2026-04-11T15:17:06.000Z","dependencies_parsed_at":"2025-01-06T01:25:39.789Z","dependency_job_id":"9bb1122a-6542-487d-ac0a-eb3f5c1020b7","html_url":"https://github.com/Jackysi/PawTunes","commit_stats":null,"previous_names":["jackysi/pawtunes"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/Jackysi/PawTunes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jackysi%2FPawTunes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jackysi%2FPawTunes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jackysi%2FPawTunes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jackysi%2FPawTunes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jackysi","download_url":"https://codeload.github.com/Jackysi/PawTunes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jackysi%2FPawTunes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31806209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["centovacast","fanarttv","html5-player","icecast","internet-radio-player","itunes","lastfm","lastfm-api","radio-player","radio-station-player","sam-broadcaster","shoutcast","spotify","web-player","web-radio","webradio"],"created_at":"2025-12-30T16:50:11.882Z","updated_at":"2026-04-14T17:01:09.625Z","avatar_url":"https://github.com/Jackysi.png","language":"SCSS","funding_links":["https://github.com/sponsors/jackysi","https://www.paypal.com/donate/?hosted_button_id=VN3SBVYNHC2SE"],"categories":[],"sub_categories":[],"readme":"![PawTunes Logo](https://cdn.prahec.com/projects/pawtunes/pawtunes-dark.png)\n\n# PawTunes - Open Source Web Radio Player\n\n[![PHP 7.4+](https://img.shields.io/badge/PHP-7.4%2B-777BB4?logo=php\u0026logoColor=white)](#requirements)\n[![License](https://img.shields.io/github/license/Jackysi/pawtunes)](LICENSE)\n[![Docker Pulls](https://img.shields.io/docker/pulls/jackyprahec/pawtunes)](https://hub.docker.com/r/jackyprahec/pawtunes)\n[![GitHub Stars](https://img.shields.io/github/stars/Jackysi/pawtunes?style=social)](https://github.com/Jackysi/pawtunes)\n[![Latest Release](https://img.shields.io/github/v/release/Jackysi/pawtunes)](https://github.com/Jackysi/pawtunes/releases)\n\n**PawTunes** is a free, open-source web radio player with real-time track info, artwork fetching, and multi-channel streaming.\nSupports Shoutcast, Icecast, AzuraCast, direct ICY metadata, and more. Self-hosted PHP backend with Docker support.\n\nBuilt from the ground up with over 15 years of experience, PawTunes combines modern web technologies, elegant design,\nand high performance to deliver a complete radio player platform.\nIt's not just a JavaScript audio library - it's a full-stack app that fetches live track information, manages album artwork from multiple APIs,\nand includes a control panel for managing every aspect of your radio player.\n\n---\n\n## Table of Contents\n\n- [Quick Start](#quick-start)\n- [Demo \u0026 Screenshots](#demo--screenshots)\n- [Why PawTunes?](#why-pawtunes)\n- [Features](#features)\n- [Installation](#installation)\n- [Docker](#docker)\n- [Track Info APIs](#track-info-apis)\n- [Artwork APIs](#artwork-apis)\n- [Developer API \u0026 Customization](#developer-api--customization)\n- [Scalability \u0026 Caching](#scalability--caching)\n- [Requirements](#requirements)\n- [Documentation](#documentation)\n- [Links](#links)\n- [Credits](#credits)\n- [Support the Project](#support-the-project)\n\n---\n\n## Quick Start\n\n### Docker (recommended)\n```bash\ndocker run -d -p 80:80 jackyprahec/pawtunes:latest\n```\nThen visit `http://localhost/panel/` - login with `admin` / `password`.\n\n### Manual Upload\nUpload the release ZIP to your web server, then visit:\n```\nhttp://your-host.com/pawtunes/panel/\n```\nLogin: `admin` / `password`\n\nSee [Installation](#-installation) for detailed setup instructions.\n\n---\n\n## Demo \u0026 Screenshots\n\nExplore the live demo:\n- **Control Panel**: [https://prahec.com/projects/pawtunes/demo/panel/](https://prahec.com/projects/pawtunes/demo/panel/)  \n  **Username**: `admin`  \n  **Password**: `password`\n\n##### Default - PawTunes\n[![PawTunes default template with circular artwork and spectrum visualizer](https://cdn.prahec.com/projects/pawtunes/screens/20241129175123.png)](https://cdn.prahec.com/projects/pawtunes/screens/20241129175123.png)\n\n##### AIO Radio Player\n[![PawTunes AIO Radio Player template with multi-channel support](https://cdn.prahec.com/projects/pawtunes/screens/20241129175330.png)](https://cdn.prahec.com/projects/pawtunes/screens/20241129175330.png)\n\n##### HTML5 Radio Player\n[![PawTunes HTML5 Radio Player compact template](https://cdn.prahec.com/projects/pawtunes/screens/20241129175356.png)](https://cdn.prahec.com/projects/pawtunes/screens/20241129175356.png)\n\n##### Simple Template\n[![PawTunes Simple minimal radio player template](https://cdn.prahec.com/projects/pawtunes/screens/20241129175419.png)](https://cdn.prahec.com/projects/pawtunes/screens/20241129175419.png)\n\n##### Modern Light\n[![PawTunes Modern Light theme with ring visualizer and mobile-first design](https://cdn.prahec.com/projects/pawtunes/screens/modern-light.png)](https://cdn.prahec.com/projects/pawtunes/screens/modern-light.png)\n\n##### Modern Dark\n[![PawTunes Modern Dark theme with glassmorphism UI and animated gradient background](https://cdn.prahec.com/projects/pawtunes/screens/modern-dark.png)](https://cdn.prahec.com/projects/pawtunes/screens/modern-dark.png)\n\n---\n\n## Why PawTunes?\n\n| Feature | PawTunes | Typical Players |\n|---|---|---|\n| Multi-channel streaming | Unlimited channels | 1-3 channels |\n| Track info APIs | 7+ (Shoutcast, Icecast, AzuraCast, CentovaCast...) | 1-2 |\n| Artwork sources | Spotify, iTunes, LastFM, FanArt TV, Custom | iTunes only |\n| Caching | Redis, Memcached, APCu, Disk | None |\n| Docker support | Yes, with persistent volumes | Rare |\n| Self-hosted | Full control, no SaaS dependency | Often SaaS |\n| Templates | 6 included, fully customizable | 1 fixed layout |\n| WebSocket support | Built-in for live updates | Not available |\n| Artwork management | Auto-crop, optimize, cache | Pass-through only |\n| PHP backend | Full control panel with API integrations | JavaScript only |\n\n---\n\n## Features\n\n### Frontend\n- **Responsive Design**: Optimized for seamless performance on desktops, tablets, and mobiles.\n- **HTML5 Audio API**: Fully compatible with all major browsers, ensuring a consistent experience.\n- **Unlimited Multi-Channels**: Configure an unlimited number of channels per player.\n- **Multi-bitrate Streaming**: Users can select their preferred stream quality (optional).\n- **Multi-language Support**: Automatically adjusts based on browser locale.\n- **Dynamic Playlist Generation**: Create streaming playlists on the fly with PHP.\n- **Built-in WebSocket Support**: Ensures low-latency communication.\n- **Artwork Caching and Management**: Fetch and store images from APIs like Spotify, iTunes, and FanArtTV.\n- **Customizable Themes**: Includes multiple templates with the ability to create custom colour schemes.\n- **Dynamic Window Title**: Updates the browser window title dynamically based on the current track info.\n- **MediaInfoAPI**: Similar to YouTube, **PawTunes** displays artwork/track info on any Bluetooth device.\n- **Easy Customization**: With minimal development skills, you can tailor the front-end to your preferences.\n- **Stream History**: Track stream history for each channel using API data or generate it dynamically.\n- **Auto-Reconnect**: Automatically reconnects streams in case of browser disconnection or network errors.\n- **and much more...**\n\n### Backend\n- **PHP Backend**: Powers advanced features like track info, artwork management, API integrations, and more\n- **Caching Options**: Supports APCu, Redis, Memcached, and disk-based caching for high performance.\n- **Control Panel**: Manage all settings, templates, and tracks via an intuitive dashboard.\n- **API Support**: Integrates seamlessly with APIs like Spotify and FanArtTV for enhanced metadata (details below).\n- **Templates**: Use variables in HTML templates, with future support planned for the Blade templating engine.\n- **Advanced Template Options**: Add custom templates with metadata-driven options (e.g. enable/disable spectrum, song search URL and much more) see `metadata.json` in the template folders.\n- **and more...**\n\n### Track Info APIs\n- **Any stream** with embedded ICY-METADATA (used by most streams today).\n- **Shoutcast** (Public \u0026 Admin access).\n- **Icecast** (Admin access required).\n- **AzuraCast** (Web Sockets and API integration).\n- **Sam Broadcaster** (via database integration).\n- **CentovaCast** (Public widget API).\n- **Custom** (Use external APIs of your choice).\n\n### Artwork APIs\n- **iTunes**: Public API, no API key required.\n- **Spotify**: Public API, API key required.\n- **LastFM**: Public API, API key required.\n- **FanArt TV**: Public API, API key required.\n- **Custom**: Use your own sources, e.g., point to a folder or a URL like `https://page.com/{{$artist}}%20-%20{{$title}}.jpg`. You can also integrate with any other artwork service.\n\n---\n\n## Installation\nInstallation is straightforward in most cases, download the shared \"ZIP\" file and upload its contents to your web host.\nSince **PawTunes** is a standalone PHP script/app, you only need to upload the files to a folder of your choice and then access that folder using the following URL format:  \n`http://your-host.com/folder-name/panel/index.php`\n\n\u003e [!NOTE]\n\u003e Default Login Information  \n\u003e Username: **admin**  \n\u003e Password: **password**\n\nIf you encounter any issues during installation, please refer to the [Installation Guide](https://doc.prahec.com/pawtunes#installation) for detailed instructions.\n\nI also offer installation and customization services. For more details, feel free to reach out via the [Prahec - Contact Me](https://prahec.com/contact) page.\n\n### Docker\nThe easiest way to run **PawTunes** is with Docker.  \nYou can get started in seconds:\n```bash\ndocker run -d -p 80:80 jackyprahec/pawtunes:latest\n```\n\n#### Persisting Data\nTo keep your configuration and data across container updates, you should mount the following paths:\n\n- **/var/www/html/inc/config** - holds `general.php` and other config\n- **/var/www/html/inc/locale** - translations/locales\n- **/var/www/html/data** - holds artworks, cache, images\n\nExample:\n```bash\ndocker run \\\n  --name=pawtunes \\\n  -p 80:80 \\\n  -v /local/folder/config:/var/www/html/inc/config \\\n  -v /local/folder/locale:/var/www/html/inc/locale \\\n  -v /local/folder/data:/var/www/html/data \\\n  jackyprahec/pawtunes:latest\n```\n\nSince **PawTunes 1.0.7**, the `entrypoint.sh` script will automatically copy default config/locale/data files into empty volumes on first run.\n\nPawTunes includes an Nginx server by default, but for TLS/HTTPS you'll usually want to put it behind a reverse proxy (e.g. Traefik, NGINX Proxy Manager, Caddy, etc...).  \nYou _can_ modify the bundled Nginx config for TLS directly, but that's out of scope here.\n\n---\n\n## Developer API \u0026 Customization\n**PawTunes** is designed to be easily extended, upgraded, and customized.\nThe codebase is straightforward, well-commented, and structured for simplicity.\nFull documentation for all player classes and functions is coming soon.\nIn the meantime, you can find practical code examples for integrating the player into your website using the **External API (JSONP)** here:\n[Developer Documentation](https://doc.prahec.com/pawtunes#developers).\n\n#### Experimental feature: ICY Metadata\nFor years, reading ICY metadata directly in the browser seemed impossible without Web Assembly.\nNow, we're pushing the boundaries with an experimental implementation.\nIt's still a work in progress, currently in beta, and may not function on some mobile browsers or older environments.\nCheck out the demo and feel free to contribute or provide feedback: [Live ICY Metadata Demo](https://prahec.com/pawdemo/)\n\n---\n\n## Scalability \u0026 Caching\n- **High Performance**: Optimized to handle thousands of simultaneous listeners.\n- **Caching** using APC, APCu, Redis, Memcached, and Disk cache (can be on shared storage).\n- **Artwork Optimization**: Images are cropped, optimized, and stored on PawTunes for fast access. This feature can be disabled in the settings, using only direct API requests, which are also cached.\n\n---\n\n## Requirements\nPawTunes has minimal requirements to ensure smooth operation:\n- **PHP 7.4+** with CURL Extension.\n- **PHP ZipArchive Extension** (optional, for updates).\n- **Access to API Ports**: Ensure proper configuration for ports (e.g., Shoutcast uses port 8000 by default).\n\n---\n\n## Documentation\nComprehensive documentation is available at:\n- [PawTunes Official Docs](https://doc.prahec.com/pawtunes)\n\n---\n\n## Links\n\n- [Live Demo](https://prahec.com/projects/pawtunes/demo/panel/)\n- [Documentation](https://doc.prahec.com/pawtunes)\n- [Docker Hub](https://hub.docker.com/r/jackyprahec/pawtunes)\n- [Report Issues](https://github.com/Jackysi/pawtunes/issues)\n- [Contact](https://prahec.com/contact)\n\n---\n\n## Credits\n**PawTunes** would have taken even more time to develop without the incredible open-source projects that made it possible.\nHere's the list of libraries and projects used in the **Control Panel**:\n\n- **FontAwesome 6 Free**: [https://fontawesome.com/](https://fontawesome.com/)\n- **Bootstrap Modals**: [https://getbootstrap.com/docs/5.3/components/modal/](https://getbootstrap.com/docs/5.3/components/modal/)\n- **SCSS PHP Compiler**: For custom colour schemes [https://scssphp.github.io/scssphp/](https://scssphp.github.io/scssphp/)\n- **Spectrum**: For colour picking of templates [https://bgrins.github.io/spectrum/](https://bgrins.github.io/spectrum/)\n- **jQuery**: [https://jquery.com/](https://jquery.com/)\n\nThe player itself uses only one lightweight library:\n\n- **AudioMotion Analyser**: [https://www.npmjs.com/package/audiomotion-analyzer](https://www.npmjs.com/package/audiomotion-analyzer)\n\nIf I've missed crediting any library, please let me know, and I will update this list promptly.\n\n---\n\n## Support the Project\n**Donate \u0026 Support**\n\nThis project took an immense amount of effort to build. While it may not look like much,\nit represents over 5 months of initial (first release) full-time work and over a decade of experience developing similar apps and scripts.\nMy initial plan was to sell this as a product on Envato Market - CodeCanyon for 35$ (about 31€), but the review team permanently declined the project,\nso I decided to share this awesome project for free.\n\nAs this project is close to my heart, I will continue working on it for free. However,\nif you find it useful and want to support its ongoing development, any financial support would be greatly appreciated.\nIt would help cover costs (hosting) my effort and, of course, fund a coffee or two to keep me coding!\n\n[Donate via PayPal](https://www.paypal.com/donate/?hosted_button_id=VN3SBVYNHC2SE)\n\nI will also be extremely grateful for any help solving issues and/or improving my code for others.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackysi%2Fpawtunes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjackysi%2Fpawtunes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackysi%2Fpawtunes/lists"}