FastPlay is a keyboard-first Windows video player for fast local playback, smooth scrubbing, and ergonomic control across monitors.
It is intentionally focused on local playback. No media library. No plugin maze. No feature sprawl. Just fast open, clean playback, responsive controls, and a tighter Windows-native experience.
Download FastPlay v0.4.1 for Windows x64 • All releases • Report an issue
Current status: early release, actively improving playback speed, seek feel, and UI polish on Windows x64.
Most of the time you open a video player, you are not managing a library or transcoding a stream. You are opening one local file and watching it. FastPlay is built around that single moment: how fast the file opens, how quickly the first frame appears, whether it resumes where you left off, and how cleanly it scrubs and gets out of the way.
The mainstream players are excellent and do far more than this. FastPlay deliberately does less, so the path from double-click to watching stays short and the controls stay responsive. It is a focused tool for local playback on Windows, not a replacement for a full-featured media suite.
VLC and MPC-HC are mature, capable, and the right choice for most people when they need broad format support, streaming, playlists, deep configuration, and years of hardening. FastPlay is not trying to compete on breadth.
Where FastPlay differs is scope and intent:
| FastPlay | VLC | MPC-HC | |
|---|---|---|---|
| Primary focus | Fast local playback on Windows | Everything, everywhere | Lightweight local playback (Windows) |
| Platforms | Windows x64 only | Cross-platform | Windows |
| Format/codec breadth | Common formats via FFmpeg | Very broad | Broad |
| Streaming / network | No | Yes | Limited |
| Playlists / library | No | Yes | Basic |
| Per-file resume | Built in | Plugin/config | Limited |
| Render path | D3D11-first, GPU-resident | Multiple backends | DirectShow / madVR etc. |
Use VLC or MPC-HC when you need format coverage, streaming, or platform reach. Reach for FastPlay when you want a snappy, no-friction window for the local file in front of you.
| Key | Action |
|---|---|
Space |
Pause / resume / replay at end |
Left |
Seek backward 5s, hold for 15s steps |
Right |
Seek forward 5s, hold for 15s steps |
Ctrl+F |
Move one frame forward |
Ctrl+B |
Move one frame backward |
Ctrl+O |
Open media file |
Ctrl+Shift+O |
Recent files overlay (↑↓ select · Enter open · Del remove · Esc close) |
PageUp / PageDown |
Previous / next file in the play queue |
Ctrl+S |
Save screenshot |
S |
Toggle subtitles |
I |
Set in-point at current position |
Shift+I |
Clear in-point |
O |
Set out-point at current position |
Shift+O |
Clear out-point |
R |
Toggle loop range (if in/out set) · toggle auto-replay (if no range) |
MouseWheel |
Adjust volume |
Esc |
Exit borderless fullscreen |
Ctrl+H |
Toggle borderless fullscreen |
Ctrl+W |
Fill screen height with no black padding |
Ctrl+Q |
Snap window to half the video's native resolution |
Ctrl+R |
Rotate clockwise 90 degrees |
Ctrl+E |
Rotate counter-clockwise 90 degrees |
Ctrl+MouseWheel |
Zoom at cursor |
Ctrl+Drag |
Pan when zoomed in |
Ctrl+0 |
Reset zoom, pan, and rotation |
H (hold) |
Show controls overlay |
[ / ] |
Decrease / increase playback speed |
\ |
Reset playback speed to 1× |
Backspace |
Cancel scrub and return to original position |
` |
Toggle HW/SW decode mode in title bar |
Timeline scrubbing is available by hovering near the bottom of the window and clicking or dragging.
Press I to mark where playback starts and O to mark where it ends. The range adapts to however many points are set:
| In | Out | Plays | Space at end goes to |
|---|---|---|---|
| — | — | start → end | start |
| ✓ | — | in-point → end | in-point |
| — | ✓ | start → out-point | start |
| ✓ | ✓ | in-point → out-point | in-point |
Press R while a range is active to loop it continuously. Use Shift+I / Shift+O to clear individual points. In/out points reset when a new file is opened.
Ctrl+O file open dialog and drag-and-drop file openPageUp / PageDown, and auto-advance to the next file at the natural end of each one.srt subtitle overlay<b>, <i>, <u>, <font>)FastPlay prioritizes:
FastPlay does not currently aim to provide:
Lightweight queue/folder playback is implemented (see Features); full playlists, persistent playlist files, and media-library behavior remain non-goals.
These are current real-world caveats, separate from the deliberate non-goals above:
.srt subtitles only. Embedded subtitle tracks and other subtitle formats are not loaded, and styling is intentionally minimal.PageUp / PageDown) with auto-advance at end of file, but the queue is not saved between runs, there are no persistent playlist files, folder scanning is non-recursive, and there is no shuffle, repeat, or in-window queue list.build.rs supports these FFmpeg discovery patterns.
Set FFMPEG_DIR.
FFMPEG_INCLUDE_DIRFFMPEG_LIB_DIRFFMPEG_BIN_DIR%VCPKG_ROOT%/installed/x64-windows%USERPROFILE%/vcpkg/installed/x64-windowsC:\tools\vcpkg\installed\x64-windowsThe build expects the usual FFmpeg development layout with include/ and lib/. Runtime DLL staging works when a bin/ directory is available.
cargo build --release
Normal playback:
cargo run --release -- <path-to-media>
Or drag and drop a media file onto the FastPlay window.
Force software decode fallback:
cargo run --release -- --force-sw <path-to-media>
FastPlay supports external sidecar .srt files only. Place a subtitle file next to the media file with the same basename:
movie.mp4
movie.srt
The subtitle sidecar will be auto-loaded if present.
FFmpeg -> AV_PIX_FMT_D3D11 -> D3D11 video processor -> DXGI present
FFmpeg demux -> software decode -> D3D11 upload -> D3D11 video processor -> DXGI present
FFmpeg decode -> WASAPI shared-mode sink
.srt sidecar onlyFor the full implementation charter, see ARCHITECTURE.md.
src/
app/ # session coordinator, commands, events, state
audio/ # audio sink abstractions
ffi/ # FFmpeg / D3D11 / DXGI / WASAPI interop
media/ # source, video, audio, seek, subtitle
platform/ # Win32 window/input
playback/ # clock, metrics, queue policy, generations
render/ # presenter, swapchain, surface registry, timeline overlay
MIT
$ claude mcp add FastPlay \
-- python -m otcore.mcp_server <graph>