Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
github.com/kevin-cantwell/dotmatrix
****** image input ****** ****** terminal output ******
Dotmatrix is a simple and fun package & command-line utility for encoding images to all-braille unicode representations. It can be used as a standalone command-line utility or as a package. Currently jpeg, gif, png, and bmp types are supported.
Animated gif support is experimental, but awesome ;) NOTE: Some terminals, such as iTerm2, have a poor refresh rate when playing animated gifs. This cannot be helped. The default terminal on OSX is quite speedy though. This is what it looks like:
import (
"image"
"os"
"github.com/kevin-cantwell/dotmatrix"
)
func Encode(img image.Image) error {
return dotmatrix.Print(os.Stdout, img)
}
> go get -u github.com/kevin-cantwell/dotmatrix/cmd/dotmatrix
> dotmatrix --help
NAME:
dotmatrix - A command-line tool for encoding images as unicode braille symbols.
USAGE:
1) dotmatrix [options] [file|url]
2) dotmatrix [options] < [file]
VERSION:
0.1.0
AUTHOR:
Kevin Cantwell <kevin.cantwell@gmail.com>
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--invert, -i Inverts image color. Useful for black background terminals
--gamma value, -g value GAMMA less than 0 darkens the image and GAMMA greater than 0 lightens it. (default: 0)
--brightness value, -b value BRIGHTNESS = -100 gives solid black image. BRIGHTNESS = 100 gives solid white image. (default: 0)
--contrast value, -c value CONTRAST = -100 gives solid grey image. CONTRAST = 100 gives maximum contrast. (default: 0)
--sharpen value, -s value SHARPEN greater than 0 sharpens the image. (default: 0)
--mirror, -m Mirrors the image.
--mono Images are drawn without Floyd Steinberg diffusion.
--motion, --mjpeg Interpret input as an mjpeg stream, such as from a webcam.
--framerate value, --fps value Force a framerate for mjpeg streams. Default is -1 (ie: no delay between frames). (default: -1)
--help, -h show help
--version, -v print the version
Given this input image:
And with a sharpen factor of 100 (max) you get this:
$ dotmatrix --sharpen 100 < face.jpg
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣜⢽⡺⣿⣿⣺⣿⣏⣿⣿⣿⣿⢿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣜⡞⣧⢅⢳⡙⣼⣻⡢⡺⡼⣻⢞⡯⣟⣽⢻⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣯⣿⣿⣿⡿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡜⣖⢔⠕⢸⡳⡢⡱⠅⡞⣽⠱⢳⢫⡟⡞⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣱⣿⣿⣵⡿⣿⣟⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣷⢿⡽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⡿⡽⣿⢿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⢣⢫⠀⠣⠂⢘⠐⢁⢊⠠⠉⢎⢎⢣⢿⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⡼⡜⡾⡯⡫⢽⢽⣗⢟⣿⣿⣿⣿⣿⣿⣿⣟⡮⣟⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⡿⡭⡺⣫⣟⡷⣟⢾⢽⢿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣎⠄⢊⢂⠠⠈⠄⠂⠀⢁⢑⠁⢜⡧⡗⢡⢮⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣜⢜⢌⢊⠈⣄⢜⢿⡫⣿⣿⣿⣿⣿⣿⣿⡿⡱⣻⢟⣿⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⢝⠔⢕⣵⢭⡿⡾⣷⣝⢮⢝⡣⣟⡝⢟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣵⡤⠀⠀⠀⠀⠀⠀⠅⢅⠃⡕⢁⠁⡌⢙⢿⣿⣿⣿⣿⣿⣿⣿⣿⡷⠀⡔⠅⠂⠈⢈⠲⠜⣿⣿⣿⣿⣿⣿⣿⣗⢩⢻⢼⣻⣯⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿
⣿⡿⣥⡱⡕⢃⡱⢋⡯⣎⠾⣜⠳⣕⢦⠑⢕⠢⠻⡿⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⡀⡀⠀⠀⠀⠀⠕⠀⠀⠀⠀⠐⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⡃⠡⠂⠀⠈⠄⠐⢅⢸⣿⣿⣿⣿⣿⣿⣟⢈⢯⣟⣿⣿⢿⣿⣿⣿⣿⣯⢿⣻⣿⣿
⣿⣿⢵⡪⢂⡎⢄⠅⡒⢵⢹⢊⢋⢢⠁⠁⠂⠈⠀⠀⠀⠁⠙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣷⡀⠠⠀⠀⠈⠀⠐⠢⠙⣿⣿⣿⣿⣿⣟⠔⣷⡿⡷⡽⣷⣿⣿⣿⣿⣫⢿⣻⣿⣿
⣿⣿⣿⣿⣿⣧⣧⡬⡐⠦⠉⣉⢃⢂⠁⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣻⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠅⣋⣿⣿⣿⣿⣿⣿⢜⢈⣜⢯⣻⡯⣿⣿⣿⣿⢮⢷⣿⣾⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⣧⣅⡁⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣷⡆⠀⠀⠀⠀⠀⠀⠀⡽⣿⣿⣿⣿⢽⢂⠲⠼⢭⢾⣾⣿⣿⣿⣿⢞⣽⣾⢟⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⢧⢃⠡⢡⣡⣜⣿⣿⣿⣿⣿⢽⢿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣆⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠨⣿⣿⣿⣿⡏⡂⠀⠡⠐⢹⣽⣿⣿⣿⣻⠝⡧⣻⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿⣿⣿⣽⣿⣄⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⡧⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⡇⠀⠈⠀⡈⣐⣿⣿⣿⣿⣞⠆⡊⣻⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡅⠀⠀⠀⠀⣐⣿⣿⣿⣿⣟⢪⣺⣿⣿⣟
⣿⣿⣿⣽⣿⣿⡿⡿⢿⢟⠟⠻⠛⠛⠚⠛⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠠⣼⣿⣿⣿⣿⢎⢮⣿⣿⡿⣾
⣿⣿⣿⡺⡪⡊⡂⢁⠌⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⡂⠀⠀⠀⠀⠀⣿⣿⣿⣿⠁⠀⠀⠀⢀⢼⣿⣿⣿⠽⣈⣻⣿⣿⢯⣿
⠿⠿⣿⣺⡪⣢⡢⡡⡢⣑⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠹⢿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⠆⠀⠀⠀⠀⠀⣿⣿⣿⣿⠀⠀⠀⠀⣰⣿⣿⣟⢟⢅⣽⣿⣿⣏⣿⣿
⠀⠀⢽⡾⣿⣿⣿⣿⣿⣿⣗⢯⣇⢷⡵⣶⣦⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠈⣿⣿⣿⣿⠂⠀⠀⠀⠀⢀⣿⣿⣿⡟⠀⠀⠀⠠⣿⣿⣟⠝⠤⡢⣻⣿⢕⣽⣿⣿
⣴⣾⣾⣿⣟⣿⣿⣿⣿⣿⢎⢗⣵⣫⡻⣿⣿⣿⣿⣿⣶⣦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⣿⣿⣿⣿⠂⠀⠀⠀⠀⢰⣿⣿⣿⠇⠀⠀⠀⣸⣿⡿⠜⠌⡷⣽⣿⡯⣷⣻⣿⠟
⣿⣾⣿⣿⣿⣿⣿⣿⡟⣎⠪⡝⡜⡾⣺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣄⣀⠀⠀⠀⠀⠀⠀⠉⠛⢿⣿⣿⣿⣿⣷⣆⠀⠀⠀⠀⠈⢻⣿⣿⣿⣷⠀⠀⠀⠀⢸⣿⣿⣿⠀⠀⠀⠀⠀⣼⣿⣿⡏⠀⠀⠀⢠⣿⣯⠇⠀⣾⣿⣿⢳⣽⣿⡿⠃⢁
⣿⣿⣿⣿⣿⣿⣿⣿⠉⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⢻⣿⣿⣿⡆⠀⠀⠀⠈⣿⣿⣿⠀⠀⠀⠀⢀⣿⣿⣿⠀⠀⠀⠀⣼⡿⡞⠀⢠⣿⣿⡻⡈⣿⡿⠑⣰⣾
⣿⣿⡟⠉⢏⢿⢏⠣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠻⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⠈⠹⣿⣿⣿⣿⣦⡀⠀⠀⠀⠙⣿⣿⣿⡄⠀⠀⠀⣿⣿⣿⠀⠀⠀⠀⣼⣿⣿⡏⠀⠀⠀⢰⣿⡻⠁⠀⣾⠋⢙⠄⣪⡷⠁⣸⣿⣿
⣿⣿⡁⢐⢨⢝⠄⡕⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⢿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣄⠀⠀⠀⠘⢿⣿⣧⠀⠀⠀⢼⣿⣿⠀⠀⠀⠀⣿⣿⣿⠃⠀⠀⠀⣼⡿⠃⠀⢰⠏⠀⢐⢴⡿⢕⣠⣿⣿⣿
⣿⡿⠀⠀⠜⡠⡃⣬⣔⢖⡽⣺⢝⢽⢿⣿⣶⣶⣶⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠛⠿⣿⣿⣿⣿⣶⣦⡀⠀⠀⠀⠙⢿⣿⣿⣧⠀⠀⠀⠘⣿⣿⡄⠀⠀⢸⣿⣿⠀⠀⠀⠀⣿⣿⡟⠀⠀⢀⣼⣿⠁⠀⣠⡞⠁⠀⡰⣽⣿⣾⣿⣿⣿⣿
⣿⠅⠀⠀⢌⢂⣾⣿⡳⡣⣏⢞⣮⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣦⣀⠀⠀⠈⠻⣿⣿⣷⡄⠀⠀⠹⣿⣷⡀⠀⠘⣿⣿⡄⠀⠀⢸⣿⡿⠀⠀⠀⢸⣿⠋⠀⣰⡟⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⠟
⣿⠂⢀⣠⣾⢾⣿⣿⡝⣮⢳⡹⣼⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠉⠙⠻⢿⣷⣦⡀⠀⠈⠙⣿⣿⣦⣄⠀⠉⢻⣧⠀⠀⠙⣿⡇⠀⠀⢼⡿⠋⠀⢠⡾⠛⠁⢠⡖⠋⠀⠀⣠⣿⣿⡿⢱⣿⣿⠟⠁⠀
⣿⡕⢩⣯⣞⣿⣿⣿⠚⠈⠁⠁⠁⠉⠉⠉⠉⠛⠛⠛⠛⢛⢛⢛⢛⠛⠛⠛⠟⠟⠿⣿⣿⣿⣿⣿⣶⣶⣤⣀⡀⠀⠀⠀⠀⠈⠙⢿⣶⣄⡀⠀⠙⢿⣿⣦⡀⠀⢻⣆⣀⣠⣿⣧⣤⣤⣿⣀⣀⣴⠟⠀⣠⡴⠟⠀⠀⢀⣰⣿⡿⠕⠈⠐⠉⠀⠀⠀⠀
⣿⣶⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⢹⣽⣿⣿⡿⢟⢿⣿⣿⣿⣿⣶⣶⣶⣴⣌⠍⠋⠛⠛⠛⠻⠿⠿⢶⣦⣤⣄⣀⠀⠈⠉⠛⠲⢲⢔⡽⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⠛⠿⣿⣿⣿⠏⠋⠉⠀⣀⣤⣶⣿⣿⡯⠋⠀⠠⣟⠀⠀⠀⠀⢀
⣿⣿⣿⣿⣿⡿⡝⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣫⣻⡟⠣⠀⠘⢻⡝⠛⠙⣽⠋⠙⢿⣿⣿⣮⣤⡂⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠛⠚⢋⣉⣥⡾⣿⣿⠑⠈⠿⣍⣉⣩⠾⠁⠀⠈⢋⣻⣮⣵⣷⣾⣿⣿⣿⣿⠿⠛⠀⠀⠀⡨⣿⠄⢀⣠⣾⣿
⣿⣿⣿⠉⠈⡊⢪⠀⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣾⣿⣿⣿⣶⣤⣀⡀⠈⠁⠉⠀⢀⢀⣈⢷⣿⣿⣿⣿⣷⣦⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⡖⠋⠉⢁⣼⠛⠝⢵⣤⣤⣤⣥⣀⣤⣤⣴⣾⠿⠿⠟⠛⠉⠉⠉⠉⠀⠀⠀⠀⠀⢀⡴⣧⣿⣿⣾⣿⣿⣿
⣿⣿⣿⣷⡠⠀⠅⠅⢀⣔⢾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠁⠀⠀⠀⠈⠛⠛⠛⠛⠋⠛⠙⠋⠉⠉⠁⢀⣶⣾⠟⠋⣠⠴⢩⢾⣿⢿⡧⡉⠳⢧⣤⣄⣀⣀⣀⣠⣤⣤⣤⣤⣤⣦⣶⣶⣾⣿⢯⢿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣷⣶⣬⣶⢕⣝⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⡿⠋⢁⡴⠊⣡⠔⡃⢐⡞⠈⢧⠸⣦⣤⡈⠉⠋⠛⠛⠛⠛⠛⠛⠟⠿⠿⠿⠿⠛⠉⠈⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣗⢼⣺⣿⣿⣿⣿⣿⣿⠿⠿⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣤⣤⣶⣾⣿⡿⠟⠀⣠⠋⠀⡸⠁⡔⠁⡯⡐⡇⠸⡄⠉⢻⣿⣷⣦⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡳⣝⡿⠛⠋⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣶⣾⣿⣿⣿⣿⣿⣿⠿⠛⠋⠉⠀⢠⣴⠃⢠⡾⠁⡞⠀⢸⡇⣇⠱⣄⠹⣄⠀⠈⠙⠻⢿⣿⣿⣿⣾⣷⣶⣶⣶⣶⣦⢄⢆⣾⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣶⣿⣿⣿⣿⣿⡿⠿⠛⠛⠉⠁⠀⠀⠀⠀⣠⣴⡿⠁⣰⣿⠃⢰⠇⠀⣾⡇⢹⡄⠹⡇⠹⣷⣄⡀⠀⠀⠀⠙⠻⠿⣿⣿⣿⣿⣿⣿⣣⢻⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣶⣶⣿⣿⣿⣿⣿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣾⡿⠋⠀⣰⣿⠃⠀⣼⠀⢀⣿⡇⠸⣷⠀⢹⣄⠙⠻⣷⣦⣄⠀⠀⠀⠀⠀⠉⠙⠛⠛⠟⠜⢽⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⢀⣤⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⠟⠀⠀⢠⣿⠇⠀⢰⡗⠀⢐⣿⡇⠀⣿⡇⠀⢻⣆⠀⠘⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⢀⣤⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣾⣿⣿⣿⠗⠁⠀⠀⣠⣾⣿⠀⠀⣽⠃⠀⢘⣿⡇⠀⢹⣿⡄⠈⢻⣷⡄⠀⠙⠻⣿⣿⣿⣶⣄⡀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣾⣿⣿⣿⣿⠟⠁⠀⠀⠀⣴⣿⣿⡇⠀⠀⣿⠀⠀⢸⣿⣷⠀⠀⣿⣧⠀⠀⢿⣿⡀⠀⠀⠈⠿⣿⣿⣿⣿⣿⣶⡷⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⣯⣿⠟⠛⠁⠀⠀⠀⢀⣼⣿⣿⣿⠃⠀⢀⣿⠂⠀⢸⣿⣿⠀⠀⢻⣿⡄⠀⠈⢿⣿⣆⡀⠀⠀⠈⠛⢿⣿⣿⣿⠝⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣾⣿⣿⣿⣿⣿⢋⠡⣤⡀⠀⠀⠀⢠⣾⣿⣿⡟⣃⣠⣤⣾⠋⠀⠀⣼⣿⣿⠀⠀⠈⣿⣷⡀⠀⠘⣿⣿⣷⡄⠀⠀⠀⠀⠉⠉⠁⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⠟⠉⠀⠉⠑⠩⠙⣲⣴⣾⣿⣿⡟⠋⠙⠉⣿⣿⠇⠀⠀⠀⢿⣿⣿⡀⠀⠀⢹⣿⣷⡀⠀⠙⢿⣿⣿⣦⣄⡀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⠁⠀⠀⠀⢠⣿⣿⠃⠀⠀⠀⢸⣿⣿⣇⠀⠀⠘⣿⣿⣧⠀⠀⠀⠻⣿⣿⣿⣿⣷⣿⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⠃⠀⠀⠀⠀⣸⣿⣿⠀⠀⠀⠀⢘⣿⣿⣿⣆⠀⠀⢻⣿⣿⣧⠀⠀⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⣿⣿⣿⠀⠀⠀⠀⠀⣿⣿⣿⣿⡄⠀⠀⢻⣿⣿⡄⠀⠀⠀⠀⠈⠙⠙⣩⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⣀⣼⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⢰⣿⣿⣿⠀⠀⠀⠀⠀⣿⣿⣿⣿⣷⠀⠀⠈⢿⣿⣿⣦⡀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⢠⣠⣀⣄⣤⣾⣿⣿⣿⣿⣿⡂⠀⠀⠀⠀⢀⣿⣿⣿⣿⡀⠀⠀⡀⣠⣿⣿⣿⣿⣿⡆⠀⠀⠈⢿⣿⣿⣿⣦⡀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⠿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠈⠉⢹⣿⣿⣿⣿⣿⣿⠟⠛⠛⠛⠚⠛⣻⣿⣿⣿⣿⠛⠙⠚⠛⠙⢿⣿⣿⣿⣿⣧⠀⠀⠀⠘⣿⣿⣿⣿⠟⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡯⢊⢹⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⡄⠀⠀⠀⠙⣿⣿⠃⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢏⠄⠀⠝⡁⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⠄⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⡄⠀⠀⠀⣸⡅⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣳⣿⣿⠅⡀⠂⠅⠢⡂⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⡟⠡⠪⣒⢲⡲⣔⢖⣾⣿⣿⣿⣿⣿⡂⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⡀⢠⣾⣿⣿⣄⠀⠀⠀⢽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣗⢷⣿⣿⠐⠀⠠⠁⡑⠨⡂⡀⠀⠀⣴⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠈⠀⠁⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣷⣆⠄⠀⠀⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⢣⡫⣞⣟⣿⢷⡡⠁⠠⠁⠄⠅⡊⢶⣀⣺⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠠⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠘⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⡂⠀⠀⢈⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⡟⢝⢜⢜⢼⡳⣯⢿⣝⠆⡀⠂⢁⠐⡀⡊⣺⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠐⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠸⠋⠁⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣮⡢⠀⠀⢀⠑⢛⠿⡿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⡿⡻⡹⢨⢘⢌⠆⡧⣳⣫⢯⣟⢮⠢⠀⠂⡀⠂⠠⢨⢺⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠨⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠔⡈⠄⠁⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⡨⡐⠀⡐⡀⡂⡑⠝⡿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⡿⡟⡝⠜⡌⠪⡐⠅⡆⡇⣗⢵⣫⢗⡽⡪⢂⠁⢂⠠⠁⠨⢐⢽⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⣿⣿⣿⣿⣿⣿⣧⢀⢀⠂⠅⡁⠄⠂⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣗⡦⡡⠠⡐⠠⢂⢑⠌⢎⠻⡻⣿⣿
⣿⡿⡫⡣⡱⡨⢌⠪⠨⡊⢔⢑⢜⢜⢼⢕⣯⡳⣝⢜⠄⡈⠠⠀⠌⠠⢁⠳⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⢀⠀⠀⠀⠀⠀⠀⢨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠁⠌⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠻⣿⣿⣿⣿⣿⣿⣽⢮⢱⠠⡑⡐⡐⠡⡡⡑⢅⢇⢟
⡣⢣⢃⠪⡂⠪⡐⢌⠪⡐⢅⠪⡢⡳⡹⣝⢮⢞⢎⠆⠅⡐⢀⢁⠈⡐⢀⠑⡿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣑⠳⣕⣖⢤⢤⢤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠡⢀⠀⡀⠁⡀⠀⠀⠀⠀⠀⠀⠀⠙⠿⡿⣿⣿⣿⣿⣯⢧⡣⡂⡢⢈⢂⠢⠨⢂⠪⠢
⡘⢔⠡⡑⠌⡌⢔⠐⢅⠢⡡⢣⢱⢹⣪⡳⣝⡕⡇⡇⠅⠂⡂⠐⡀⢂⠐⡈⢜⣿⣿⣿⣿⣿⣿⣿⣿⣿⡢⡫⡒⣕⢝⢕⢇⢯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⡂⠄⡀⠂⠀⠐⠈⠀⠀⠂⠀⠀⠀⠀⠍⢝⢟⣿⣿⣿⣿⡺⣜⢔⠡⡂⠌⠌⡐⠡⡑
⠌⡢⢑⠨⠨⡐⡐⡡⢁⠪⡐⡱⡸⡸⡲⣹⡪⡺⡸⡐⡁⠡⠀⢂⠐⢐⢀⢂⢘⢾⣿⣿⣿⣿⣿⣿⣿⣿⡇⡇⡇⡇⡕⡑⡕⡱⡹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡅⠄⠄⠂⠐⠀⠐⠀⠀⠀⠀⠀⠐⠈⡈⠪⢳⢻⣯⣷⡿⣧⣳⡱⡨⡂⠅⠌⡂⠌
⠨⡐⠔⠡⡑⡐⠌⢔⠡⡑⢌⢎⢎⢎⣏⢮⡪⡣⡣⡊⠄⡡⠈⠄⠂⡐⢀⠂⠢⡹⣿⣿⣿⣿⣿⣿⣿⣿⣯⡪⡎⡇⡇⡣⡱⡨⡘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡡⢂⠐⠀⡀⠀⠠⠐⠀⠂⠐⠀⠀⠠⠨⢘⠸⡸⡪⣟⣿⣺⣵⢳⡘⠌⠔⢐⠡
⠡⢊⠌⠌⢔⢨⠨⡢⢑⠌⡎⡆⣗⢕⢧⢳⢱⢱⢑⠌⡂⠄⠅⠌⢐⠀⡂⠌⢌⠪⣿⣿⣿⣿⣿⣿⣿⣿⣿⣺⡸⡱⡑⡕⢌⢆⠕⡽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣕⢄⢁⠀⠀⠀⠀⠀⠀⠀⠄⠂⠀⠂⠂⡑⠨⢊⢳⢝⣿⣺⢧⡇⡇⡕⡐⠄
⢌⢂⢪⠨⡢⡡⡱⡘⡌⡪⡸⡸⡸⡜⡎⡎⡮⡪⢢⠑⢄⢑⠨⠐⡐⢀⠂⠡⠂⢕⣻⣿⣿⣿⣿⣿⣿⣿⣿⡷⡕⡕⢌⠪⡊⡢⠡⢣⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⢀⠂⠁⠐⠀⠀⠀⠀⡀⠠⠐⠀⠁⡀⠌⢂⢕⢝⢮⣟⣯⣯⡺⡔⢔⠡
⣢⡣⣕⢕⣕⢜⢬⢢⢣⢱⢱⢱⢱⢱⢱⢱⢱⢑⠅⡊⡐⡐⠠⠡⠐⠠⢈⠨⢈⠢⢽⣿⣿⣿⣿⣿⣿⣿⣿⣿⡳⡨⠂⠕⠨⠨⠊⠄⡱⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡵⣌⠔⠀⠂⠈⠀⢀⠀⠠⠐⢈⠠⢐⠐⠔⡌⢎⡳⣝⢾⣺⢵⡫⡢⡕
⡳⡹⡪⢯⢺⢹⢱⢝⢎⢇⢧⢓⢕⢕⢕⢱⢑⠬⡨⢐⢐⠠⢑⠈⠌⢐⠀⢂⠐⡈⢮⣿⣿⣿⣿⣿⣿⣿⣿⣿⣗⢅⠅⢁⠁⠡⢑⢀⠂⡑⠸⢽⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡵⣝⢬⢈⠄⠁⠄⡀⢂⠨⢐⠨⡢⡣⡣⣣⢳⡹⡜⣝⢞⢽⡺⡝⣞
⠪⡊⡪⢊⠜⡘⠌⢆⠣⡃⢇⠇⢇⠇⡇⡣⡱⢑⢌⠢⡂⢅⠢⠨⠈⠄⡈⠠⠐⠀⢕⢿⣿⣿⣿⣿⣿⣿⣿⣿⣟⡆⠅⠠⠈⠐⢐⢐⠨⢀⠅⠊⠕⡻⡻⣿⣿⣿⣿⣿⣿⣿⣿⡿⣯⣟⡷⣕⡥⡱⡐⠄⢅⢊⢂⠣⡱⢘⠜⢌⠢⡃⡣⡑⢕⠱⡑⡑⡑
⠑⠐⠌⠔⠨⠐⠡⠡⠈⠢⠁⠪⠐⠑⠌⠢⠊⠢⠢⠑⠌⠂⠌⠌⠌⠂⠄⠡⠈⠨⠨⠳⠻⠿⠿⠿⠿⠿⠿⠿⠿⠸⠀⠂⠀⠁⠐⠠⠨⠐⠠⠈⠐⠠⠙⠞⠾⠝⠯⠯⠟⠽⠳⠫⠟⠎⠯⠺⠪⠏⠮⠑⠅⠂⠅⠅⠊⠄⠕⠠⠑⠐⠔⠨⠠⠑⠐⠌⠌
The input image is decoded and treated with Floyd Steinberg image diffusion in order to capture gray tones in monochrome. Each pixel is then mapped to a matrix of braille Unicode points and the braille symbols are written to an io.Writer
in such a way as they appear to reconstruct the image, pixel-for-pixel. Each pixel is mapped to a monochrome color (black or white) depending on a fairly standard RGB luminosity algorithm.
The command-line utility determines the resolution of the output based on the number of columns in the current terminal, so if you make your terminal wider you may get a higher-resolution picture.
Some interesting reading on how braille unicode points work.
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.