π Visual Showcase: Check out the PulsorClip Preview Gallery to see the UI.
| Light Mode | Dark Mode |
|---|---|
![]() |
![]() |
PulsorClip is a self-hosted media download and export workspace by Adriel Zimbril.
- π Web Workspace: β 100% Functional
- π€ Telegram Bot: β 100% Functional
- π₯οΈ Desktop (Native): ποΈ In Progress (Tauri)
- π± Mobile (Native): ποΈ In Progress (Capacitor)
PulsorClip gives you a controlled workflow for media downloads:
- load a media URL first
- choose mode, container, and quality
- prepare the file on your own runtime
- download only when the final file is actually ready
It is built for self-hosting, not for running a public downloader SaaS.
- keep downloads explicit instead of automatic
- load media details before processing
- support browser and Telegram workflows from the same codebase
- stay portable enough to run on a single Docker service
- βοΈ Next.js 16 App Router web app
- π€ Telegram bot with guided download flow
- π Cookie-based i18n with
enandfr - π Light, dark, and system themes
- π¦ Video exports:
mp4,webm,mkv - π΅ Audio exports:
mp3,m4a - π§± Shared
yt-dlpplusffmpegcore package - π Server-side progress tracking with manual final download
- π Dedicated web pages for
FAQ,Docs, andDeployment
apps/web- Next.js 16 App Router
- cookie-based i18n
- responsive Normal and Bulk workflows
- FAQ, Docs, and Deployment pages
apps/bot- Telegram bot with commands, inline keyboards, and admin notifications
- maintenance mode support
- guided mode, container, and quality selection
packages/coreyt-dlpandffmpegorchestration- shared validation, progress, and i18n messages
PulsorClip requires:
- Node.js
22+ yt-dlpffmpeg
For YouTube and some protected sources, authenticated cookies may also be required.
npm install
npm run dev:web
npm run dev:botUseful commands:
npm run lint
npm run test
npm run build
npm start
npm run start:web
npm run start:botNotes:
npm startlaunches the combined runtime viastart:all- for web-only local work, set
TELEGRAM_BOT_ENABLED=false - startup admin notifications only work if each admin account has already opened a private chat with the bot
- use
PULSORCLIP_DEBUG_LOGS=truewhen diagnosing extractor failures on YouTube, Threads, Facebook, X, TikTok, or Instagram
.env- your local runtime file
.env.example- documented local template
Important variables:
NEXT_PUBLIC_APP_URLPULSORCLIP_DEBUG_LOGSPULSORCLIP_LOG_FULL_URLSTELEGRAM_BOT_ENABLEDTELEGRAM_BOT_TOKENTELEGRAM_BOT_USERNAMETELEGRAM_ADMIN_IDSTELEGRAM_MAINTENANCE_MODEYTDLP_COOKIES_FROM_BROWSERYTDLP_COOKIES_FILEYTDLP_COOKIES_BASE64PULSORCLIP_DAILY_REPORT_ENABLEDPULSORCLIP_DAILY_REPORT_HOURPULSORCLIP_HEALTH_CHECK_CADENCE_MINS
For YouTube and other protected platforms, PulsorClip supports multiple cookie management methods:
Admins can update cookies directly via Telegram using base64:
/cookies <base64-encoded-cookies>
Steps:
- Export cookies from your browser using "Get cookies.txt" or "Cookie-Editor"
- Generate base64:
npm run encode-cookies ./cookies.txt ./cookies-base64.txt - Copy the base64 string from cookies-base64.txt
- Send
/cookies <base64-string>in Telegram
The cookies are stored in the metadata system and automatically used by both bot and web downloads.
For local development or manual setup:
npm run encode-cookies ./cookies.txt ./cookies-base64.txtThis encodes your cookies.txt to base64. Set YTDLP_COOKIES_BASE64 to the base64 string value.
YTDLP_COOKIES_FROM_BROWSER=chrome- Extract from local browser (dev only)YTDLP_COOKIES_FILE=/path/to/cookies.txt- Path to cookies fileYTDLP_COOKIES_BASE64=<base64>- Base64 encoded cookies (best for VPS)
See docs/YOUTUBE-COOKIES.md for detailed instructions.
- `PULSORCLIP_DEBUG_LOGS`: `true`.
- CapRover: Detection of
captain-definitionis automatic. - Cloudron: Use
cloudron install. Data is persisted in/app/data. - Coolify/Dokploy: Standard Docker deployment on port
10000.
For detailed instructions, see docs/self-hosting.md.
Current default target: Railway free Web Service with one Docker runtime for both web and bot.
Why this topology:
- avoids paid background workers
- keeps one deployable unit
- still supports Telegram polling and file preparation
Important limitation:
- free-tier storage is ephemeral, so prepared files can disappear after restart or redeploy
If you see this Telegram error:
409 Conflict: terminated by other getUpdates request
another polling instance is already running with the same bot token. Keep only one polling instance active, or disable the local bot with TELEGRAM_BOT_ENABLED=false.
Web pages included in the app:
/faq/docs/deployment
Repository docs:
/start- Start the guided download flow/language- Choose your preferred language/help- Show commands and usage examples/video <url>- Download video from a URL/audio <url>- Download audio from a URL/track <job_id>- Track a specific job status/support- Get help or contact the operator/status- View Bot services availability/queue- View your active jobs and queue
/status- View Bot & Web live counters/server- Detailed server diagnostics/health- Send health snapshot to admins/report- Current daily statistics/daily- Trigger daily report/broadcast- Message all bot users/users- User base statistics/cookies- Manage yt-dlp cookies (update via Telegram)
Community files:
GitHub Actions validation is included:
- lint
- unit tests
- build
| Platform | Status | Extraction Method |
|---|---|---|
| Threads | β Stable | Custom JSON Scraper (up to 1280p) |
| TikTok | β Stable | Tikwm API + Carousel Fallback |
| β Stable | yt-dlp + direct CDN fallback |
|
| β Stable | yt-dlp |
|
| X / Twitter | β Stable | yt-dlp |
| YouTube | Stable locally. "Sign in to confirm" errors common on VPS/Datacenter IPs. Use authenticated cookies to bypass. |
PulsorClip is an educational and research project.
It is designed to explore media extraction concepts and self-hosting architectures. The author(s) do not encourage or condone the unauthorized downloading, distribution, or storage of copyrighted material.
- User Responsibility: Users are solely responsible for their actions and must ensure compliance with the terms of service of the target platforms and local copyright laws (DMCA, etc.).
- Notice: This software is provided "as is", without warranty of any kind. The authors are not responsible for any legal consequences or liability arising from the use or misuse of this software.

