NEO(6)
okay so bestie, sit down, hydrate, and let me tell you about neo(6) β the manual page for the digital rain simulator, and honestly? it ate πβ¨
β¨ NAME β¨
neo β simulate the digital rain from "The Matrix" π§οΈπ
π¦ SYNOPSIS π¦
neo [OPTIONS]...
π DESCRIPTION π
okay so picture this: neo recreates the digital rain effect from "The Matrix", and it's iconic fr fr. Streams of random characters will endlessly scroll down your terminal screen. There are so many differing depictions of this effect throughout the Matrix franchise, but neo attempts to closely mimic the scene from "The Matrix" where Cypher explains the code to Neo. It imitates some of the finer details such as the characters used (half-width katakana), uneven colors, color palette, glitching, and flickering. the way it pays attention to detail?? obsessed π
The digital rain is made of many "droplets". Each droplet scrolls vertically down a column. There can be multiple droplets in each column. Some characters on the screen are "glitched" β their values will change randomly until they are erased. The bottom of each droplet is a bit brighter than the rest. little sparkle at the bottom, periodt. β¨
You can run neo without any arguments, but it has many options to customize it to your liking. It can also respond to key presses (try pressing a number! π’), and it accepts a color file (see the "COLOR FILE" section below), which allows neo to display user-defined colors. neo will use Unicode characters by default if it detects a locale that supports UTF. she's multilingual, she's flexible, she's everything. π
π OPTIONS π
neo takes options in two forms: short and long. Short options cannot include an equal sign but long options can. Example for -S/--speed:
These will work:
-S 16
--speed 16
--speed=16
These will not:
-S=16
--S 16
bestie. read that twice.-S=16is a no.--S 16is a no. the vibes are off and the parser will simply not be doing that π
-a,--asyncβ Makes each column of characters scroll at an independent speed. Each column's speed is still limited by the-S/--speedarg. All droplets in a column will always scroll at the speed. they move together, like a squad π«Ά-b,--bold=NUMβ Controls if and howneodisplays bold characters.0=off,1=random (default),2=all.-C,--colorfile=FILEβ Read the colors from a file. This option is mutually exclusive with the-c/--colorand--colormode=0options. See the "COLOR FILE" section below for more info. pick one, babe, you can't have both π-c,--color=COLORβ Sets the foreground text color. This option is mutually exclusive with the-C/--colorfileand--colormode=0options. The available colors are:green,green2,green3,yellow,orange,red,blue,cyan,gold,rainbow,purple,pink,pink2,vaporwave, andgray. rainbow and vaporwave are RIGHT THERE, just saying π-D,--defaultbgβ Use the default terminal background color. This option is mutually exclusive with the-C/--colorfileand--colormode=0options.-d,--density=NUMβ Controls how many droplets will appear onscreen.NUMis a decimal number. Its default value is1.0. Values greater than0.0but less than100.0are allowed. However, values in the range[0.25, 4.0]will probably look best. the sweet spot is real π-F,--fullwidthβ Use two columns per character. This option is useful when displaying characters that take two columns to display such as Greek and full-width katakana.-f,--fps=NUMβ Sets a frame rate target. By default,neowill run at60Hz.neodoes not attempt to query the OS for any display info. So it can't match your monitor's refresh rate by default unless it happens to be60Hz. Lower frame rates will reduce CPU usage and improve battery life on portable devices. eco queen behavior π-G,--glitchpct=NUMβ Sets the percentage of characters onscreen that glitch.NUMis a decimal number between0.0and100.0inclusive. The default value is10.0(i.e. 10%).-g,--glitchms=NUM1,NUM2β Controls how often the characters on screen glitch. A "glitch" refers to when a character changes into another. Each glitch is accompanied by a flickering of the character's color if colors are enabled. After each glitch,neowill wait for some time before doing the next glitch. The time it waits is chosen randomly to be between the two values provided (inclusive).NUM1andNUM2are positive integers that represent milliseconds. Their default values are300and400.-h,--helpβ Shows the help message. when in doubt π«Ά-l,--lingerms=NUM1,NUM2β Controls how long characters stay onscreen after they finish scrolling. For each column,neowill pick a random value betweenNUM1andNUM2inclusive.NUM1andNUM2are positive integers that represent milliseconds. The default values are1and3000.-M,--shadingmode=NUMβ Controls howneoassigns color values to characters on the screen.0=random (default),1=gradient.-m,--message=STRβ Displays a message in the center of the screen. The message is gradually uncovered as characters stream past it. This effect is similar to the title reveal in the movies. The message should be surrounded with double quotes.neoparses arguments usinggetopt_long(), which does not have Unicode support. So, unfortunately, this argument only accepts simple ASCII text. The message will not display well if you also use the-F/--fullwidthoption. To unveil the message faster, the following options may help:
neo -m "the message" --speed=12 --density=3 --lingerms=1,1 --rippct=0
-p,--profileβ Turns on the profiling mode. This mode functions as normal except it times how long each frame takes and writes the values to a file calledtime_profile.txtin the current working directory.-r,--rippct=NUMβ Sets the percentage of droplets that stop scrolling before reaching the bottom of the screen.NUMis a decimal number between0.0and100.0inclusive. The default value is33.0(i.e. about a third).-S,--speed=NUMβ Controls how fast characters scroll down the screen.NUMis a decimal number that sets the number of characters drawn per second. The default value is8.0. If-a/--asyncis used, this option sets an upper bound on the value chosen for each droplet's speed.-s,--screensaverβ If this option is set,neowill exit on the first key press. one tap and she's gone π-V,--versionβ Displays the version, build date, copyright, and license.--chars=NUM1,NUM2β Tellsneoto display Unicode characters betweenNUM1andNUM2inclusive.NUM1andNUM2are Unicode code points in hexadecimal (e.g.0x1F030). This argument can be used multiple times. If--charsetis not used,neowill only use the values provided by this option. If a charset is also specified,neowill use both the charset and the characters provided by this option.--charset=LANGβ Sets the charset that is used to draw characters onto the screen. It can be combined with the--charsoption. The supported charsets are:ascii,extended,english,dec,decimal,digits,punc,bin,binary,hex,hexadecimal,katakana,greek,cyrillic,arabic,hebrew,devanagari,braille, andrunic. braille and runic?? the range. the versatility. π--colormode=NUMβ Sets the color mode. The accepted values are0,16,32, and256.0disables color (i.e. mono).16selects 16 colors.32selects 32-bit color.256selects 256 colors.--maxdpc=NUMβ Sets the maximum number of droplets per column. The default value is3.--noglitchβ Disables character glitching. if you want her calm and stable, no chaos, this is it.--shortpct=NUMβ Sets the percentage of shortened droplets. If a droplet is not shortened, it will extend from the top of the screen to final line, which is often the bottom of the screen but not always (see also:-r/--rippct).NUMis a decimal number between0.0and100.0inclusive. The default value is50.0(i.e. 50%).
πΉοΈ KEYS πΉοΈ
You can press keys while neo is running to control its behavior. The key bindings cannot be changed without modifying the program code. Some keys can be held to increase their effect (e.g. holding UP increases speed further). hold it down, bestie, she'll keep going π
Here are the available key controls:
SPACEβ clears the screenUPβ increases the scrolling speedDOWNβ decreases the scrolling speedRIGHTβ increases the number of characters that are glitchyLEFTβ decreases the number of characters that are glitchyTABβ toggles the shading mode between random and gradientESCβ exitsneo+β increases the number of droplets onscreen-β decreases the number of droplets onscreenaβ toggles asynchronous droplet speedpβ pausesneoqβ exitsneo1β sets the color togreen2β sets the color togreen23β sets the color togreen34β sets the color togold5β sets the color topink26β sets the color tored7β sets the color toblue8β sets the color tocyan9β sets the color topurple0β sets the color togray!β sets the color torainbow@β sets the color toyellow#β sets the color toorange$β sets the color topink%β sets the color tovaporwave
the number keys are a whole vibe check for your terminal π press one and watch her transform.
π¨ COLOR FILE π¨
okay so neo can read a whole file that tells it what the background color is and what <em>all</em> the foreground colors are. you hand it over with the -C/--colorfile option. it's giving custom palette era π
you can write comments using //, #, ;, *, or @. comments can chill on their own line or tag along after the data on any line, no judgment. the first line that isn't blank and isn't a comment should be the version string, and it should look like this:
neo_color_version N
where <em>N</em> is the color file version number, which rn is 1. the version string is optional β if you skip it, neo just assumes your file follows the latest version's format. and bestie, that could potentially break old color files. ye have been warned! π but fr, neo will try to maintain backwards compatability with older color file versions as long as their version is actually given.
each data line in the file describes a color. the first line is the background color. every line after that describes a foreground color. each file must contain at least two lines: one for the background and one for the foreground. typically you'll wanna put the foreground colors in order of ascending brightness. neo will <strong>not</strong> sort the colors for you, so that's on you bestie. the last color should usually be very bright (e.g. white). β¨
each data line in the file specifies one value or four values. if only one value is given, it's treated as a 16 or 256 terminal color code (e.g. 16 is black). if four values are given, the first is treated as a 16/256 color code and the other three are the RGB components of the 32-bit color. each component is a value from 0 to 1000, which closely mimics how ncurses handles color. each value is separated by a comma, and whitespace is allowed. π«Ά
if more than one value is given on a line, then <strong>all four values must be given</strong>. lines do not all have to have the same number of components, i.e. some lines can just specify the 16/256 color code while others can specify all four values. mix and match, it's fine.
on most systems, if a value of -1 is provided for the 16/256 color code, this will set the color to the system default. this can be useful if you want to keep the default background. π
all ncurses implementations should allow you to override at least the first 256 colors, assuming your terminal supports it. some will let you override even more than that. ncurses should restore all colors back to their previous state as long as neo exits cleanly. π
if either of the 16 or 256 colormode options is used, all 32-bit RGB components in the color file will be parsed if they are given, but they will be unused. (parsed and then just... ignored. the audacity.)
Example 1: blue text on a red background using only 256 color codes
196
21
Example 2: different shades of purple text on a yellow background with some 32-bit color components
228,917,888,59
54
92
129,750,963,128
Example 3: default background and various shades of green using only 256 color codes
-1
34
40
46
82
231
β‘ PERFORMANCE β‘
neo can have two main performance issues: high CPU utilization and stuttering. a terminal emulator with GPU acceleration (e.g. Alacritty) may significantly improve these issues. the CPU utilization by neo itself is fairly low, even at high frame rates on large screens. <em>however</em>, your terminal emulator may use substantial CPU resources to draw everything. without a fast terminal emulator, this application may use up a whole CPU core or three. π not a drill.
sometimes the text will not scroll smoothly. again, a fast terminal emulator will probably help. you will also typically want the frame rate (i.e. --fps) to be evenly divisible by the character speed (i.e. -S/--speed). sometimes, the glitching effect will lead to stuttering because a substantial number of characters onscreen will have to be redrawn. reducing the glitchiness (i.e. --glitchpct) or disabling glitching (i.e. --noglitch) may help. π₯
if you experience performance issues, here are some things to try:
- Use a GPU-accelerated terminal emulator
- Run
neoon a smaller screen/window - Reduce the frame rate (e.g.
--fps=30) - Reduce the number of droplets onscreen (e.g.
-d 0.5) - Reduce the character speed (e.g.
--speed=6) - Disabling glitching (i.e.
--noglitch) - Disable colors (i.e.
--colormode=0) - Disable bold characters (i.e.
--bold=0) - Disable Unicode characters (i.e.
--charset=ascii)
here's a "potato mode" config that should perform well on most systems:
neo --fps=20 -d 0.5 --speed=5 --noglitch --colormode=0 --bold=0 --charset=ascii
β¨ EXAMPLES β¨
Example 0: just run it
neo
Example 1: sets a faster, asynchronous scrolling speed with 256 colors
neo -S 12 -a --color=green3 --colormode=256
Example 2: red text with a custom message and Cyrillic characters
neo --color=red --charset=cyrillic -m "IN SOVIET RUSSIA, COMPUTER PROGRAMS YOU!"
Example 3: displays golden Greek characters that are full-width
neo --color=gold --charset=greek -F
Example 4: uses --chars to draw Unicode dominoes
neo --chars=0x1F030,0x1F093 --fullwidth
π AUTHORS π
Written by Stewart Reive π
π REPORTING BUGS π
create an issue on GitHub: https://github.com/st3w/neo
Β©οΈ COPYRIGHT
Copyright Β© 2021 Stewart Reive
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. π«Ά
π DISCLAIMER
this program is not affiliated with "The Matrix", Warner Bros. Entertainment Inc., Village Roadshow Pictures, Silver Pictures, nor any of their parent companies, subsidiaries, partners, or affiliates. ngl just a lil guy falling down a screen, that's all. π
π SEE ALSO
π¦ AFTERWORD
You get used to it. I... I don't even see the code. All I see is blonde, brunette, redhead. Hey! You uh... want a drink? :)
and that's the whole page bestie!! π this one's neo <strong>version 0.6.1</strong> from <strong>Feb 21 2022</strong> (it's a section 6 page, iykyk). go forth and let the glyphs rain. periodt. π
β¨πΈ
π¦ where this page comes from
- debian bookworm: neo-cli 0.6.1-1+b1 Β· GPL-3.0-or-later
- debian trixie: neo-cli 0.6.1-1+b1 Β· GPL-3.0-or-later
- fedora 43: neo 0.6.1-11.fc43 Β· GPL-3.0-or-later
- fedora 44: neo 0.6.1-12.fc44 Β· GPL-3.0-or-later
- nixos 26.05: neo 0.6.1
- nixpkgs unstable: neo 0.6.1
- ubuntu noble: neo-cli 0.6.1-1 Β· GPL-3.0-or-later
- ubuntu questing: neo-cli 0.6.1-1
- ubuntu resolute: neo-cli 0.6.1-1build1 Β· GPL-3.0-or-later
- ubuntu stonking: neo-cli 0.6.1-2 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms