Hap Video plays Hap-encoded QuickTime/MOV files with GPU-native decoding. Hap frames are already GPU texture-compressed, so playback is just a Snappy decompress and a texture upload. There's no CPU-side pixel decoding and no per-frame color conversion, which is what makes it fast enough for multiple simultaneous 4K@60 video layers, instant seeking to any frame, and smooth reverse playback. It's built for interactive installations, live visuals, and VJ-style projects where you're compositing several high-resolution videos at once.
WHAT YOU GET
There are two ways to use it, and both share one decoder underneath.
Drop-in: point a stock VideoStreamPlayer at a .mov file and it plays, with no new nodes and nothing to set up. This covers play, stop, pause, seek, and loop at normal forward speed.
HapPlayer: a dedicated Control node for when you need more control, including variable playback speed, reverse playback, frame stepping, loop signals, and stream metadata (resolution, frame rate, duration, frame count). It also exposes its texture directly, if you want to feed it into your own materials or shaders.
You can run multiple HapPlayer or VideoStreamPlayer instances at once without any extra setup. Every playing video shares one bounded decode worker pool behind the scenes.
SUPPORTED FORMATS
Hap, Hap Alpha, Hap Q, Hap Q Alpha, and Hap R are all supported, including the alpha-channel variants, which composite through Godot's normal 2D alpha blending like any other texture. Files exported in "chunks" (TouchDesigner, ffmpeg, or the AVF Batch Exporter) decode multithreaded for extra headroom. Video files with an audio track still load and play their video normally; the audio track is just skipped.
Not supported: HapA (alpha-only) and Hap HDR (BC6). Files in these variants fail to open with a clear error instead of misrendering. Audio playback isn't supported at all.
REQUIREMENTS
- Godot 4.4 or later
- Forward+ or Mobile renderer (this extension uses RenderingDevice directly; the Compatibility/OpenGL renderer isn't supported)
- Windows, macOS, or Linux, single-precision builds only
- Works out of the box: prebuilt binaries for all three platforms ship in the addon, and there's nothing to enable in Project Settings
A NOTE ON LARGE VIDEO FILES
For big shows and installations, reference your videos by an absolute path or a user:// path rather than res://, and don't pack gigabyte-scale videos into your exported PCK. Hap Video memory-maps the file for zero-copy reads either way, but keeping large media outside the PCK keeps your exports smaller and your load times faster. Files over 4 GB are supported.
PERFORMANCE TUNING FOR MULTI-STREAM 4K
If you're pushing several simultaneous 4K streams, two Project Settings are worth raising from their defaults: the RenderingDevice staging buffer size (to avoid a full-device stall when several 4K uploads land in the same frame) and the texture upload region size (a profiling knob if you see render-thread CPU pressure). Details and recommended values are in the addon's bundled documentation.
LICENSE
MIT. Bundled third-party components (Hap decode, Snappy, MOV/MP4 demuxing) carry their own permissive licenses, included with the addon.
Changelog for version v0.1.0
No changelog provided for this version.