- π¬ 720p Β· 1080p Β· 4K β quality picker on every movie, sourced from YTS
- π₯ Rich catalogue homepage β Trending, Most Watched, New Releases, Box Office, Top Rated, Most Downloaded, Most Anticipated + 9 genre rows
- ποΈ 14 genre tabs β tap any genre for a full-screen filtered view
- πΌοΈ Category visual cards β genre thumbnails built from real movie posters
- π Live search β instant results dropdown as you type
βΆοΈ In-browser streaming β "Watch Now" plays the movie directly in the page via WebTorrent, no external app required- ποΈ Movie detail page β backdrop blur, cast circles, IMDb rating ring, trailer link, quality picker, similar movies grid
- β‘ Smart rate limiting β 3-tier system: image proxy unrestricted, search 30/min, API 600/15min
- π± Full PWA β installable, Background Sync, Periodic Sync, Push Notifications handler, auto-updates on deploy
- π² TWA / APK β native Android app via Digital Asset Links verification (no URL bar)
- π₯ In-browser install banner β shows only in browser, hidden automatically in PWA/TWA
- πΊοΈ Production SEO β JSON-LD knowledge graph, FAQPage schema, dynamic Open Graph, robots.txt with AI crawler allowlist, XML sitemap
- π SEO Blog β 8 articles targeting high-traffic movie download keywords
- π° Ad-monetized β Adsterra banners (320Γ50 between rows, 300Γ250 footer) + popunder on movie page
- π Deploy anywhere β Render, Railway, Fly.io, any Node.js host
SkyluxMovies/
βββ server.js # Express backend β YTS proxy, cache, sitemap, asset links
βββ package.json
βββ .env.example # Environment variable reference
βββ .gitignore
βββ README.md
βββ public/
βββ index.html # Homepage β hero, category tabs, genre rows, live search
βββ results.html # Search & browse results page
βββ movie.html # Movie detail β backdrop, cast, quality picker, trailer
βββ style.css # Global styles
βββ pwa.js # SW registration + Background Sync + Periodic Sync
βββ sw.js # Service worker β network-first HTML, SWR assets, push handler
βββ manifest.json # PWA manifest β full icon set, screenshots, shortcuts, share target
βββ robots.txt # Crawl rules β allows all crawlers + AI bots
βββ og-image.png # Open Graph preview image (1200Γ630)
βββ SkyluxMovies β Free HD Movies Download.apk # TWA Android app
βββ blog/
β βββ index.html # Blog listing page
β βββ free-hd-movie-download-no-account.html
β βββ watch-movies-online-free-no-signup.html
β βββ how-to-download-movies-to-phone.html
β βββ download-4k-movies-free.html
β βββ download-action-movies-free.html
β βββ how-to-stream-movies-free-splayer.html
β βββ best-free-movie-download-site-2025.html
β βββ movie-download-not-working-fix.html
βββ icons/
β βββ icon-72.png Β· icon-96.png Β· icon-128.png Β· icon-144.png
β βββ icon-152.png Β· icon-192.png Β· icon-384.png Β· icon-512.png
β βββ icon-maskable-192.png
β βββ icon-maskable-512.png
βββ screenshots/
βββ desktop.png # 1280Γ800 β PWA install banner (wide)
βββ mobile.png # 390Γ844 β PWA install banner (narrow)
git clone https://github.com/Advay254/AdvayFlick.git
cd AdvayFlicknpm installcp .env.example .envEdit .env:
SITE_URL=http://localhost:3000
PORT=3000npm start
# or for development with auto-reload:
npm run devVisit http://localhost:3000 β you're live. π
| Variable | Required | Description |
|---|---|---|
SITE_URL |
β Yes | Full production domain β used for sitemap and canonical URLs. Example: https://skyluxmovies.onrender.com |
PORT |
Auto | Set automatically by Render β do not set manually |
API_KEY |
Optional | If set, external API requests must include this key via ?key= or x-api-key header. Browser requests from your own domain bypass this automatically. |
β οΈ SITE_URLis the most critical variable. If missing, the sitemap and Digital Asset Links will reference the wrong domain.
- Push your code to GitHub
- Connect the repo on render.com
- Set Build Command:
npm install - Set Start Command:
npm start - Add
SITE_URLunder Environment Variables - Deploy
Render free tier sleeps after 15 minutes of inactivity. Use cron-job.org to ping
/api/healthevery 10 minutes to keep it awake.
npm install -g @railway/cli
railway login && railway init && railway upAdd SITE_URL in the Railway dashboard β Variables.
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
git clone https://github.com/Advay254/AdvayFlick.git
cd AdvayFlick && npm install
npm install -g pm2
pm2 start server.js --name skyluxmovies
pm2 save && pm2 startupUser opens SkyluxMovies
β
Homepage loads parallel fetches (trending, most watched, new, box office)
Genre rows stream in with 350ms stagger (prevents YTS rate limiting)
β
User searches or taps a movie card
β
GET /api/movie/:id
β Server checks in-memory cache (6hr TTL)
β Cache miss: fetches YTS movie_details with cast + images
β Rewrites all YTS image URLs to /api/img?u= proxy
β Returns proxied JSON to client
β
Movie detail page renders
β Backdrop blur, poster, cast circles, IMDb ring, genres, synopsis
β Quality picker shows available torrents (720p / 1080p / 4K)
β Tapping a quality triggers SPlayer magnet link intent
β Trailer button opens YouTube directly (avoids embed Error 153)
β Similar movies in 3-column grid (18 titles)
β
Watch Now β in-browser WebTorrent player (streams in the page, no app)
Download β magnet link handed to whatever torrent app is on the device
Why image proxy? YTS CDN applies hotlink protection. The
/api/img?u=proxy strips the Referer header server-side, bypassing the block reliably. The proxy acceptsyts.bz,yts.mx, andimg.yts.mxmirror domains.
| Endpoint | TTL | Reason |
|---|---|---|
/api/search |
10 min | Search results change often |
/api/trending, /api/watched, /api/new, /api/boxoffice, /api/anticipated |
2 hr | Updated daily by YTS |
/api/toprated, /api/popular |
2 hr | Stable high-traffic lists |
/api/movie/:id |
6 hr | Movie metadata rarely changes |
/api/suggestions/:id |
4 hr | Suggestion list changes slowly |
/api/img |
24 hr | Image bytes never change |
Three-tier rate limiting β tuned so normal browsing never hits a limit:
| Tier | Endpoints | Limit |
|---|---|---|
| Unrestricted | /api/img (image proxy) |
No limit β 24hr cached, one real fetch per image |
| Search | /api/search |
30 req / min β scrape protection |
| API | All other /api/ routes |
600 req / 15 min per IP |
Additional protections:
- Server-side image proxy β real YTS CDN URLs never exposed to the browser
- Optional API key β protect endpoints from external scrapers
- Hardened HTTP headers β via
helmet(XSS, clickjacking, MIME sniffing protection) - Digital Asset Links β TWA verified via
/.well-known/assetlinks.jsonso the Android app runs without a URL bar
The included APK is a Trusted Web Activity wrapping the SkyluxMovies PWA. Key details:
- Package name:
com.onrender.skyluxmovies.twa - Asset links: served at
/.well-known/assetlinks.jsonβ required for URL bar removal - Signing key: kept separately in
signing.keystore(not committed to repo) - In-browser install banner: shown automatically to browser users, hidden in PWA/TWA mode via
matchMedia('(display-mode: standalone)')
SkyluxMovies ships with production-grade SEO:
- JSON-LD knowledge graph β
Organization,WebSite,WebPage, andMovieentities - FAQPage schema β eligibility for Google AI Overviews and rich results
- Movie schema β title, year, genre, rating, runtime, language per movie page
- Dynamic Open Graph β title, description, and poster update after each movie loads
- robots.txt β explicit
Allowfor GPTBot, ClaudeBot, and PerplexityBot (GEO) - XML sitemap at
/sitemap.xmlβ includes all pages + all 8 blog articles - Canonical URLs on every page
- SEO Blog β 8 long-form articles targeting high-volume keywords
Submit sitemap to Google Search Console:
https://skyluxmovies.onrender.com/sitemap.xml
Target keywords: free movie download no account Β· download HD movies free Β· watch movies online free no sign up Β· free 4K movie download Β· download action movies free Β· stream movies free SPlayer
- Added a quality selector inside the player overlay itself. You can now switch between 720p/1080p/4K mid-stream without closing the player β it tears down the current torrent and starts the new one in place.
- Switching quality also keeps the page's own quality picker (the one below the poster) in sync, so if you close the player afterward, it reflects whatever quality you ended up watching.
- Picking a quality with 0 seeds in the in-player selector is now rejected with a toast instead of silently starting a dead stream, and the selector reverts to the quality that's actually playing.
- Progress readout now also shows downloaded size vs. total size (e.g. "340 MB of 2.1 GB"), not just percentage/speed/peers.
- Added a stall hint: if 15+ seconds pass with 0 peers and under 2% progress, a message appears suggesting a different quality. It clears automatically once peers show up.
_fmtBytesnow handles gigabyte-scale numbers properly (previously topped out at MB formatting).- Internal: the progress ticker now checks it's still ticking for the current torrent before updating the UI, so a rapid quality switch can't have an old timer overwrite the new stream's numbers.
- Flagged, not changed: same version-lineage note as v4.1.0 β carried forward.
- Not tested: same real-network caveat as v4.1.0 β real peer-to-peer playback and real quality-switch-under-load weren't tested (no tracker/peer access in this sandbox). What was tested for real: the full quality-switch state machine (open with N qualities β switch β old client destroyed β new stream starts with correct hash β page picker synced; 0-seed quality rejected and selection reverts) against the exact shipped code via jsdom, plus a full re-run of all Chunk 1 tests against this version to confirm no regressions. Server boot + HTTP checks also re-run clean.
- Added a WebTorrent-based player directly in
movie.html. The Watch Now button (previously "Stream") now opens a full-screen overlay and plays the movie in the browser β no SPlayer or other external app needed. - Download is unchanged: it still hands the magnet link to whichever torrent app is on the device.
- Back button / back gesture closes the player (wired through
history.pushState+popstate) instead of leaving the app. - If the device's browser doesn't support MediaSource Extensions, the player falls back to a blob-URL download-then-play approach automatically.
- WebTorrent's library is lazy-loaded from a CDN only when Watch Now is tapped, so page weight is unaffected for people who only download.
- SPlayer guide and copy updated to describe it as the download path only, not the only way to watch.
- Flagged, not changed:
README.md's version badge said v4.0.0 whilepackage.jsonsaid 3.0.0. Per your rule, the higher number (4.0.0) was treated as current and this release bumped to 4.1.0 β confirm that's the version lineage you want. - Flagged, not changed: your delivery instructions say to root the zip under a folder named
SkyluxMoxies/, but the actual repo/package is namedAdvayFlick/skyluxmovies. This delivery usesSkyluxMoxies/as instructed β tell me if you'd rather it match the real repo name going forward. - Known gap (v4.1.0):
GET /api/suggestions/:idreturns a 500 for an invalid id instead of a handled 4xx (pre-existing, not introduced by this change β found during error-path testing). - Known gap (v4.1.0): unmatched static routes (e.g. a typo'd
.htmlpath) return 200 instead of a 404 (pre-existing Express static behavior, not introduced by this change). - Not tested: real peer-to-peer playback on an actual phone/TV browser and actual magnet hashes with live seeders β my sandbox has no outbound network access to trackers/peers. What was tested for real: the server boots, every route returns the right status code under real HTTP requests (including the error paths above), and the full player state machine (open β buffering β playing β progress updates β close, plus the back-button and MSE-unsupported fallback paths) against the exact code shipped, using jsdom with WebTorrent's network layer mocked out.
- Fork the repo
- Create your branch:
git checkout -b feature/your-feature - Commit:
git commit -m 'Add your feature' - Push:
git push origin feature/your-feature - Open a Pull Request
SkyluxMovies is an independent open-source project and is not affiliated with, endorsed by, or connected to YTS, YIFY, or any movie studio in any way.
This tool indexes publicly available torrent metadata. Users are responsible for complying with copyright laws in their country. Always respect the work of filmmakers and content creators.
MIT Β© 2026 Advay β free to use, modify, and distribute.
If SkyluxMovies saved you time, drop a β β it helps others find the project.
