Dithering tool.
  • TypeScript 56.5%
  • Rust 22.5%
  • CSS 13.2%
  • JavaScript 4.6%
  • Shell 2.1%
  • Other 1%
Find a file
Alex 3c6caa1efc
Some checks failed
CI / frontend (push) Has been cancelled
CI / rust (push) Has been cancelled
CI / desktop-linux (push) Has been cancelled
CI / desktop-windows (push) Has been cancelled
CI / desktop-macos (push) Has been cancelled
docs: document the Windows build path in README
The Building section only described build-all.sh and implied it covered
every platform. It does not: build-all.sh only builds on Linux and prints
scaffolding elsewhere, and the Windows work now lives in build-win.ps1.

- Platform table up front so it is obvious which script to run where
- Windows section: build-win.ps1, the MSVC toolchain and WebView2
  requirements, the inert mingw pin in .cargo/config.toml, and the
  untested cross-build path
- Spell out that the two Windows artifacts are not interchangeable:
  dizako.exe is portable and GUI-only, the setup exe is an NSIS installer
- Note NO_STRIP=1 for hand-built AppImages, since bundle.targets is now
  "all" and a bare `pnpm tauri build` on Linux otherwise dies on
  linuxdeploy with no usable error

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 13:41:04 +02:00
.cargo chore: add windows cross-compilation target config 2026-08-21 14:46:23 +02:00
.github/workflows Wire wasm into the worker ladder; CI + packaging 2026-08-22 01:18:18 +02:00
assets fix: enforce com.alex.dizako identifier and RDNN standards across all linux files 2026-08-21 15:01:00 +02:00
dither-wasm Sync v2.0.1 lockfiles, Tauri log schemas, and translation backlog. 2026-08-23 03:11:35 +02:00
docs Make README screenshots clickable; drop redundant translation TODO. 2026-08-23 03:14:29 +02:00
packaging fix: repair build chain for pnpm 11 (PART 1) 2026-08-23 13:15:20 +02:00
public Rewrite the dither engine around palette layers 2026-08-21 01:46:00 +02:00
screenshots Add screenshot gallery to README. 2026-08-23 03:09:58 +02:00
src Full UI translation: all panels, all 18 locales (v2.0.1) 2026-08-22 23:56:54 +02:00
src-tauri build(win): revamp build-win.ps1 for dual binary deployment (standalone & installer) 2026-08-23 13:26:52 +02:00
templates chore: organize loose files into folders and add windows CI 2026-08-21 14:45:32 +02:00
test Stage C: delete TS engine from runtime; simplify README; fix Matugen placement 2026-08-22 01:27:06 +02:00
testdata Golden harness, engine parity port, pipeline v2, and app improvements 2026-08-22 01:07:30 +02:00
tools Full UI translation: all panels, all 18 locales (v2.0.1) 2026-08-22 23:56:54 +02:00
.gitignore build(win): revamp build-win.ps1 for dual binary deployment (standalone & installer) 2026-08-23 13:26:52 +02:00
build-all.sh fix: produce the AppImage bundle again (PART 2) 2026-08-23 13:18:19 +02:00
build-win.ps1 build(win): revamp build-win.ps1 for dual binary deployment (standalone & installer) 2026-08-23 13:26:52 +02:00
eslint.config.js Golden harness, engine parity port, pipeline v2, and app improvements 2026-08-22 01:07:30 +02:00
index.html Rewrite the dither engine around palette layers 2026-08-21 01:46:00 +02:00
LICENSE docs: fix License typo and add comprehensive licensing info 2026-08-23 12:19:35 +02:00
package.json fix: use onlyBuiltDependencies for pnpm instead of legacy approvedBuilds 2026-08-23 12:25:42 +02:00
pnpm-lock.yaml Fix blank preview: stale-guard rejected valid frames on 1px drift 2026-08-22 12:26:33 +02:00
pnpm-workspace.yaml fix: repair build chain for pnpm 11 (PART 1) 2026-08-23 13:15:20 +02:00
README.md docs: document the Windows build path in README 2026-08-23 13:41:04 +02:00
THIRD-PARTY.md docs: fix License typo and add comprehensive licensing info 2026-08-23 12:19:35 +02:00
tsconfig.json Rewrite the dither engine around palette layers 2026-08-21 01:46:00 +02:00
vite.config.ts Wire wasm into the worker ladder; CI + packaging 2026-08-22 01:18:18 +02:00
vitest.config.ts Golden harness, engine parity port, pipeline v2, and app improvements 2026-08-22 01:07:30 +02:00

Dizako

