English ยท ็ฎไฝไธญๆ
- Drop and convert: PNG / JPG / WebP / GIF โ drag it into the browser and the ASCII lands in milliseconds
- Nothing is uploaded: pixels are sampled on a local
<canvas>, and production shipsconnect-src 'none'so the page cannot phone home - Six charsets: from classic luminance ramps to a dithered 2ร4 braille matrix with 8ร the pixel density
- Live controls: columns, brightness, contrast, invert, and green / grayscale / original color โ re-converted every frame
- Flexible export: copy plain text, download
.txtor.png, or generate a share card with the parameters baked in - CRT terminal aesthetics: scanlines, phosphor glow, and a vim statusbar โ the whole site is one terminal
Open semaphore.bobochang.cn/tool and drop an image in. That is the whole flow โ no sign-up, no queue, no watermark. For photographic detail, try the image to braille ASCII art guide and open its one-click Braille preset.
Prefer to run it yourself:
git clone https://github.com/can4hou6joeng4/Semaphore.git
cd Semaphore
npm install
npm run dev # dev servernpm test # unit tests (vitest)
npm run build # type-check + build to dist/
npm run preview # serve the built dist/Six charsets, six textures โ every ramp runs dark to bright, and the engine maps each cell by luminance:
| Charset | Ramp | Best for |
|---|---|---|
standard |
.:-=+*#%@ |
The classic โ safe in any monospace context |
detailed |
70-level grayscale ( .'^",:;Il!i~+โฆ#MW&8%B@$) |
Portraits and photos |
blocks |
โโโโ |
Pixel art, low-res posters |
minimal |
.:*# |
Minimal logos, tiny avatars |
binary |
01 |
Cyberpunk, code-rain looks |
braille |
2ร4 braille dots + dithering | 8ร pixel density at the same width โ the detail king |
Your image is sampled pixel by pixel on a local <canvas>; conversion, rendering and export all happen inside your browser process. This site has no backend API, no analytics scripts in the page, no cookies, and not a single third-party request โ the font is self-hosted too.
That is enforced, not just promised: the deployed pages ship Content-Security-Policy: โฆ connect-src 'none', so the page cannot open a fetch, XHR or WebSocket to anywhere (a client-side analytics beacon would be blocked on purpose). Open devtools, watch the network tab stay silent, then close the tab โ your image never left the device.
The operator still sees aggregate edge request counts on Cloudflare Pages (which paths were hit). That is HTTP traffic for the static files themselves, not a second phone-home from your browser, and it never includes image bytes. Details: FAQ.
image โโโถ canvas sampling โโโถ luminance grid โโโถ character mapping โโโถ ASCII
(cover crop) (per-cell mean) (ramps / braille) โโโถ .txt / .png / share card
Vite 8 ยท TypeScript 7 (strict) ยท vanilla DOM, zero frameworks ยท Cloudflare Pages.
Pages live at the repo root โ index.html (landing), tool.html (the converter), usecases.html, faq.html โ with per-page behavior in the src/main-*.ts entries. The conversion engine is src/ascii-engine.ts, share cards are src/sharecard.ts, and the binding design contract is STYLEGUIDE.md. Repository maintenance rules and the traps a fresh read will not reveal live in AGENTS.md.
Semaphore is the sailors' way of talking across water: no telegraph, no network โ just a pair of arms and two flags, spelling a message out to the distance one character at a time. This tool does the same thing to pictures: it breaks an image into characters so it can travel anywhere plain text can go โ terminals, code comments, READMEs, chat windows.
Harbor shelters knowledge, Beacon warns of danger, Atlas charts the voyage โ Semaphore signals the image.
- Sample photos from Wikimedia Commons (public domain / CC0)
- Monospace font: JetBrains Mono โ self-hosted as a 15 KB variable subset (SIL OFL 1.1)
- Hosted on Cloudflare Pages
- If Semaphore saved you a trip to an upload-first converter, give it a star or share it.
- Found a bug or want a charset that does not exist yet? Open an issue โ see CONTRIBUTING.md first.
- Questions and ideas go to Discussions.
Semaphore is open source under MIT, see LICENSE. The ASCII art you make with it is yours โ posters, readmes, merch, client work, anything.

