Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
NEO(6)				 neo User Manual			  NEO(6)

NAME
     neo - simulate the digital rain from "The Matrix"

SYNOPSIS
     neo [OPTIONS]...

DESCRIPTION
     neo  recreates the digital rain effect from "The Matrix". Streams of random
     characters will endlessly scroll down your terminal screen. There are  many
     differing	depictions  of this effect throughout the Matrix franchise.  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  charac-
     ters  used  (half-width katakana), uneven colors, color palette, glitching,
     and flickering.

     The digital rain is made of many "droplets". Each	droplet  scrolls  verti-
     cally  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.

     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 num-
     ber!), and it accepts a color file (see the "COLOR  FILE"	section  below),
     which allows neo to display user-defined colors. neo will use Unicode char-
     acters by default if it detects a locale that supports UTF.

OPTIONS
     neo  takes  options  in two forms: short and long. Short options cannot in-
     clude 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

     -a, --async
	    Makes each column of characters scroll at an independent speed. Each
	    column's speed is still limited by the -S/--speed arg. All	droplets
	    in a column will always scroll at the speed.

     -b, --bold=NUM
	    Controls  if  and how neo displays 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/--color and --colormode=0 options. See the "COLOR FILE" sec-
	    tion below for more info.

     -c, --color=COLOR
	    Sets the foreground text color. This option  is  mutually  exclusive
	    with  the  -C/--colorfile  and  --colormode=0 options. The available
	    colors are: green, green2, green3, yellow, orange, red, blue,  cyan,
	    gold, rainbow, purple, pink, pink2, vaporwave, and gray.

     -D, --defaultbg
	    Use  the  default terminal background color. This option is mutually
	    exclusive with the -C/--colorfile and --colormode=0 options.

     -d, --density=NUM
	    Controls how many droplets will appear onscreen. NUM  is  a  decimal
	    number.   Its default value is 1.0. Values greater than 0.0 but less
	    than 100.0 are allowed. However, values in	the  range  [0.25,  4.0]
	    will probably look best.

     -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, neo will run at 60Hz. neo does
	    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 be 60Hz.
	    Lower  frame rates will reduce CPU usage and improve battery life on
	    portable devices.

     -G, --glitchpct=NUM
	    Sets the percentage of characters onscreen that  glitch.  NUM  is  a
	    decimal number between 0.0 and 100.0 inclusive. The default value is
	    10.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  ac-
	    companied by a flickering of the character's color if colors are en-
	    abled.  After  each glitch, neo will wait for some time before doing
	    the next glitch. The time it waits is chosen randomly to be  between
	    the  two values provided (inclusive). NUM1 and NUM2 are positive in-
	    tegers that represent milliseconds. Their default values are 300 and
	    400.

     -h, --help
	    Shows the help message.

     -l, --lingerms=NUM1,NUM2
	    Controls  how  long  characters  stay  onscreen  after  they  finish
	    scrolling.	For  each  column,  neo will pick a random value between
	    NUM1 and NUM2 inclusive.  NUM1 and NUM2 are positive  integers  that
	    represent milliseconds. The default values are 1 and 3000.

     -M, --shadingmode=NUM
	    Controls  how  neo assigns 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 grad-
	    ually 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.  neo parses arguments using getopt_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/--fullwidth  option.	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
	    called "time_profile.txt" in the current working directory.

     -r, --rippct=NUM
	    Sets  the percentage of droplets that stop scrolling before reaching
	    the bottom of the screen. NUM is a decimal number  between	0.0  and
	    100.0 inclusive. The default value is 33.0 (i.e. about a third).

     -S, --speed=NUM
	    Controls  how fast characters scroll down the screen. NUM is a deci-
	    mal number that sets the number of characters drawn per second.  The
	    default  value  is	8.0.  If -a/--async is used, this option sets an
	    upper bound on the value chosen for each droplet's speed.

     -s, --screensaver
	    If this option is set, neo will exit on the first key press.

     -V, --version
	    Displays the version, build date, copyright, and license.

     --chars=NUM1,NUM2
	    Tells neo to display Unicode characters between NUM1 and NUM2 inclu-
	    sive.  NUM1 and NUM2 are Unicode code points  in  hexadecimal  (e.g.
	    0x1F030).  This argument can be used multiple times. If --charset is
	    not used, neo will only use the values provided by this option. If a
	    charset is also specified, neo will 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 --chars option. The supported charsets are:
	    ascii,  extended,  english, dec, decimal, digits, punc, bin, binary,
	    hex, hexadecimal, katakana, greek, cyrillic, arabic, hebrew, devana-
	    gari, braille, and runic.

     --colormode=NUM
	    Sets the color mode. The accepted values are 0, 16, 32, and  256.  0
	    disables  color (i.e. mono). 16 selects 16 colors. 32 selects 32-bit
	    color. 256 selects 256 colors.

     --maxdpc=NUM
	    Sets the maximum number of droplets per column. The default value is
	    3.

     --noglitch
	    Disables character glitching.

     --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).   NUM is a decimal number between 0.0 and 100.0 inclu-
	    sive. The default value is 50.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  fur-
     ther).

     Here are the available key controls:

	    'SPACE' - clears the screen
	    'UP' - increases the scrolling speed
	    'DOWN' - decreases the scrolling speed
	    'RIGHT' - increases the number of characters that are glitchy
	    'LEFT' - decreases the number of characters that are glitchy
	    'TAB' - toggles the shading mode between random and gradient
	    'ESC' - exits neo
	    '+' - increases the number of droplets onscreen
	    '-' - decreases the number of droplets onscreen
	    'a' - toggles asynchronous droplet speed
	    'p' - pauses neo
	    'q' - exits neo
	    '1' - sets the color to green
	    '2' - sets the color to green2
	    '3' - sets the color to green3
	    '4' - sets the color to gold
	    '5' - sets the color to pink2
	    '6' - sets the color to red
	    '7' - sets the color to blue
	    '8' - sets the color to cyan
	    '9' - sets the color to purple
	    '0' - sets the color to gray
	    '!' - sets the color to rainbow
	    '@' - sets the color to yellow
	    '#' - sets the color to orange
	    '$' - sets the color to pink
	    '%' - sets the color to vaporwave

