overview
What this thing
actually is
Firelet is a video player for Windows. It is open source, it has no ads and no paid tier, and it is built around one idea: the place a video lives should not change how you watch it. This page is the long version — every source, every number, and the parts that are not finished.
What Firelet is
A single window that plays what you point it at. Under it sits libmpv — the same engine mpv uses — with a Qt shell around it, which is why an unusual container or a broken file tends to play here when it does not elsewhere.
Around that engine is a Source Bridge: a loopback HTTP server that turns any provider — an SFTP session, a WebDAV account, a torrent swarm, a SOCKS proxy — into the seekable ranged-HTTP stream the demuxer already understands. That one piece is why a file on a server and a file on your desk behave the same: same seek bar, same subtitle handling, same resume, same playlist.
What it is not: Firelet has no catalogue, no channel directory, no content search, and no index of anybody's cameras. It ships no anonymity software and starts none. Every address it opens is one you supplied or one your own network answered with. That is a design line, not a legal disclaimer — it is why there is nothing here to subscribe to.
Formats and the engine
Playback is libmpv with a statically linked FFmpeg, so the format list is FFmpeg's: MKV, MP4, AVI, MOV, WebM, TS, M2TS, FLV, OGM, WMV and the rest of the containers; H.264, HEVC, AV1, VP9, VC-1, MPEG-2, ProRes and older codecs for video; AAC, AC-3, E-AC-3, DTS, TrueHD, Opus, Vorbis, FLAC, MP3 and PCM for audio; SRT, ASS/SSA, PGS, VobSub, WebVTT and closed captions for subtitles.
Hardware decoding uses d3d11va and is on by default; it is verified on
H.264. Audio device changes, drop-outs and driver hiccups are detected — if sound stops
while the picture keeps going, Firelet says so and offers to reconnect rather than
leaving you to work it out.
Opening a file while Firelet is already running reuses the existing window, and file-type associations are registered by the player itself, so the list of extensions lives in one place and uninstalling puts it back.
Everything it opens
| Source | How it behaves |
|---|---|
| Local files, USB, optical | Played directly. Opening one enqueues the folder around it. |
| SMB / UNC (\\host\share) | A path like any other — no drive letter, no local copy. |
| http(s), HLS, DASH, RTSP, FTP | Paste a URL. Format comes from the response, not the extension. |
| SFTP, FTPS, WebDAV | Saved sources, credentials optional and DPAPI-encrypted, streamed through the Source Bridge. |
| Magnet links and .torrent files | Opt-in, off by default. Sequential streaming with piece deadlines steered by the read position. |
| M3U, M3U8, PLS, XSPF, ASX, WPL | Channel lists and playlists, from a file or a URL. |
| Xtream Codes, Stalker / MAG | Your own portal subscriptions, with their categories and guide. |
| ONVIF, RTSP, MJPEG, USB cameras | Discovery by WS-Discovery, vendor path templates, or the webcam on this PC. |
| .onion, .i2p, .loki, Freenet | Through the client you already run on loopback. |
A torrent holding more than one video asks which to play, listing them in episode order with the largest preselected; junk beside the video never appears. All of its videos become the playlist, and each is remembered separately — leave in the middle of episode four and Continue watching comes back to episode four. Only the file you are watching is downloaded.
Playlists, IPTV and guides
Format is decided by content, never by extension. That matters most for
.m3u8: an HLS stream and an IPTV channel list share it, and only the
#EXT-X- tags tell them apart. HLS goes straight to the player; a channel list
is parsed here.
Extended-M3U attributes are kept. group-title becomes the category,
tvg-logo and tvg-id link the guide, and #EXTVLCOPT
reaches the player as per-file options — without the user-agent and referrer a list names,
a great many streams answer 403.
Past a dozen entries the panel grows a search box, a category filter and a sort: list order by default, since a curated list's order means something, then title, category or length. Live entries show LIVE; VOD shows its running time. Lists of 100,000 channels are the point of the design — parsing one takes about 280 ms and the view builds only the rows you can see.
XMLTV guides load automatically when a list names one, and each channel shows what is on now. Only a window around the present — six hours back, forty-eight forward — is kept, so a national guide costs a few megabytes rather than the hundred it is on disk.
Cameras
| Kind | What you enter | Notes |
|---|---|---|
| ONVIF | the address, and the login | The camera is asked for its own stream addresses, so there is no URL scheme to look up. Find cameras… probes the network and fills the rest in. |
| RTSP | the address, the make, the login | Templates for Hikvision (and its Annke/Swann/LTS clones), Dahua (Amcrest, Lorex, Imou), Axis, Reolink, TP-Link Tapo, Foscam, Vivotek and Uniview. Set Channels for a DVR/NVR and each channel becomes a row. |
| MJPEG | the address and path | For cameras older than RTSP — doorbells, baby monitors. |
| On this PC | pick from a list | A webcam or capture card, by the name Windows reports, optionally with a microphone paired to it. |
Discovery sends a WS-Discovery probe out of every interface this machine has — a desktop with a VPN adapter and two Hyper-V switches sends multicast out whichever the routing table prefers, which is regularly not the one the cameras are on. Discovery never crosses a subnet and many cameras ship with it turned off, so anything it misses is added by address.
Subtitles
Ctrl+F searches online and matches the release you are watching. Three keyless providers, so no API credential is ever shipped in the source.
| Provider | Covers | Notes |
|---|---|---|
| Addic7ed | TV | Plain .srt with release names, through the Gestdown proxy. |
| SubSource | Films and TV | ZIP downloads, release names, hearing-impaired flags. |
| OpenSubtitles | Films and TV | The biggest catalogue, but no release names — so it ranks last. The IMDb id is resolved through IMDb’s own keyless suggestion endpoint. |
Results are ranked by how many release tokens they share with your file — an exact
S01E02.1080p.WEB-DL match beats a popular mismatch. The feature is off until
you accept it once, and the dialog says exactly what is sent. Downloads land next to the
video as <video>.<lang>.srt so the player finds them by itself
next time; if that folder is not writable they go to the cache instead. Podnapisi was
dropped in August 2026 — its domain stopped publishing an A record, so it could not be
reached at all.
Privacy networks
Paste an .onion, .i2p, .loki or Freenet address and
it plays, through the client you already run: your Tor SOCKS port
(socks5h://127.0.0.1:9050), your I2P HTTP proxy
(http://127.0.0.1:4444), your Freenet gateway
(http://127.0.0.1:8888), or nothing at all for .loki, which
Lokinet routes and resolves itself.
Names are resolved by the proxy — socks5h, not
socks5 — so a hidden-service name never leaves through your resolver. There
is a switch to route every network source through Tor, and a separate one for torrent
traffic that is off with a warning on it: the peer protocol still hands your address to
the swarm, and the Tor Project asks people not to push bulk transfers through it.
The numbers
Measured on the development machine, not modelled. The ones that are not good are here too.
- Cold start
- 81 ms
- to a visible window (the target was 400 ms)
- Memory
- 177 MB
- while playing
- Player binary
- 350 KB
- firelet.exe itself
- Installer
- ~45 MB
- LZMA2, per-user, no admin prompt
- Installed runtime
- ~150 MB
- nearly all of it statically linked FFmpeg
- 100k-entry channel list
- ~280 ms
- to parse; only visible rows are built
- Hardware decode
- d3d11va
- verified on H.264
- 4K HEVC on an iGPU
- not yet measured
- needs a 4K HEVC sample and an iGPU laptop
Keyboard reference
- Space / K Play or pause
- F / double-click Fullscreen
- Esc Back to the default window
- ← / → Seek 5 seconds
- Shift + ← / → Seek 60 seconds
- Home Restart this one
- ↑ / ↓ / wheel Volume
- M Mute
- , / . Frame step
- [ / ] Speed down or up
- N / P Next or previous
- T Playlist panel
- PgUp / PgDn Previous or next chapter
- L A–B loop: mark A, mark B, clear
- Z / X Subtitle delay
- D Cycle deinterlace
- V Picture size: fit, fill, stretch, original
- I Playback info panel
- S / Ctrl + S Screenshot with or without subtitles
- Ctrl + O Open a file
- Ctrl + U Open a URL or network source
- Ctrl + Shift + U Saved sources
- Ctrl + Shift + C Cameras
- Ctrl + F Search subtitles online
- Ctrl + M Mini player
- Ctrl + , Settings
- Ctrl + . Stop everything, back to the start screen
- Ctrl + 1 / 2 / 3 Default window, cinema, fullscreen
- Media keys Play/pause, next, previous, stop
What it sends
Nothing, by default. There is no telemetry, no crash reporting, no account, no update ping that carries anything about you, and no analytics of any kind. The exceptions are all things you ask for, and all of them are listed here:
- Subtitle search — off until you accept it once. When on, a search sends the title, season, episode and language to the provider you are searching.
- The sources you open — a URL, a server, a portal or a magnet talks to exactly the host you gave it, and to the swarm in the torrent case.
- Camera discovery — a WS-Discovery probe on your own local network. It reaches no vendor cloud, no relay and no directory.
Credentials for servers and cameras are stored DPAPI-encrypted, and a camera password never appears in a title bar, a toast or a log — what is shown is the name you gave it. Cameras are deliberately kept out of Continue watching, because the address carries the password to a live picture of your home and the thumbnail would be a still of the room it points at.
Roadmap
Three states, and nothing dated — a date on an unfinished thing is a guess wearing a suit.
- now
Windows build in test
Phase 0 and the Phase 1 MVP are implemented and building: the frameless shell, transport, tracks and subtitles, playlist, resume, seek thumbnails, the Source Bridge and the opt-in torrent module.
- next
Public download and the Microsoft Store
A signed installer here, and the same build listed on the Store for people who would rather not download an installer from a website.
- next
Firelet Video for Android
The same sources — files, shares, servers, portals, cameras — on a phone and a tablet, on Google Play.
- next
Firelet Audio for Android
An audio player for the same library, with the same no-ads, no-account rules.
- later
A feature-trimmed FFmpeg build
The installed runtime is ~150 MB because FFmpeg is linked whole. Trimming it is the only way to make what sits on disk meaningfully smaller.
- later
The 4K HEVC power measurement
The Phase 0 exit criterion still open: under 15 % CPU on an integrated GPU. When it is measured, the number is published — pass or fail.
Licence
Firelet is free software. The application layer is GPL-2.0-or-later; the player and source layers are LGPL-2.1-or-later so they can be embedded in other software. Every source file carries an SPDX header matching its directory, and CI checks it.
The binary we distribute is a different question from the source, and the honest answer is stricter: it bundles a GPL-configured libmpv and FFmpeg, links Qt under LGPL v3, and contains Apache-2.0 components. That combination is GPLv3-effective, so the installer presents the GPLv3 and the licence texts and third-party notices ship beside the binary. Anyone who needs pure-LGPL terms pairs the LGPL directories with LGPL-configured builds of mpv and FFmpeg.
Contributions are accepted under the licence of the directory they touch, by DCO sign-off. There is no CLA — nobody is asked to sign their copyright over to anybody.