Some users expressed interest in building their own images locally, but lack the skills to either set up the necessary dependencies for the prepackaged image builder, or use containerized images. With that in mind I made a simplified desktop GUI for the official image builders. The app still uses Podman or Docker under the hood, so some assembly required.
Features
Allows easy configuration of installed packages, setting the size of the root filesystem, disabling unwanted services, and including a filesystem overlay with your custom files.
Uses official OpenWrt image builder images (via Podman or Docker).
Stores and loads your build configurations as presets, making it easy to reuse settings for newer OpenWrt versions.
Caches OpenWrt profile metadata, packages, and image builders to speed up subsequent operations.
Manages downloaded image builders and allows removing them from within the app.
Supports OpenWrt version 21.02 and above, including release candidates.
Currently, modern Linux and Windows running on x86/64 are supported. Windows version only tested on 11 in a VM with Podman Desktop. Linux version tested on Fedora 43 x86/64 and SteamOS 3.8.1.
macOS on aarch64 is doable, but there's no practical way for me to test this at the moment, although the basic macOS-specific hooks are there. If anybody wants to donate a remote aarch64 macOS VM, then it's probably a matter of hours to implement.
Please read the requirements and the usage instructions. And read the build log in the build folder after building to see if it matches your package selection.
The only thing I would request to have would be the ability to add any user-added packages from their current router.
As to how, previous ideas mentioned were a copy-paste function in LuCI, or a config file to drag and drop. Otherwise, thinking out loud now, perhaps displaying on the GUI a command or script we could copy and run via ssh to get the packages list from.
If by building you mean compiling from source, then no. This is a user-friendly front-end for the image builder: i.e. picking release, target, packages, etc. Think of it is a local firmware selector/ASU.
Correct me if i’m wrong, but in image builder, if i want to lets say remove a default package like dnsmsq, i have to do “-dnsmasq”. But that in turn removes dependencies for that package too.
In the firmware selector website, we can provide a custom package list irrespective of the default packages and it builds the image with only the package list i gave it.
Or have i been using image builder wrong in some way?
New version 0.2.0 has been released with multiple under-the-hood changes. Bouwer now shows the actual image builder command used to build images and allows managing downloaded image builders from within the app: