All apps · 0 apps
TrickWork
Docker app from junkerderprovinz's Repository
Overview
Readme
View on GitHub
TrickWork turns your images into proportional-font-aware ASCII art — with a live interactive
preview and TXT / XHTML / RTF / PNG export. It's the feature set of the abandoned
ASCGen2, rebuilt: characters are picked by how much
visual "ink" they cover at your chosen font, not just by brightness, so proportional (non-monospace) fonts
render correctly instead of looking stretched or squashed.
Ships two ways from one shared TypeScript/Canvas core, so the desktop app and the self-hosted container are
always pixel-for-pixel the same tool: a desktop app for Windows, macOS and Linux (via Wails) and a
self-hosted Docker container (with an Unraid Community Applications template). Stateless — no
database, no accounts, nothing to configure beyond the port.
Maintained solo, in whatever spare time there is. Bugs, ideas or feature requests? Please open a GitHub issue. If it's useful to you, a coffee is always welcome.
Table of Contents
- What is this?
- Screenshots
- Features
- How it works
- Requirements
- Install on Unraid
- Plain Docker (no Unraid)
- Desktop app
- Development
- Credits
- License
- Support this project
1. What is this?
TrickWork is a self-hosted, single-purpose tool that converts an image into ASCII (character-based) art. Drop an image, tune the sliders, watch the preview update live, export in whichever format you need.
The name is a heraldic term: "tricking" is the historical practice of sketching a coat of arms in outline and marking its colours with letter abbreviations instead of paint — a near-literal description of what this tool does to a picture.
How it compares
Every actively-maintained image-to-ASCII tool (chafa, ascii-image-converter, jp2a, img2txt/libcaca) is
CLI-only, monospace-only, and has no live preview. ASCGen2 (the direct inspiration for this project, C#/.NET,
GPLv2, last updated 2015) had all three of those — proportional-width awareness, a real-time GUI, multi-format
export — and nothing since has replaced it. TrickWork is that combination, rebuilt from scratch.
2. Screenshots
Dark mode — every slider updates the live preview instantly; export the active image or the whole queue at once.
Light mode, the same working layout — theme, shape and accent are all yours to pick in Settings.
3. Features
- Proportional-font-aware character mapping — measures each candidate character's actual rendered ink coverage at your chosen font and picks the closest match, so proportional (non-monospace) fonts map correctly instead of assuming every character is the same width.
- Real-time live preview — every slider (width, brightness, contrast), the character-set choice and the font all update the preview immediately, no re-render delay.
- Batch queue — drop multiple images at once; each converts and can be exported independently, and one bad file never blocks the rest.
- Four export formats — plain TXT, a styled XHTML document, RTF (always rendered in a fixed monospace font — most RTF readers can't reliably honor an arbitrary proportional font, so this is called out in the UI rather than silently looking different from the preview), and a rendered PNG image, which is the one format that can faithfully reproduce a proportional-font look since it draws the characters onto a canvas itself instead of relying on the viewer's own font rendering.
- Ten built-in character sets — nine of them are ASCII Gen 2's own original ramps, fetched and verified
byte-for-byte against its real 2011 source, weighting mechanic included: repeat a character in the ramp and
it claims proportionally more of the brightness range, exactly like the original. Plus a bonus 70-character
detailedramp for extra tonal range, or type your own custom character string — repeats and all. - Four font choices, no bundled font files — two monospace, two proportional, all resolving to fonts already installed on your system.
- Automatic downscaling for very large source images, so the live-preview loop stays fast — the UI marks a queue item as downscaled when this happens.
4. How it works
A single TypeScript/Canvas conversion engine (core/) is the only place the algorithm lives — built once,
embedded into both packages, so the desktop app and the container can never drift apart or disagree on what
a given image should look like. There's no server-side logic to speak of: every operation is "load an image,
adjust, export," and nothing is remembered between sessions.
5. Requirements
- Container: any amd64 or arm64 Docker host. No database, no volumes — the app is entirely stateless.
- Desktop: Windows 10/11, Linux (needs
libwebkit2gtk-4.1-0at runtime), or macOS.
6. Install on Unraid
Pull the template into Unraid via the console / SSH:
mkdir -p /boot/config/plugins/dockerMan/templates-user && \
curl -fsSL -o /boot/config/plugins/dockerMan/templates-user/my-trickwork.xml \
https://raw.githubusercontent.com/junkerderprovinz/unraid-apps/main/trickwork/trickwork.xml
Then Docker → Add Container → trickwork under User templates, pick a port, hit Apply, open the WebUI.
The template filename must keep the my- prefix (my-trickwork.xml) so Unraid treats it as a user
template.
7. Plain Docker (no Unraid)
docker run -d \
--name trickwork \
--restart unless-stopped \
-p 3210:3210 \
ghcr.io/junkerderprovinz/trickwork:latest
Open http://localhost:3210/. No environment variables, no volumes — that's the whole configuration surface.
8. Desktop app
A Wails wrapper around the exact same engine and UI the container serves. Each release
carries a portable, no-install download per platform: a 64-bit .exe on Windows, a .dmg on macOS, a plain
binary on Linux — download, chmod +x if needed, and run. Windows also gets a real installer alongside the
portable .exe, for anyone who'd rather have a Start Menu entry and an uninstaller than a bare download. To
build it yourself right now, see Development below.
Windows may show a "Windows protected your PC" SmartScreen prompt the first time you run either the
portable .exe or the installer — this is Microsoft's reputation check for freshly-downloaded, unsigned
executables, not a sign anything is wrong. Click More info, then Run anyway. The warning fades on its
own as more people download and run this exact build without incident; there's no faster free workaround, and
code-signing (the only way to remove it immediately) isn't currently in place for this project.
9. Development
npm install
npm run build # builds core/ then ui/
npm run test --workspace core
npm run typecheck
npm run e2e --workspace ui # Playwright, needs `npx playwright install --with-deps chromium` first
Container image:
docker build -t trickwork:dev -f container/Dockerfile .
docker run -p 3210:3210 trickwork:dev
Desktop app:
npm run build --workspace core
rm -rf webembed/dist && cp -r ui/dist webembed/dist
cd desktop && go mod tidy && wails build
Output: desktop/build/bin/TrickWork[.exe].
10. Credits
Directly inspired by ASCGen2 (SourceForge, C#/.NET, GPLv2, abandoned since 2015) — same core differentiator, fresh implementation. UI design language is GlimStone, shared across every app in this house.
11. License
Copyright (C) 2026 Junker der Provinz.
TrickWork is free software under the GNU Affero General Public License v3.0 (AGPL-3.0); see LICENSE. You may run, study, share and modify it. If you distribute it, or run a modified version as a network service, you must release your source under the same AGPL-3.0 terms and keep the existing copyright and attribution notices intact.
Name and branding are not licensed. The AGPL covers the source code only. "TrickWork", its logo and its branding remain reserved: a fork or derivative must use its own distinct name and branding, and may not present itself as TrickWork.
12. Support this project
Bugs, ideas or feature requests? Please open a GitHub issue.
This is a one-person project. I put a lot of time and effort into building and maintaining it, in whatever free time I have. If it's helped you, I'd genuinely appreciate the support: you're welcome to buy me a coffee.
Install TrickWork on Unraid in a few clicks.
Find TrickWork in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
ghcr.io/junkerderprovinz/trickwork:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3210]/- Network
bridge- Privileged
- false
- Extra Params
--restart unless-stopped
Template configuration
Port the TrickWork web interface listens on.
- Target
- 3210
- Default
- 3210
- Value
- 3210
Container-internal port the app listens on. Must match the WebUI Port above. Advanced - leave as 3210.
- Target
- PORT
- Default
- 3210
- Value
- 3210