Deskemy is a local, offline player for downloaded video courses. Point it at a folder of course videos and it organizes them into a browsable library with playback, progress tracking, search, and study tools. Your video files stay where they are — they're referenced in place, never copied or uploaded — and everything Deskemy records lives in a single local SQLite database.
Library & import
- Structures a course folder into sections and ordered lectures, cleaning numeric prefixes and extensions out of the titles.
- Attaches subtitles and resource files (PDFs, code, archives) to the
lecture or section they belong to. Code projects (a folder with
package.json,node_modulesand the like) come in as one resource, and TypeScript.tsfiles aren't mistaken for videos. - Shows a preview of what will be imported — sections, lectures, resources, subtitles, total runtime — with live progress during the scan.
- References files in place; it never copies or moves your videos. Adding a course's folder again updates it and keeps your progress.
Playback
- Resume from your last position and autoplay-next. A default speed for every course, or a course's own; subtitle and audio-track choices are remembered per course.
- Mini player: press
Tto shrink the player to a small always-on-top window beside your editor or terminal — it keeps the video's shape and opens where you left it. - Resources next to their lectures, in the curriculum and the player's course panel, ticked off as you go; optionally, autoplay stops at a lecture with exercises to offer them.
- Chapter navigation, a sleep timer, and subtitle / audio-track selection.
- Extensive YouTube-style keyboard shortcuts.
Organize & revisit
- Continue Watching on the home screen, resuming the exact lecture you were on.
- Timestamped bookmarks, tags, favorites, and a watch history.
- Career Tracks — ordered groups of courses with aggregate completion.
Search
- Full-text search across course, section, and lecture titles.
- Optional subtitle search over the words spoken in your subtitle files, jumping straight to the matching timestamp.
Progress & maintenance
- Watch-time stats: an activity heatmap (hover a day for what you watched), streaks, and a daily goal.
- Rename-safe: a moved or renamed file keeps its progress and bookmarks, matched by content rather than path.
- Optional folder auto-rescan, and a storage panel for reclaiming disk space.
| Key | Action | Key | Action | |
|---|---|---|---|---|
Space / K |
Play / pause | C |
Toggle subtitles | |
J / L |
Skip back / forward 10s | , / . |
Slower / faster | |
← / → |
Skip back / forward 5s | N / ⇧N |
Next / previous lecture | |
↑ / ↓ |
Volume up / down | P / R |
Course contents / Resources | |
M |
Mute | B |
Bookmark this moment | |
F / Esc |
Fullscreen / exit | T |
Mini player, always on top | |
I |
Playback info | ? |
Show all shortcuts |
- Windows 10 or 11, with a GPU that supports OpenGL 3.3 (any integrated GPU from the last decade). No WebView2 needed.
- Linux (beta): a distro from 2024 or newer (glibc 2.39): Ubuntu 24.04+, Linux Mint 22+, Debian 13+, Fedora 40+ or openSUSE Tumbleweed, on X11 or Wayland. See Linux below.
- macOS after that.
Everything is bundled. Deskemy plays through libmpv (mpv's media
library, libmpv-2.dll), which ships inside the installers and the portable
zip — no separate mpv install needed. If you'd rather use your own build, Deskemy
also picks up libmpv-2.dll from your PATH or from DESKEMY_LIBMPV.
- Download the latest installer (
deskemy_<version>_x64-setup.exe) from the releases page. - Run it.
- Launch Deskemy → Add Folder → pick a course folder.
It's a per-user install (no admin required). For a per-machine install in
Program Files (admin, for all users), use the MSI (deskemy_<version>_x64_en-US.msi)
instead. Either way it keeps itself up to date: when a new release is out,
Deskemy offers it (nothing downloads until you click Update), and
Settings → About has a Check button. Coming from Deskemy 1.x, the update
installs over it and keeps your library. Uninstalling from Settings → Apps
removes the program, its shortcuts, and its registry entry. Your library index
and settings under %APPDATA%\com.spooksy.deskemy are left in place so a
reinstall resumes where you left off — delete that folder for a clean slate.
To run without installing, download the portable zip, extract it, and run
deskemy.exe. A .portable marker beside the executable keeps all data (library,
settings, thumbnails) in a data/ folder next to it, so nothing is written to
%APPDATA% or the registry. Delete the folder to remove it entirely. (A portable
copy can't update itself; Deskemy points you at the release page instead.)
Each download carries Deskemy's own libmpv, codecs and PDF viewer, so there's no mpv or codec pack to install (H.264 courses play on a stock Fedora too).
- Fedora, openSUSE: download
deskemy_<version>_x86_64.rpmand open it in your software centre, orsudo dnf install ./deskemy_<version>_x86_64.rpm. - Ubuntu, Debian, Mint: download
deskemy_<version>_amd64.deband open it, orsudo apt install ./deskemy_<version>_amd64.deb. - Any distro: the AppImage (
Deskemy_<version>_x86_64.AppImage). Make it executable first (right-click → Properties → Executable as Program, orchmod +x); until then, opening it may offer to write it to a disk.
The AppImage updates itself like the Windows installers. The .deb and .rpm
point you at the release page, and the new package installs over the old
one. Your library and settings live in ~/.local/share/com.spooksy.deskemy.
On a Wayland desktop Deskemy runs through XWayland, so the mini player can
stay on top and drag & drop works; DESKEMY_WAYLAND=1 runs it natively
(without those two). It's a beta: please report what works and what doesn't
in #7 or a new issue, with your
distro, desktop and GPU.
Maintained by the community as separate projects, so they may trail the latest release. For translation-specific issues, please open them on that project's repo.
- 简体中文 (Simplified Chinese) — Deskemy-zh-CN by @flipped0419
# Prerequisites: Rust (stable), MSVC C++ Build Tools, and libmpv-2.dll in
# app/vendor/ (the "libmpv" build of mpv; the build copies it beside the exe).
# PDFium, for the PDF viewer, goes there too (without it, PDFs open outside):
powershell -File app/scripts/get-pdfium.ps1
cd app
cargo run # run in development
cargo test # tests (a headless mpv runs the playback ones)Releases are packaged with cargo-packager — see docs/releasing.md.
Deskemy 1.x was a Tauri + Svelte app; its planning docs are in
docs/archive/, its code in the git history (up to v1.2.2).
| Layer | |
|---|---|
| UI | Slint (Rust) · Skia renderer, patched for ClearType-style text |
| Core | Rust (crates/deskemy-core) · SQLite + FTS5 via rusqlite (bundled) |
| Playback | libmpv, loaded at runtime through FFI (libloading), rendering straight into the UI's OpenGL context — bundled with the app, with system/DESKEMY_LIBMPV fallback |
| Storage | Local SQLite database + a content-addressed thumbnail cache under the app data directory |
Import runs in two phases — probe, then persist — so media probing happens off the database connection and scanning a large course doesn't block the UI.
How it fits together
flowchart TB
subgraph win["Deskemy window · Slint"]
ui["Slint UI<br/>Skia over OpenGL"]
subgraph core["Rust core"]
cmd["Pages + session"]
imp["Two-phase importer<br/>scan → probe → persist"]
ply["Player control (FFI)"]
end
end
mpv["libmpv-2.dll<br/>bundled"]
db[("SQLite + FTS5<br/>rusqlite, bundled")]
thumb[("Thumbnail cache")]
files[/"Your course folders<br/>referenced in place"/]
ui <-->|callbacks| cmd
cmd --> imp
cmd --> ply
cmd --> db
cmd --> thumb
imp -->|probe| mpv
imp --> files
imp --> db
ply --> mpv
ply --> db
mpv -->|"renders into the UI (OpenGL)"| ui
No accounts, no telemetry, and no network requests for your content. Your library, progress, bookmarks, and stats live only in a local database; the app works fully offline. The one request it makes is the update check: it reads the latest release's manifest from GitHub, and downloads nothing unless you choose to update.
MIT © 2026 Nayeem Fardin.








