Local Video Player Web App is a browser-based local media player focused on desktop-style controls, subtitle handling, and local-file privacy.
It runs fully on the frontend (HTML, CSS, JavaScript) and plays media directly from files you open in the browser.
This project was created to provide a practical local-video experience in the browser while keeping the workflow simple:
- Play local videos without uploading files to any server.
- Keep playback controls familiar for users coming from VLC/MPC-like players.
- Support subtitle workflows (external subtitle loading and timing adjustments).
- Work well with NVIDIA RTX Video Enhancement so users can improve video quality during browser playback.
This app is intended for local playback in a desktop browser, which allows compatible NVIDIA GPUs to apply RTX Video Enhancement.
- Open NVIDIA Control Panel.
- Go to Video > Adjust video image settings.
- Enable RTX video enhancement.
- Choose your enhancement quality level.
- Apply changes.
- Play your local video in a supported browser window (for example Chrome or Edge, depending on driver/browser support).
Notes:
- Availability depends on GPU model, driver version, and browser support.
- RTX Video Enhancement is handled by NVIDIA/driver and is external to this app.
- For best compatibility in this app, keep Settings > Global Preferences > Prefer GPU video enhancement compatibility enabled.
- Compatibility mode minimizes compositor transforms only when frame presentation remains at default settings.
- Local video loading (single and multiple files)
- Playlist management with previous/next navigation
- Play, pause, stop, seek, volume, speed, fullscreen
- Keyboard shortcuts
- Touch gestures (seek, volume, double-tap fullscreen)
- A-B repeat (set A, set B, loop, clear)
- Playback offset nudge
- Subtitle offset and real-time audio-delay processing (positive delay)
- Per-video timing presets
- External subtitle loading (.srt and .vtt)
- Subtitle rendering overlay with style controls
- Audio/subtitle track selectors with graceful fallback
- Section/chapter navigation buttons
- Seek-bar section markers when sections are available
- MP4/MOV/MKV chapter fallback parsing for marker extraction when browser text tracks do not expose chapters
- Drag-and-drop file loading (media and subtitle files)
- Recent files list (metadata and direct handle path when supported)
- Persistent settings (theme, seek step, subtitle defaults, volume/speed, and more)
- Customizable keyboard shortcut bindings with persistence
- Settings export/import
- PWA app shell and offline UI caching (when served over http/https)
- File protocol compatibility mode with reduced capabilities notice
Core technologies:
- HTML5
- CSS3
- Vanilla JavaScript (ES6+)
Libraries and bundled assets:
- Plyr (local vendor bundle) for enhanced player controls
- Font Awesome (local vendor bundle) for UI icons
Platform/browser APIs used:
- HTMLMediaElement APIs for playback
- Text track APIs for subtitle/track handling
- Fullscreen API
- localStorage for persisted settings
- IndexedDB + File System Access API (where supported) for better recent-file reopening
- Service Worker + Web App Manifest for offline app shell behavior
Use a local HTTP server for best results:
python -m http.server 8099Then open:
Choose one of the following:
- Click Open media files
- Click Open subtitle file
- Drag and drop files onto the video area
Supported subtitle files:
- .vtt
- .srt
- Play/Pause/Stop
- Seek via timeline
- Volume and speed controls
- Previous/Next file
- Fullscreen toggle
- A-B repeat controls
- Playback offset nudge
- Subtitle offset control
- Real-time audio-delay processing (positive values)
- Per-video timing preset save/clear
- Select subtitle mode: Off, External subtitle, or embedded native track
- Select audio track when exposed by browser
- Change subtitle style:
- Font size
- Vertical position
- Background opacity
- Use previous/next section buttons in the controls.
- Seek-bar markers are shown when section data is available.
- For some files, chapter metadata can be read from MP4/MOV container metadata as fallback.
Open settings to configure:
- Remember last file metadata
- Remember playback position
- Auto-play next file
- Keyboard shortcuts
- Remember volume/speed
- Subtitle defaults
- Theme and seek step
- Keyboard shortcut bindings (customizable and persisted)
You can also export/import settings JSON.
All shortcuts are customizable from Settings > Preferences > Keyboard Shortcuts.
Default bindings:
- Space: Play/Pause
- Arrow Right: Seek forward by configured seek step
- Arrow Left: Seek backward by configured seek step
- Arrow Up: Volume up
- Arrow Down: Volume down
- ]: Increase playback speed
- [: Decrease playback speed
- =: Increase audio delay
- -: Decrease audio delay
- .: Increase subtitle delay
- ,: Decrease subtitle delay
- M: Mute toggle
- F: Fullscreen toggle
- N: Next file
- P: Previous file
- A: Toggle A-B loop
Video:
- Best support: MP4 (H.264/AAC), WebM
- Best effort: MOV, AVI, MKV (depends on browser codec/container support)
Subtitles:
- WebVTT (.vtt)
- SRT (.srt)
- Service worker caches the app shell for offline UI startup after first online load.
- Local media is always read from user-selected files.
Localhost mode (recommended):
- Full behavior (manifest + service worker + offline shell support)
File protocol compatibility mode:
- Reduced capabilities
- Core playback/playlist/settings still available
- Browser codec support determines whether some files (especially AVI/MKV) can play.
- Negative audio delay (audio ahead of video) is not directly supported in-browser; use Playback Offset for early-audio compensation.
- Embedded track exposure varies by browser.
- Compatibility and large-file performance matrices are still ongoing validation tasks.
- No file upload backend is used.
- Files remain local to your machine/browser session.
- Settings and metadata are stored locally in your browser profile.


