{"id":13341312,"url":"https://github.com/fia0/enkei","last_synced_at":"2025-03-11T21:30:44.400Z","repository":{"id":45763565,"uuid":"373317903","full_name":"fia0/enkei","owner":"fia0","description":"A wayland wallpaper tool with support for GNOME dynamic wallpapers","archived":false,"fork":false,"pushed_at":"2022-03-09T18:31:56.000Z","size":27008,"stargazers_count":24,"open_issues_count":3,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-24T08:30:06.310Z","etag":null,"topics":["dynamic-wallpaper","egl","opengl","rust","sway","wallpaper","wayland","wlroots"],"latest_commit_sha":null,"homepage":"https://enkei.spacesnek.rocks","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fia0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"liberapay":"spacesnek"}},"created_at":"2021-06-02T22:23:57.000Z","updated_at":"2024-09-28T15:59:07.000Z","dependencies_parsed_at":"2022-09-08T06:31:19.026Z","dependency_job_id":null,"html_url":"https://github.com/fia0/enkei","commit_stats":null,"previous_names":["fia0/enkei"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fia0%2Fenkei","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fia0%2Fenkei/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fia0%2Fenkei/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fia0%2Fenkei/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fia0","download_url":"https://codeload.github.com/fia0/enkei/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243115194,"owners_count":20238730,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dynamic-wallpaper","egl","opengl","rust","sway","wallpaper","wayland","wlroots"],"created_at":"2024-07-29T19:25:24.141Z","updated_at":"2025-03-11T21:30:43.390Z","avatar_url":"https://github.com/fia0.png","language":"Rust","funding_links":["https://liberapay.com/spacesnek","https://liberapay.com/spacesnek/donate"],"categories":[],"sub_categories":[],"readme":"# enkei \u003ca href=\"https://copr.fedorainfracloud.org/coprs/jwuensche/wayland-tools/package/enkei/\"\u003e\u003cimg src=\"https://copr.fedorainfracloud.org/coprs/jwuensche/wayland-tools/package/enkei/status_image/last_build.png\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://liberapay.com/spacesnek/donate\"\u003e\u003cimg alt=\"Donate using Liberapay\" src=\"https://liberapay.com/assets/widgets/donate.svg\"\u003e\u003c/a\u003e\n\n`enkei` is a wallpaper tool created to allow displaying dynamic wallpapers based on the specification format used for example in the `Gnome` desktop environment.\nIt is designed to offer a _smooth_ transition between wallpapers and gradual change over long and short periods of time.\nFor a fast handling `enkei` uses `OpenGL` to render images and blending them for transitions.\n\nWriting a wallpaper tool is nothing new so there are other projects which are similar.\nThere are already solutions for [animating GIFs](https://github.com/vilhalmer/oguri), [videos](https://github.com/GhostNaN/mpvpaper), [timed](https://github.com/xyproto/wallutils), and [static](https://github.com/swaywm/swaybg) wallpapers in Wayland.\nBut the use cases were quite different from what I wanted or I wasn't happy with their handling of animations, so I started writing `enkei`.\n\n\u003cvideo width=\"100%\" controls muted loop alt=\"A video showing enkei running on my laptop.\"\u003e\n  \u003csource src=\"data/demo.webm\" type=\"video/webm\"\u003e\n\u003c/video\u003e\n\n![A video showing enkei running on my laptop.](data/demo.gif)\n\n\u003e gif created with [gifski](https://gif.ski)\n\n\n## Features\n\n- [X] Show static wallpapers\n- [X] Show dynamic wallpapers\n- [X] Scale images to fill and fit\n- [X] Filter images after scaling to improve visuals\n- [X] Change wallpaper on-the-fly with `enkeictl`\n- [X] Support most common image formats (PNG, JPEG, WEBP, BMP,...)\n\n\u003e Under the hood we use [image](https://crates.io/crates/image) and [webp](https://github.com/jaredforth/webp) which provide the most common image types.\n\n## Compositor Requirements\n\nThis tool can generally be used with all compositor implementing the core protocols and the following protocols:\n\n- [wlr-layer-shell-unstable-v1](https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/blob/master/unstable/wlr-layer-shell-unstable-v1.xml)\n\nThese are most of the time `wlroots` based compositors for example:\n\n- [Sway](https://swaywm.org/)\n- [Wayfire](https://wayfire.org/)\n- [hikari](https://hikari.acmelabs.space/)\n- [dwl](https://github.com/djpohly/dwl)\n\nand many more; check an incomplete list here: https://github.com/solarkraft/awesome-wlroots#compositors\n\n## Options\n\n| flag | purpose/variants                                                               |\n|:-----|:-------------------------------------------------------------------------------|\n| `-f` | Filter Methods (Fast, Good, Best) [default: Good] |\n| `-m` | Display Mode (Dynamic, Static) [default: Autodetect]                           |\n| `-s` | Scale (Fill, Fit, None) [default: Fill]                                        |\n\n`enkei` and `enkeictl` share these options. Specifying options in `enkeictl` will overwrite them in the running `enkei` instance.\n\n## Installation\n\n### Available Packages\n\n#### Fedora, OpenSuse and CentOS\n\nPrebuilt images are currently only available for Fedora 34/35/rawhide, OpenSuse Tumbleweed and Centos-stream 9 via [copr](https://copr.fedorainfracloud.org/coprs/jwuensche/wayland-tools/).\n\nAdd the copr to your system and install `enkei` with:\n\n```shell\n# dnf copr enable jwuensche/wayland-tools \n# dnf install enkei\n```\n\n#### ArchLinux\n\nSelf-build packages are available for archlinux\n```shell\n$ cd pkgs/archlinux\n$ makepkg -i\n```\n\n#### Others\n\nPatches for packaging of any other distribution are welcome, and will be merged gladly. \n\n### Manual\n\nIf no packages are available for your distribution, you want to manually install, or develop on `enkei` you can build it yourself locally with the following steps.\n\n#### Requirements\n\nYou'll need the following dependencies to build this project.\n\n```\ngit\ncargo \nwayland-devel\nmesa-libEGL-devel\nglib2-devel\ncairo-devel\ncairo-gobject-devel\nlibwebp-devel\n```\n\nThese are the package names on Fedora, for your favorite distribution they might differ.\n\n### Building the project\n\nTo build the project then clone it and from within the cloned directory:\n\n``` sh\n$ cargo build\n```\n\n### Installing from Local Build\n\nYou can either install `enkei` via cargo, to your `$CARGO_BIN` directory\n\n``` sh\n$ cargo install --path .\n```\n\nor to any other arbitrary directory in your `$PATH` e.g. `/usr/local/bin`\n\n``` sh\n$ ./scripts/install.sh --prefix \"/usr/local/bin\"\n```\n\n\u003e By default the `install.sh` script uses `/usr/bin`\n\n### Using as a systemd-service\n\nUnder `config/enkei.service` an example service can be found to run sway as a systemd service.\nHow to run wayland specific daemons in systemd is well described in the [ArchWiki](https://wiki.archlinux.org/title/Sway#Manage_Sway-specific_daemons_with_systemd) though the article is sway specific this approach can be used in plenitude of scenarios.\n\n## Related Projects\n\n- [heic-to-dynamic-gnome-wallpaper](https://github.com/jwuensche/heic-to-dynamic-gnome-wallpaper)\n- [dynamic-wallpaper-editor](https://github.com/maoschanz/dynamic-wallpaper-editor)\n- [swaybg](https://github.com/swaywm/swaybg)\n- [mpvpaper](https://github.com/GhostNaN/mpvpaper)\n- [oguri](https://github.com/vilhalmer/oguri)\n\n## Feature Ideas\n    \n- [ ] Individual wallpapers on different displays\n\n    \u003e The base functionality for this is already present, as each output is\n    \u003e treated individually. But logic and interface is missing to\n    \u003e realize this.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffia0%2Fenkei","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffia0%2Fenkei","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffia0%2Fenkei/lists"}