Skip to content

Repository files navigation

Total generations

oooo oooo .o88o. . `888 `888 888 `" .o8 888 .oo. .oooo. 888 o888oo .o888oo .ooooo. ooo. .oo. .ooooo. 888P"Y88b `P )88b 888 888 888 d88' `88b `888P"Y88b d88' `88b 888 888 .oP"888 888 888 888 888 888 888 888 888ooo888 888 888 d8( 888 888 888 888 . 888 888 888 888 888 .o o888o o888o `Y888""8o o888o o888o "888" `Y8bod8P' o888o o888o `Y8bod8P' 

Turn images into character art, or type a phrase to generate copy-ready FIGlet banners.

Features

  • Image mode with ASCII, Braille, Blocks, Unicode, Binary, Matrix, Symbols, and custom glyph sets.
  • Fit, crop, aspect, brightness, contrast, gamma, saturation, threshold, grain, sharpness, blur, and dithering controls.
  • Curated image presets plus a dither comparison view for experimenting with output quality.
  • Original ↔ generated-art comparison with a draggable divider; the source is transformed to the exact rendered output dimensions.
  • Text mode with 38 curated FIGlet styles, including Graffiti, Cyberlarge, Fun Faces, Star Wars, and more.
  • Output formatting for plain ASCII, //, /* */, SQL, JavaDoc, Bash, SGML, Echo, Python, and Batch comments.
  • Palette-aware text output in Black & White, Green Terminal, Amber CRT, and Blue.
  • PNG, SVG, HTML, ANSI, TXT export, clipboard copy, drag-and-drop, and pasted images.
  • Renderer settings links for sharing configurations. Uploaded images are intentionally not embedded in URLs.
  • A live generations badge backed by Upstash Redis.

Operations

The usage counter and POST /api/uses require an Upstash Redis REST URL and token. Configure UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN (or the documented Vercel KV aliases in .env.example). If Redis is missing or unavailable, POST /api/uses intentionally responds with 503 without provider details; GET /api/uses safely reports count: 0 and configured: false.

POST /api/uses uses an atomic Redis Lua script for a fixed-window limiter. Defaults are 30 requests per 60 seconds and can be bounded with USAGE_RATE_LIMIT_MAX and USAGE_RATE_LIMIT_WINDOW_SECONDS. On Vercel, the limiter keys requests by a SHA-256-truncated x-vercel-forwarded-for value; this header is trusted only when VERCEL=1. Outside Vercel, malformed values, or absent headers, it deliberately falls back to one shared key rather than trusting client-supplied forwarding headers. This avoids per-client bypasses but can throttle all local or non-Vercel traffic together. Limited requests receive 429 {"error":"rate_limited"} plus Retry-After and X-RateLimit-* headers.

Live examples

Generated on the live Halftone site.

Alligator — HALFTONE

 ::: ::: ::: ::: :::::::::: ::::::::::: :::::::: :::: ::: :::::::::: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+:+: :+: :+: +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ :+:+:+ +:+ +:+ +#++:++#++ +#++:++#++: +#+ :#::+::# +#+ +#+ +:+ +#+ +:+ +#+ +#++:++# +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# +#+ #+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+#+# #+# ### ### ### ### ########## ### ### ######## ### #### ##########

Banner 3D — CREATE

:'######::'########::'########::::'###::::'########:'########:
'##... ##: ##.... ##: ##.....::::'## ##:::... ##..:: ##.....::
##:::..:: ##:::: ##: ##::::::::'##:. ##::::: ##:::: ##:::::::
##::::::: ########:: ######:::'##:::. ##:::: ##:::: ######:::
##::::::: ##.. ##::: ##...:::: #########:::: ##:::: ##...::::
##::: ##: ##::. ##:: ##::::::: ##.... ##:::: ##:::: ##:::::::
. ######:: ##:::. ##: ########: ##:::: ##:::: ##:::: ########:
:......:::..:::::..::........::..:::::..:::::..:::::........::

About

Generate beautiful ASCII art from images using halftone dithering in your browser.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages