PulsorClip is designed to be easily deployed on various platforms. Below are specific instructions for common self-hosting environments.
- Push your code or connect your GitHub.
- CapRover will automatically detect the
captain-definitionin the root. - Ensure you set the mandatory environment variables (see
.env.example).
- Install the Cloudron CLI:
npm install -g cloudron. - Run
cloudron install --location <your-location>. - The
CloudronManifest.jsonhandles the port (10000) and persistent data volume at/app/data.
- Click + New Resource in your project.
- Select Service or Docker Compose.
- Point to your repository or paste the content of
docker-compose.yml. - Coolify will automatically map the ports and volumes.
- Set your
TELEGRAM_BOT_TOKENin the Environment Variables tab.
- Create a new project and select Compose or App.
- If using Compose, point to the
docker-compose.ymlfile in your repo. - If using App, select the Dockerfile build type and set the port to
10000. - Don't forget to mount
/app/data/downloadsto a persistent volume in the Mounts tab.
- Open your VPS Dashboard and go to Docker Manager.
- Select Compose and choose GitHub/Git.
- Paste your repository URL:
https://github.com/adrielzimbril/pulsorclip. - Hostinger will pull the
docker-compose.ymland handle the build. - Don't forget to configure your environment variables in the manager.
If you want to ensure the daily report is sent even if the bot is in sleep mode:
- Use Railway Cron Jobs.
- Command:
npm run cron:report(See package.json updates).
| Variable | Description | Default |
|---|---|---|
NEXT_PUBLIC_APP_URL |
Public web URL of your instance | http://localhost:10000 |
TELEGRAM_BOT_TOKEN |
Your Telegram Bot Token from @BotFather | (Required) |
TELEGRAM_ADMIN_IDS |
Comma-separated list of IDs to receive reports | (Required) |
PULSORCLIP_DAILY_REPORT_ENABLED |
Enable daily admin summary | true |
PULSORCLIP_DAILY_REPORT_HOUR |
UTC Hour for reports (0-23) | 0 |
TELEGRAM_BOT_USERNAME |
Your bot's @username | pulsorclip_bot |
PULSORCLIP_DOWNLOAD_DIR |
Path to persistent storage | /app/data/downloads |
PULSORCLIP_DEBUG_LOGS |
Enable verbose logging | true |
TELEGRAM_UPLOAD_LIMIT_MB |
Maximum file size for bot uploads | 45 |
YTDLP_COOKIES_BASE64 |
Base64 encoded cookies.txt for YouTube | (Optional) |
YTDLP_COOKIES_FILE |
Path to cookies.txt file | (Optional) |
YTDLP_COOKIES_FROM_BROWSER |
Browser to extract cookies from (chrome/firefox) | (Optional) |
For YouTube and other protected platforms, you may need to configure cookies.
For VPS deployments, use the /cookies admin command in Telegram with base64:
- Install "Get cookies.txt" or "Cookie-Editor" browser extension
- Log into YouTube on your PC
- Export cookies in Netscape format
- Generate base64 using the encode script:
npm run encode-cookies ./cookies.txt ./cookies-base64.txt
- Copy the base64 string from cookies-base64.txt
- Send:
/cookies <base64-string>
This stores cookies in the metadata system and works for both bot and web downloads.
Encode Script (for manual setup):
npm run encode-cookies ./cookies.txt ./cookies-base64.txtThen set YTDLP_COOKIES_BASE64 to the base64 string value.
Environment Variables:
YTDLP_COOKIES_BASE64- Base64 encoded cookies (best for VPS)YTDLP_COOKIES_FILE- Path to cookies.txt fileYTDLP_COOKIES_FROM_BROWSER- Extract from browser (dev only)
See docs/YOUTUBE-COOKIES.md for detailed instructions.