COLOR FILE
     neo  can  read a file that specifies the background color and all the fore-
     ground colors. The file is given via the -C/--colorfile option.

     You can write comments using "//", "#", ";", "*", or "@". Comments  can  go
     on separate lines or after the data on any line. The first line that is not
     blank  or	a  comment should be the version string. The version string line
     should look like:

	    neo_color_version N

     where "N" is the color file version number, which is currently 1.	The ver-
     sion string is optional, and if it is omitted, then neo  will  assume  that
     the  file	adheres  to  the latest version's format. This could potentially
     break old color files. Ye have been warned! neo will try to maintain  back-
     wards compatability with older color file versions so long as their version
     is actually given.

     Each  data  line in the file describes a color. The first line is the back-
     ground color. Each subsequent line describes a foreground color. Each  file
     must  contain  at	least  two lines: one for the background and one for the
     foreground. Typically, you will want to put the foreground colors in  order
     of  ascending  brightness.  neo  will  not  sort the colors. 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 is 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 al-
     lowed.

     If more than one value is given on a line, then all  four	values	must  be
     given.   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.

     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 previ-
     ous state as long as neo exits cleanly.

     If either of the 16 or 256 colormode options is used, all 32-bit RGB compo-
     nents in the color file will be parsed if they are given, but they will  be
     unused.

     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 stutter-
     ing.  A terminal emulator with GPU acceleration (e.g. Alacritty)  may  sig-
     nificantly  improve  these  issues.  The  CPU  utilization by neo itself is
     fairly low, even at high frame rates on large screens. However, your termi-
     nal 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.

     Sometimes	the text will not scroll smoothly. Again, a fast terminal emula-
     tor 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	substan-
     tial  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:

	    1. Use a GPU-accelerated terminal emulator
	    2. Run neo on a smaller screen/window
	    3. Reduce the frame rate (e.g. --fps=30)
	    4. Reduce the number of droplets onscreen (e.g. -d 0.5)
	    5. Reduce the character speed (e.g. --speed=6)
	    6. Disabling glitching (i.e. --noglitch)
	    7. Disable colors (i.e. --colormode=0)
	    8. Disable bold characters (i.e. --bold=0)
	    9. Disable Unicode characters (i.e. --charset=ascii)

     Here is 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 (C) 2021 Stewart Reive

     License  GPLv3+:  GNU  GPL  version   3   or   later   <https://gnu.org/li-
     censes/gpl.html>.	This is free software: you are free to change and redis-
     tribute it.  There is NO WARRANTY, to the extent permitted by law.

DISCLAIMER
     This  program  is not affiliated with "The Matrix", Warner Bros. Entertain-
     ment Inc., Village Roadshow Pictures, Silver Pictures,  nor  any  of  their
     parent companies, subsidiaries, partners, or affiliates.

SEE ALSO
     locale(1), localectl(1)

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? :)

neo version 0.6.1		   Feb 21 2022				  NEO(6)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=neo&sektion=6&manpath=FreeBSD+Ports+15.1.quarterly>

home | help