{"id":37349770,"url":"https://github.com/vjdev1212/torrtv","last_synced_at":"2026-01-16T04:01:08.717Z","repository":{"id":327792972,"uuid":"1110751769","full_name":"vjdev1212/torrtv","owner":"vjdev1212","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-14T18:14:48.000Z","size":80,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-17T03:13:37.540Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vjdev1212.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-12-05T17:02:06.000Z","updated_at":"2025-12-16T15:20:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vjdev1212/torrtv","commit_stats":null,"previous_names":["vjdev1212/torrtv"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vjdev1212/torrtv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjdev1212%2Ftorrtv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjdev1212%2Ftorrtv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjdev1212%2Ftorrtv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjdev1212%2Ftorrtv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vjdev1212","download_url":"https://codeload.github.com/vjdev1212/torrtv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjdev1212%2Ftorrtv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"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":[],"created_at":"2026-01-16T04:01:07.848Z","updated_at":"2026-01-16T04:01:08.702Z","avatar_url":"https://github.com/vjdev1212.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TorrTV\n\nA simple IPTV wrapper for TorrServer that generates M3U8 playlists compatible with most IPTV players.\n\n## Why?\n\nTorrServer's native playlist endpoint is not compatible with most IPTV players. TorrTV bridges this gap by providing standard M3U8 playlists.\n\n## Quick Start\n\n### Docker Compose\n\n```yaml\nname: 'torrtv'\nversion: '3'\nservices:\n  torrtv:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    image: vjdev1212/torrtv:latest\n    container_name: torrtv\n    ports:\n      - \"3000:3000\"\n    environment:\n      - PORT=3000\n      - TORRSERVER_URL=http://192.168.1.10:5665\n      - HOST=0.0.0.0\n    restart: always\n```\n\nRun with:\n```bash\ndocker-compose up -d\n```\n\n## Environment Variables\n\n- `PORT` - Server port (default: 3000)\n- `TORRSERVER_URL` - Default TorrServer URL (default: http://192.168.1.10:5665)\n- `HOST` - Server host (default: 0.0.0.0)\n\n## API Endpoints\n\n- `GET /torrents` - List all torrents\n- `GET /torrents/:hash` - Get single torrent\n- `GET /playlist/all` - M3U playlist for all torrents\n- `GET /playlist/:hash` - M3U playlist for specific torrent\n\n## Dynamic TorrServer URL\n\nTorrTV supports dynamic TorrServer URL configuration using the `url` query parameter. This allows you to generate playlists for different network environments without changing the server configuration.\n\n### Usage\n\nAdd `?url=\u003ctorrserver-url\u003e` to any endpoint:\n\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://torrserver-url:5665\n```\n\n### Environment-Specific Examples\n\n#### 1. **Home/LAN Network**\nWhen accessing from your local network:\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://192.168.1.10:5665\n```\n\n#### 2. **VPN Access**\nWhen connected via VPN with internal IP:\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://10.8.0.5:5665\n```\n\n#### 3. **Tunnel (Cloudflare/Ngrok)**\nWhen accessing through a tunnel service:\n```\nhttp://192.168.1.10:3000/playlist/all?url=https://mytorrserver.example.com\n```\n\n#### 4. **Internet/Public Access**\nWhen accessing from external network with port forwarding:\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://123.45.67.89:5665\n```\n\n#### 5. **Domain Name**\nWhen using a custom domain:\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://torrserver.mydomain.com:5665\n```\n\n### Complete Endpoint Examples\n\n#### All Torrents with Custom URL\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://custom-torrserver:5665\n```\n\n#### Specific Torrent with Custom URL\n```\nhttp://192.168.1.10:3000/playlist/{hash}?url=http://custom-torrserver:5665\n```\n\n#### Get Torrents List with Custom URL\n```\nhttp://192.168.1.10:3000/torrents?url=http://custom-torrserver:5665\n```\n\n### Alternative: Using HTTP Header\n\nYou can also pass the TorrServer URL via HTTP header:\n\n```bash\ncurl -H \"X-TorrServer-URL: http://custom-torrserver:5665\" \\\n  http://192.168.1.10:3000/playlist/all\n```\n\n### Priority Order\n\nThe TorrServer URL is determined in this order:\n1. Query parameter `?url=`\n2. HTTP header `X-TorrServer-URL`\n3. Environment variable `TORRSERVER_URL`\n\n## Use Cases\n\n### Multi-Environment Setup\n\nCreate different playlist URLs for different scenarios:\n\n**At Home:**\n```\nhttp://torrtv.local:3000/playlist/all?url=http://torrserver.local:5665\n```\n\n**On Mobile (VPN):**\n```\nhttp://torrtv.local:3000/playlist/all?url=http://10.8.0.5:5665\n```\n\n**Away from Home (Tunnel):**\n```\nhttp://torrtv.myserver.com:3000/playlist/all?url=https://torrserver-tunnel.myserver.com\n```\n\n### IPTV Player Configuration\n\nAdd the appropriate playlist URL to your IPTV player based on your current network:\n\n**TiviMate Example:**\n- Home: `http://192.168.1.10:3000/playlist/all?url=http://192.168.1.10:5665`\n- Away: `http://myserver.com:3000/playlist/all?url=https://tunnel.myserver.com`\n\n## Basic Usage\n\nAdd the playlist URL to your IPTV player:\n\n**Default TorrServer (from environment):**\n```\nhttp://192.168.1.10:3000/playlist/all\n```\n\n**Custom TorrServer URL:**\n```\nhttp://192.168.1.10:3000/playlist/all?url=http://your-torrserver:5665\n```\n\nOr use a specific torrent:\n```\nhttp://192.168.1.10:3000/playlist/{hash}?url=http://your-torrserver:5665\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvjdev1212%2Ftorrtv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvjdev1212%2Ftorrtv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvjdev1212%2Ftorrtv/lists"}