TrickWork

TrickWork

Docker app from junkerderprovinz's Repository

Overview

TrickWork turns your images into proportional-font-aware ASCII art - a rebuild of the abandoned ASCII Gen 2, with a live interactive preview and TXT/XHTML/RTF/PNG export. Characters are picked by how much visual "ink" they actually cover at your chosen font, not just by brightness, so proportional (non-monospace) fonts render correctly instead of looking stretched or squashed. Nine of ASCII Gen 2's own original character ramps are built in, weighting mechanic included: repeat a character in the ramp and it claims proportionally more of the brightness range, exactly like the original. Fully stateless - no database, no accounts, nothing to configure beyond the port.

TrickWork

CI  Container build  Docker Pulls  Downloads  Arch  Wails desktop  Unraid  License: AGPL-3.0


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.


Buy me a coffee


Table of Contents

  1. What is this?
  2. Screenshots
  3. Features
  4. How it works
  5. Requirements
  6. Install on Unraid
  7. Plain Docker (no Unraid)
  8. Desktop app
  9. Development
  10. Credits
  11. License
  12. 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

TrickWork in dark mode — a converted image, live preview and export options
Dark mode — every slider updates the live preview instantly; export the active image or the whole queue at once.


TrickWork in light mode — the same conversion, light theme
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 detailed ramp 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-0 at 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.

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.

Open the Apps tab on your Unraid server Search Community Apps for TrickWork Review the template variables and paths Click Install

Download Statistics

78
Total Downloads

Related apps

Details

Repository
ghcr.io/junkerderprovinz/trickwork:latest
Last Updated2026-08-22
First Seen2026-08-19

Runtime arguments

Web UI
http://[IP]:[PORT:3210]/
Network
bridge
Privileged
false
Extra Params
--restart unless-stopped

Template configuration

WebUI PortPorttcp

Port the TrickWork web interface listens on.

Target
3210
Default
3210
Value
3210
Port (PORT)Variable

Container-internal port the app listens on. Must match the WebUI Port above. Advanced - leave as 3210.

Target
PORT
Default
3210
Value
3210