A photo, video and 3D model viewer for Hyprland.
Open one picture and it floats, sized to the picture, on the monitor the
pointer is on. Open a folder and it is a viewer over that folder, in the
same order the file manager shows it — "next" is asked of
hyprforge-listing, the leaf under both, so two windows over one folder
never disagree about which picture follows this one. Behind the single
picture there is a date-grouped grid, a library of folders, a filmstrip,
an inspector reading EXIF, a slideshow, and Back and Forward through
what was looked at.
Pictures are decoded within a budget and orientation-correct, through
hyprforge-image; a 36-megapixel file is measured before it is decoded,
not after. Zoomed in past what was decoded, the part on screen is
decoded again at the density it is drawn at, once the zoom settles, so
1:1 shows the file's own pixels without the whole file being kept at
full size. An animated GIF plays, every frame together inside what one
still may keep; zoomed in past the window it stands still on its first
frame, and plays again on the way out. Videos play through libmpv, opened at run time rather than
linked, so a machine without mpv still runs the viewer and a video says
what is missing. STL, 3MF and OBJ models are loaded into a welded mesh
by hyprforge-mesh and drawn on the GPU with fstl's camera, inside the
same window.
Copy, "Open With…", trash, "Show in Files" and "Set as Wallpaper" each go through the suite's own library for that job rather than a copy — the clipboard library (never the history daemon, which need not be installed), the shared MIME database, the freedesktop trash, and the wallpaper settings the Settings app's Desktop screen edits, so the two never disagree.
Part of Hyprforge, a suite of
native Hyprland desktop applications. It appears there as a
submodule at crates/hyprforge-media; this repository is where its code
lives, and pull requests here are welcome.
A library as well as an application. Every decision — what is in the
folder, what is next, how a picture fits the window, what a key means,
which tiles a date heading groups, what the slideshow shows next — lives
under src/lib.rs where a test can reach it without a display. The
window itself is src/main.rs and src/view.rs, deliberately thin; a
playing video and a 3D model on the GPU are hyprforge-viewer's panes,
shared with Files' Quick Look.
cargo install --path .
Arch users can build the hyprforge-media package from the monorepo's
packaging/arch instead, which also installs the desktop entry.
Nothing else in the suite is required. A missing appearance.toml is
first-run, not an error, and the app draws correctly themed on a machine
where the Settings app has never been installed.
Optional, each degrading to a sentence rather than a viewer that fails
to start: mpv for playing videos, ffmpeg for a video's thumbnail,
hyprpaper for a wallpaper that changes now rather than at next login,
and hyprforge-files for "Show in Files".
MIT. See LICENSE.
