terminal_images is a Deno module and CLI tool, written in TypeScript, for displaying images in the terminal.
It supports PNGs, JPGs, GIFs and pixel arrays, and has support for animated GIFs and transparent images.
To install the CLI tool, run the following from the command line:
deno install --allow-read --allow-net -f -n terminal_images https://deno.land/x/terminal_images@3.1.0/cli.ts
Alternatively, terminal_images can be installed from nest.land at the URL
https://x.nest.land/terminal_images@3.1.0/cli.ts
.
Then run
terminal_images https://deno.land/images/artwork/hashrock_simple.png
...and you should see something like this:
Note that the size might be different, as by default it adapts to the size of your terminal.
You can also use the module, which exports two async functions:
getImageStrings
and printImage
, which both take in an object with the same
properties.
Here is an example of how you can use it:
import { printImage } from "https://deno.land/x/terminal_images@3.1.0/mod.ts";
printImage({
// replace this with the URL or local file path of the image you want to print out
path: "https://deno.land/images/artwork/deno_city.jpeg",
// by default the size of the image is set to fit in the terminal,
// but you can override it with the width property
width: 56,
});
This should output something like this:
Property | Type | Description | Default Value | CLI Flag |
---|---|---|---|---|
path |
string | The path or URL of the input image. | No default | --file or -f or the first CLI argument |
rawFile |
Uint8Array | The raw data of the input image. (You can use this instead of path ) |
No default | [No CLI flag] |
rawPixels |
{data: Uint8Array; width: number; height: number} | The rgb(a) data (as well as the height and width) of the input image. (You can use this instead of path or rawFile ) |
No default | [No CLI flag] |
color |
boolean | Whether the output should be in color. | true |
--no-color or -n to turn off color |
characterMap |
string | string[] | See the section on character maps for more information. | By default a character map isn't used, and high-res mode is used instead. | --character-map or -m |
inverted |
boolean | Whether the character map should be mapped from light to dark instead of dark to light. Normally you will want to set this to true if your terminal is in a dark theme. | false |
--inverted or -i |
width |
number | The number of characters wide the image should be. | The maximum value where all of the image is visible at once | --width or -w |
animationLoops |
number | The number of times the animation loops, if the image is animated. | 1 | --animation-loops or -l |
transparencyThreshold |
number | The alpha threshold for considering a pixel transparent or opaque. Set to 0 to ignore transparency and 255 to set anything with even a little transparency to be completely transparent. Note that the terminal can only display completely transparent and completely opaque colors. | 1 | --transparency-threshold or -t |
Because the size of the image automatically adapts to the size of your console,
the image produced will have a higher resolution (unless you have manually set
width
) if the font size is smaller and the terminal window is larger, as more
can fit on the screen.
The "character map" is the characters that are used to display the image. If no character map is specified, it will default to high(er) resolution mode--see the module usage example above.
The characters at the beginning of the character map should be the darkest and
the ones at the end be the lightest. You can switch this around by using the
inverted
flag/property.
If you are using the module, you can set the character map to an array of strings, where each element will be used as a pixel color (rather than each character of the string).
"@#?)l+-. "
and
blocky images using character maps like █▓▒░
.\
)..
after a '
as one is displayed much lower down than
the other.Flag | R | Reason |
---|---|---|
--allow-net |
_ | To fetch images from the web |
--allow-read |
_ | To use images stored locally |
Either --allow-net
or --allow-read
is needed when using path
(--file
in
the CLI tool). When using rawFile
or rawPixels
no permission flags are
required.
For more example outputs, have a look at the examples folder.
Contributions are welcome and greatly appreciated! Just pick something to do (the todo list above is a good starting point) and let me know you want to work on it by opening an issue or commenting on a relevant existing issue.
If you think you have found a bug, or would like to make a suggestion, please open an issue (after checking for similar issues).
terminal_images is under the open source MIT license. See the LICENSE file for legal words.