Dizako

A dithering studio. Load an image, pick from 29 algorithms and 130 palettes, and decide which colours land in the shadows and which in the highlights.

Built with Tauri, React, and Material 3. Everything runs locally. No uploads, no tracking.

Algorithm picker
Algorithms
Palette editor
Palettes
Image controls
Image

What it does

Open an image, choose an algorithm and a palette, tune until it looks right, then export a PNG. Sliders re-render live. A compare wipe shows original vs dithered.

Area Includes
Error diffusion Floyd-Steinberg, Jarvis, Stucki, Sierra, Atkinson, and friends
Ordered Bayer, halftone screens, line screens, blue noise, checkerboard
Threshold / experimental Hard threshold, random noise, Riemersma, dot diffusion, Omino-like
Palette layers Colours stacked by tonal position, so you choose what goes where
Image controls Exposure, contrast, gamma, saturation, hue, blur, sharpen (before dither)

Building

Each platform has its own build script. Both compile the WebAssembly engine, build the frontend, and then bundle the app; neither cross-compiles, so run the one that matches the machine you are on.

Platform Script Produces
Linux ./build-all.sh .deb, .rpm, .AppImage, Arch .pkg.tar.zst
Windows .\build-win.ps1 portable dizako.exe, NSIS installer
macOS ./build-all.sh macos prints the steps only, see below

Shared dependencies

Needed on every platform:

  • Core build tools: Node 22+, pnpm, Rust (cargo), and wasm-pack.
  • Rust Wasm target: rustup target add wasm32-unknown-unknown, or the rust-wasm package via pacman.

Linux

./build-all.sh

The script checks for missing dependencies, builds every bundle, and finally installs the Arch package it just produced via pkexec pacman -U. Each bundle is best effort, so one failing packager does not kill the rest.

Additional Tauri dependencies: webkit2gtk-4.1, base-devel, curl, wget, openssl, appmenu-gtk-module, gtk3, libvips, libayatana-appindicator. (On Arch, ./build-all.sh offers to install these for you via pkexec pacman.)

Windows

Run from PowerShell on a Windows machine:

.\build-win.ps1

The script validates its tools, compiles the WASM engine, installs dependencies, runs the Tauri build, then collects both binaries into a fresh release-win/ directory and prints their sizes. You get two artifacts, and they are not interchangeable:

Artifact What it is
dizako.exe Portable standalone build. Launches straight into the GUI with no console window, needs no installation.
Dizako_<version>_x64-setup.exe NSIS installer. Setup wizard, Start menu entry, uninstaller.

Additional Windows requirements:

  • Rust MSVC toolchain plus the Visual Studio Build Tools (C++ workload). Windows builds use MSVC by default.
  • WebView2, which is preinstalled on Windows 11 and on current Windows 10.

.cargo/config.toml pins a mingw linker for x86_64-pc-windows-gnu. That only applies when you explicitly target the GNU toolchain and is ignored by the default MSVC build; delete that section if you want to build the GNU target without mingw present.

Cross-building Windows binaries from Linux needs the NSIS and mingw toolchains (pacman -S mingw-w64-gcc nsis or equivalent) and pnpm tauri build --runner cargo --target x86_64-pc-windows-gnu --bundles nsis. This is untested, which is why running the script on Windows is the supported path.

macOS

Scaffolding only, never exercised. ./build-all.sh macos prints the steps: install the Xcode command line tools, then pnpm tauri build --bundles dmg,app.

Manual build

If you prefer not to use the scripts:

# Compile the WebAssembly engine first
wasm-pack build dither-wasm --release --target web --out-dir pkg

# Install frontend dependencies
pnpm install

# Run the app
pnpm tauri dev            # development mode
pnpm tauri build          # bundle into src-tauri/target/release/bundle

Frontend only: pnpm dev / pnpm build.

Building the AppImage by hand? Set NO_STRIP=1. bundle.targets is "all", so a bare pnpm tauri build on Linux will try the AppImage, and linuxdeploy ships an old strip that chokes on the .relr.dyn sections in current system libraries. Without it the bundle fails with an unhelpful failed to run linuxdeploy. ./build-all.sh already sets this for you.

Matugen theming

Dizako can take its accent colour from matugen:

  1. Copy templates/matugen-template.json into your matugen templates directory.
  2. Point matugen at it:
    [templates.dizako]
    input_path = "~/.config/matugen/templates/dizako-matugen.json"
    output_path = "~/.config/dizako/colors.json"
    
  3. Run matugen, then pick Settings → Accent → Matugen in Dizako.

License

MIT.