Simple all-in-one online tools built with Next.js.
Toolora lets anyone:
- Download publicly accessible media from supported platforms
- Shorten long URLs
- Convert PDF pages to JPG/PNG images
No accounts. No dashboard.
- Node.js 20+
- npm
- yt-dlp — bundled via
youtube-dl-exec(or install system-wide) - FFmpeg — bundled via
ffmpeg-static(or setFFMPEG_PATH/ install system-wide)
# On Windows, if youtube-dl-exec complains about Python:
# set YOUTUBE_DL_SKIP_PYTHON_CHECK=1
npm install
cp .env.example .env.localnpm run devOpen http://localhost:3000.
npm run typecheck
npm run lint
npm run test
npm run build
# Live downloader test against a public URL
npm run test:downloader -- "https://www.youtube.com/watch?v=jNQXAC9IVRw"See .env.example.
| Variable | Default | Purpose |
|---|---|---|
NEXT_PUBLIC_SITE_URL |
http://localhost:3000 |
Base URL for short links |
MAX_IMAGE_SIZE_MB |
20 |
Max image upload size |
MAX_PDF_SIZE_MB |
50 |
Max PDF upload size |
MAX_PDF_PAGES |
30 |
Max pages per conversion |
MAX_AUDIO_SIZE_MB |
100 |
Max audio upload size |
MAX_VIDEO_SIZE_MB |
500 |
Max video upload size |
MAX_DOWNLOAD_SIZE_MB |
500 |
Max downloader output file size |
RATE_LIMIT_WINDOW_MS |
60000 |
Rate-limit window |
RATE_LIMIT_MAX |
20 |
Max requests per window |
FFMPEG_PATH |
(auto) | Optional FFmpeg binary override |
TEMP_DIR |
OS temp | Optional temp directory |
| Tool | UI | API |
|---|---|---|
| Media Downloader | /downloader |
POST /api/downloader, POST /api/downloader/download |
| URL Shortener | /shortener |
POST /api/shorten, redirect GET /go/[id] |
| PDF → Images | /pdf-to-image |
POST /api/pdf-to-image |
Works out of the box after npm install:
youtube-dl-execprovidesyt-dlpffmpeg-staticprovides FFmpeg for merges / MP3
Recommended for production media processing:
- Keep the Next.js UI
- Run API + yt-dlp + FFmpeg on a persistent Node host
- Or point the
DownloaderProviderto an external worker
- Frontend + shortener + lightweight APIs: OK
- Long video downloads / FFmpeg merges: not ideal on serverless timeouts
- Swap
YtDlpProviderfor an external processing service without changing the UI
YouTube (watch / youtu.be / Shorts), TikTok, Instagram, Facebook, X/Twitter, Reddit, Pinterest.
Private, DRM-protected, paywalled, or login-gated content is rejected.
DownloaderProvider interface → YtDlpProvider implementation.
- URL normalization + redirect resolution
- Dynamic format discovery (no hardcoded qualities)
- FFmpeg merge when video/audio streams are separate
- Retries for transient network/extractor failures
- Temp files cleaned in
finally
Persists to data/short-links.json (survives restarts).
For multi-instance production, replace src/lib/shortener/store.ts with Postgres/Supabase/Redis.
Validates magic bytes, renders with pdfjs-dist + @napi-rs/canvas, encodes with sharp, returns ZIP via jszip.
Follow these steps to submit and monitor Toolora in Google Search Console:
- Open Google Search Console: Go to search.google.com/search-console.
- Add Property: Select URL prefix and enter your production URL (e.g.
https://toolora.com). - Verify Ownership:
- Copy the verification code from the
<meta name="google-site-verification" content="..." />HTML tag option. - Set the
NEXT_PUBLIC_GOOGLE_SITE_VERIFICATIONenvironment variable in your.env.local/ production environment:NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION=your_code_here
- Deploy your site and click Verify in Google Search Console.
- Copy the verification code from the
- Open Sitemaps: In the left sidebar, click Sitemaps.
- Submit Sitemap: Enter
sitemap.xmland click Submit. - URL Inspection: Use the URL Inspection tool to inspect your main pages (
/,/downloader,/tools/pdf-to-word, etc.) and click Request Indexing. - Monitor Performance: Regularly check Search Console for:
- Queries, impressions, clicks, CTR, and average position
- Indexing status and coverage errors
- Core Web Vitals and mobile usability metrics
Note: Google Search Console is a monitoring and diagnostic tool. Indexing decisions are made autonomously by Google's crawler.
npm run build
npm run startPrivate / all rights reserved unless otherwise specified.