WIP: feat: video wallpapers #163

Draft
zach wants to merge 10 commits from feat/video-wallpaper into main
Owner

What & why

Adds support for video wallpaper, mimicking mpvpaper's implementation.

Static image thumbnails are generated for videos which are used in image-previews throughout the project (e.g. wallpaper cropper in settings.)

Color scheme is generated by picking the "best" frame out of multiple frame samples to try and mitigate targeting a bad frame (black screen, in-progress fade, solid single color, etc.) by picking the frame with highest chroma.

Known issues

Currently FileSystemModel generates thumbnails for any video files it locates, such as recordings for the sidebar's recording list.
Currently hardcode transcodes unsupported video codecs into AV1

Related issue

No response

Type

New feature

Tested

  • Build succeeds
  • Existing tests pass
  • Manually verified

Breaking changes?

Shouldn't have any.

Checklist

  • CI passes (format, lint, typecheck)
  • Clean commits
  • No new warnings
  • Docs updated if needed
### What & why Adds support for video wallpaper, mimicking [mpvpaper](https://github.com/GhostNaN/mpvpaper)'s implementation. Static image thumbnails are generated for videos which are used in image-previews throughout the project (e.g. wallpaper cropper in settings.) Color scheme is generated by picking the _"best"_ frame out of multiple frame samples to try and mitigate targeting a bad frame (black screen, in-progress fade, solid single color, etc.) by picking the frame with highest chroma. ### Known issues Currently `FileSystemModel` generates thumbnails for **any** video files it locates, such as recordings for the sidebar's recording list. Currently hardcode transcodes unsupported video codecs into AV1 ### Related issue _No response_ ### Type New feature ### Tested - [ ] Build succeeds - [ ] Existing tests pass - [ ] Manually verified ### Breaking changes? Shouldn't have any. ### Checklist - [ ] CI passes (format, lint, typecheck) - [ ] Clean commits - [ ] No new warnings - [ ] Docs updated if needed
zach force-pushed feat/video-wallpaper from b6b3309f93 to f858fc5e9e 2026-10-25 01:36:33 +02:00 Compare
zach added 2 commits 2026-10-25 02:10:52 +02:00
chore: suppress more warnings
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 7s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Successful in 29s
Rust / build (pull_request) Successful in 59s
Python / verify (pull_request) Failing after 1m31s
Rust / fmt (pull_request) Successful in 33s
Rust / clippy (pull_request) Successful in 52s
cd44d27b74
zach force-pushed feat/video-wallpaper from 1252bebf87 to cd44d27b74 2026-10-25 02:10:52 +02:00 Compare
zach added 1 commit 2026-10-26 02:51:37 +01:00
feat: skip two-way copy for cuda devices when decoding video wallpapers + cache wallpapers as blobs in new database
C++ / fmt (pull_request) Failing after 11s
C++ / build (pull_request) Failing after 14s
C++ / clang-tidy (pull_request) Failing after 9s
JS/TS / fmt (pull_request) Successful in 10s
JS/TS / lint (pull_request) Successful in 8s
Python / static (pull_request) Failing after 28s
Rust / build (pull_request) Successful in 47s
Python / verify (pull_request) Failing after 1m20s
Rust / fmt (pull_request) Successful in 28s
Rust / clippy (pull_request) Successful in 59s
9edbcbd610
zach added 1 commit 2026-10-26 03:03:25 +01:00
fix: restore code removed by incorrect replacement command
C++ / fmt (pull_request) Failing after 5s
C++ / clang-tidy (pull_request) Failing after 4s
C++ / build (pull_request) Failing after 9s
JS/TS / fmt (pull_request) Successful in 6s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 28s
Rust / build (pull_request) Successful in 48s
Python / verify (pull_request) Failing after 1m19s
Rust / fmt (pull_request) Successful in 36s
Rust / clippy (pull_request) Successful in 1m0s
de19fd6ac4
zach added 1 commit 2026-10-26 03:13:38 +01:00
fix: don't store dbPath as const
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 7s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 27s
Rust / build (pull_request) Successful in 47s
Python / verify (pull_request) Failing after 1m24s
Rust / fmt (pull_request) Successful in 30s
Rust / clippy (pull_request) Successful in 53s
dc0f222ace
zach added 1 commit 2026-10-26 14:47:54 +01:00
feat: add wallpaper transitions, store crop in database per-wallpaper, move CUDA context creation to async thread
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 9s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 10s
JS/TS / lint (pull_request) Successful in 8s
Python / static (pull_request) Failing after 28s
Python / verify (pull_request) Failing after 1m29s
Rust / build (pull_request) Successful in 53s
Rust / fmt (pull_request) Successful in 42s
Rust / clippy (pull_request) Successful in 1m4s
e655ec5bc7
zach added 1 commit 2026-10-27 02:15:28 +01:00
feat: add vaapi path for video wallpapers on generic gpus
C++ / fmt (pull_request) Failing after 6s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 11s
JS/TS / fmt (pull_request) Successful in 10s
JS/TS / lint (pull_request) Successful in 8s
Python / static (pull_request) Failing after 32s
Rust / build (pull_request) Successful in 52s
Python / verify (pull_request) Failing after 1m23s
Rust / fmt (pull_request) Successful in 51s
Rust / clippy (pull_request) Successful in 1m2s
b0cb43f75c
zach added 1 commit 2026-10-27 02:30:59 +01:00
fix: don't link eglDestroyImageKHR
C++ / fmt (pull_request) Failing after 7s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 7s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 27s
Rust / build (pull_request) Successful in 47s
Python / verify (pull_request) Failing after 1m24s
Rust / fmt (pull_request) Successful in 29s
Rust / clippy (pull_request) Successful in 45s
a56afd7fac
zach added 1 commit 2026-10-27 15:16:02 +01:00
fix: remove more uses of cliprect and finally fix workspace's layer texture
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 33s
Rust / build (pull_request) Successful in 48s
Python / verify (pull_request) Failing after 1m24s
Rust / fmt (pull_request) Successful in 32s
Rust / clippy (pull_request) Successful in 57s
b58b4fdc9c
zach added 1 commit 2026-10-27 23:00:31 +01:00
fix: fix sub-pixel layout arrangement for normalized resolutions
C++ / fmt (pull_request) Failing after 7s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 11s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 31s
Rust / build (pull_request) Successful in 49s
Python / verify (pull_request) Failing after 1m28s
Rust / fmt (pull_request) Successful in 30s
Rust / clippy (pull_request) Successful in 54s
118b8f482a
Some required checks failed
C++ / fmt (pull_request) Failing after 7s
C++ / build (pull_request) Failing after 10s
Required
Details
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 11s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 31s
Rust / build (pull_request) Successful in 49s
Required
Details
Python / verify (pull_request) Failing after 1m28s
Required
Details
Rust / fmt (pull_request) Successful in 30s
Rust / clippy (pull_request) Successful in 54s
Some required checks were not successful.
This pull request doesn't have enough required approvals yet. 0 of 1 official approvals granted.
You are not authorized to merge this pull request.
This branch is out-of-date with the base branch
This pull request is marked as a work in progress.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/video-wallpaper:feat/video-wallpaper
git checkout feat/video-wallpaper
Sign in to join this conversation.