DownVid
1000개 이상의 사이트를 지원하고, 인터페이스가 간결하며 macOS·Windows·Linux에서 모두 사용 가능
BitTorrented는 DHT에서 토렌트를 찾아 브라우저로 바로 스트리밍합니다
More than a tracker: BitTorrented finds torrents on the DHT, streams them in your browser as they arrive, and runs seedboxes that download and seed for you. Invite only.
미디어TypeScript · PLpgSQLGitHub @profullstack온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A comprehensive multi-media streaming platform that allows users to stream music, movies, books, and live TV from torrents and IPTV sources - without downloading content until playback.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A comprehensive multi-media streaming platform that allows users to stream music, movies, books, and live TV from torrents and IPTV sources - without downloading content until playback.
git clone https://github.com/your-org/bittorrented.git
cd bittorrented
pnpm install
cp .env.example .env.local
Edit .env.local with your credentials:
# Supabase
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
SUPABASE_ANON_KEY=your-anon-key
# Metadata APIs
THETVDB_API_KEY=your-thetvdb-key
OMDB_API_KEY=your-omdb-key
# CoinPayPortal (for payments)
COINPAYPORTAL_MERCHANT_ID=your-merchant-id
COINPAYPORTAL_API_KEY=your-api-key
pnpm dev
Open http://localhost:3000 in your browser.
| Command | Description |
|---|---|
pnpm dev | Start development server |
pnpm build | Build for production |
pnpm start | Start production server |
pnpm test | Run tests in watch mode |
pnpm test:run | Run tests once |
pnpm test:coverage | Run tests with coverage |
pnpm lint | Run ESLint |
pnpm typecheck | Run TypeScript type checking |
bittorrented/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # API routes (server-side only)
│ │ │ ├── library/ # Library API (favorites, collections, history)
│ │ │ ├── iptv/ # IPTV API (channels, playlists, subscriptions)
│ │ │ ├── auth/ # Authentication API
│ │ │ ├── payments/ # Payment processing API
│ │ │ └── stream/ # Streaming API
│ │ ├── library/ # My Library page (server-rendered)
│ │ ├── live-tv/ # Live TV page
│ │ ├── podcasts/ # Podcasts page
│ │ ├── layout.tsx # Root layout
│ │ └── page.tsx # Home page
│ ├── components/ # React components
│ │ ├── layout/ # Layout components (sidebar, header)
│ │ ├── torrents/ # Torrent-related components
│ │ ├── live-tv/ # Live TV components (HLS player)
│ │ ├── media/ # Media player components
│ │ └── ui/ # UI primitives
│ ├── lib/ # Utility functions and services
│ │ ├── supabase/ # Supabase client (server-side only)
│ │ ├── library/ # Library repository (favorites, collections, history)
│ │ ├── iptv/ # IPTV services (M3U parser, playlist cache)
│ │ ├── iptv-proxy/ # IPTV proxy for HLS rewriting
│ │ ├── podcasts/ # Podcast services
│ │ ├── torrent/ # Torrent services
│ │ ├── streaming/ # Streaming services
│ │ ├── magnet/ # Magnet URL parsing
│ │ ├── payments/ # Payment processing
│ │ └── indexer/ # File indexing
│ ├── hooks/ # React hooks
│ └── types/ # TypeScript types
├── public/ # Static assets
├── supabase/ # Supabase migrations
└── plans/ # Implementation plans
This project follows Test-Driven Development (TDD). Tests are written first, then implementation.
# Run tests in watch mode
pnpm test
# Run tests once
pnpm test:run
# Run tests with coverage
pnpm test:coverage
We use a DigitalOcean Droplet instead of App Platform because App Platform doesn't support UDP, which is required for DHT (Distributed Hash Table) peer discovery in BitTorrent.
Quick Start:
# 1. SSH into your Droplet
ssh root@YOUR_DROPLET_IP
# 2. Run the setup script
curl -fsSL https://raw.githubusercontent.com/profullstack/music-torrent/main/scripts/setup-droplet.sh | bash
# 3. Setup SSL
certbot --nginx -d yourdomain.com -d www.yourdomain.com
What the setup script does:
GitHub Actions auto-deploy:
main branch triggers automatic deploymentDROPLET_HOST - Droplet IP address or hostnameDROPLET_USER - SSH username (e.g., ubuntu)DROPLET_SSH_KEY - Private SSH key for authenticationENV_FILE - Contents of .env file for productionDROPLET_PORT - SSH port (defaults to 22 if not set)See docs/deployment-droplet.md for detailed instructions.
MIT