The Unicode Machine is a language visualization and generative art tool the lets you explore the vast realms
of Unicode character
sets and their code-points, commonly known as letters, glyphs, or emojis.
Adding Character Sets
You can add sets individually via Add Set, or all at the same time with the Search function (examples to
try: Hangul, Latin, Symbols, Arrow, Number, CJK)
You can do an "OR" search to combine results with the pipe symbol: "katakana|hiragana"
⚠️ Large characters sets will be truncated to one full screen if not in a Chart mode.
⚠️ Some searches may add multiple sets and tens of thousands of glyphs - these may take several moments.
Unicode Paint & Custom Text
Every character is editable in any mode by clicking on it - you can put one character into each cell for a
grid-like effect, or type a longer message into a single cell for more natural looking text.
To remove text, you can click on the glyph and backspace the character (any mode), or use the Eraser
(paint mode)
Generative Mode
Enter a JS expression that will generate an index into the combined character list at each position in the
grid.
Available variables. Many of these will be different for each cell.
i (natural index position in the grid starting in upper left and going right - i values
are available in the Indexes dropdown.)
t (time - using this variable and enabling Time will start the animation loop)
d (distance from center in pixels)
x (horizontal pos from left in pixels)
y (vertical pos from top in pixels)
center.x (center position horizontal in pixels)
center.y (center position vertical in pixels)
width (width of svg element in pixels)
height (height of svg element in pixels)
row (current row)
col (current column)
COLS (total number of columns)
ROWS (total number of rows)
TOTAL (total number of glyphs)
Available functions:
pick(arg1,arg2...) pick randomly from list of values. A value can be a variable, for
example:
pick(col,21)
alt(arg1,arg2...) alternate between (pick sequentially from) a list of values. A value
can be a variable, for example:
alt(row,26)
match(predicate, value) returns value if predicate expression is true, null (blank) if
false. For example:
match(d>400,row)
randInt(min, max) returns random Integer between min and max. For example: