Welcome! You will find here a growing collection of digital experiences and content by Max Irwin. All code on this site is lovingly handcrafted by yours truly. If you like what you see here and would like to get in touch, you can contact me on twitter @binarymax.

This site is a portfolio of all my fun hobby stuff. To learn more about my professional skills, please visit my profile on LinkedIn.




A web-playable version of the classic chess variant. Like chess, in order to play, you need two players for a game. In-depth rules and guide are available on the site. The entire game was built as a side project over 4 months time, and is fully open source under the MIT License.

Puzzle Bot


Puzzle bot tweets a daily set of puzzles. Inspired by the daily 'Jumble' print media puzzle, the game and bot was built during a holiday vacation in 2014. Follow the bot @pzlbot



A single player anagram game, inspired by the British game show 'Countdown'. The entire game was built as a side project over a week, and is playable on desktop and tablet devices.

Shape Experiment


A single player shape identification game for mobile devices (and also browsers). An exercise in interface and minimalism and intuition, to be quickly understandable and playable by anyone. The game was written in a single day, and tens of thousands of shapes have been identified since release.



A collection of my Father's Kaballah inspired works of art. After his passing, my siblings and I gathered this small selection from his much larger volume of artwork to display on the web.



A tool to draw 7-color 80x20 artworks that can be exported as a bash script to display in a *nix terminal. Useful for creating graphics that identify servers upon connection, or just for fun. Images can be shared as easily as links. Here is the image in the thumbnail which I quickly drew for this card.



A fully functional open source Backgammon engine, UI, and basic AI written in JavaScript and HTML5. Highly compact and efficient, the linked demonstration page runs 24 self-playing games simultaneously.

Auto Jewels


A fully working jewel game set to zero players, and plays itself with a simple AI. An exercise in a case study game application as a "Todo list" of example projects. See both small jewel and big jewel versions.



A basic HTML5 drawing tool. While the site is live the tool is no longer under development. Eventually the domain will house the in-development Palettable sprite illustration app.

Dilated Age of Information

Link to Demo

A commission for an art show 'Conflicts In Time'. The piece shows a color map representation of the time dilation difference for a ping between the observer and the server.

Palette Extractor

Link to Demo

A tool to extract nice-looking palettes from arbitrary images. A set of MegaMan II images are used to demonstrate the algorithm.


Link to Demo

An experiment in data cube structures in javascript, used to efficiently calculate aggregate results of an arbitrary dataset of several dimensions. Two structures are shown, each one having pros and cons, depending on use case.

Reality Remix

Link to Demo

A video remix experiment, with a resulting video run through a custom filter coded in C#. The filter splits a video into frames, remixes the frame using a bitwise Sierpinski carpet algorithm, and stiches the frames back together.

Square Chase

Link to Demo

My javascript entry into the first JS1k competition, with a concept based on a video game I wrote in Pascal in 1995. The demo consists of 4 squares of different colors that leave trails as they flee from the observer's mouse. Clicking a square increments the score by one and the square respawns. The demo is 1024 bytes of hand-golfed javascript.

Tree Generator

Link to Demo

An interactive art project that creates a genetic tree starting from a single seed of observer-defined parameters. The observer can specify trunk size, branch count, leaf size, growth rate, and other parameters. Each generated tree is unique. The piece was displayed as an installation at a show, and participants ordered their printed trees on A3 paper. The resulting image is SVG and can be printed to keep pure vector resolution.


Link to Demo

My Entry into the 2013 Victory Boogie Woogie code competition. Artists were asked to recreate the last work of Piet Mondriaan in Utrect Netherlands. The piece uses a genetic algorithm to slowly recreate the box-like work with circles, lines, or squares. The longer the algorithm runs, the greater the likeness. The resulting image is SVG and can be printed to keep pure vector resolution.


Link to Demo

An early canvas experiment, renders a raytrace of an observer-defined number of spheres of random size and color.


Link to Demo

An experiment which used the Twitter stream API as entropy for randomness to generate a brownian motion image. The resulting images are beautiful and discerning clumps of information. The applicaton no longer works, due to restrictions Twitter placed on its public API, but a screenshot and the code remains for archival purposes.


Ambient Guilloché

A year ago, I created a small demo of animating guilloches as two dimensional graphics on an HTML5 canvas. In this post I revisit the beautiful and elegant patterns as 3d constructs that resonate with sounds from the physical world. read more

Calendar Year Converter

This tool converts a calendar year between Gregorian Common Era (CE) คริสต์ศักราช (ค.ศ.), Buddhist Era (BE) พุทธศักราช (พ.ศ.), Jula Sakarat (JS) จุลศักราช (จ.ศ.), and Ratanakosin Sakarat (RS) รัตนโกสินทร์ศก (ร.ศ.). read more

Porting a Numpy neural network to Torch

This article outlines the process for porting Andrew Trask’s (aka IAmTrask) 11-line neural network from Numpy (Python) to Torch (Lua). I’ve documented my progress here, for those who are interested in learning about Torch and Numpy and their differences. As I started from scratch I hope this can prove useful to others who get stuck or need guidance. read more

Liquid Guilloché

Having recently read a blog post on guilloches, I became intrigued and the post inspired me to recreate them. They are beautiful patterns, and the starting formula to draw a rosette looked very simple to replicate in an HTML5 canvas. The 30 minute project quickly took off into a several hour excursion into the beauty of animated guilloches. read more

The State of State in the Browser

The mechanisms for storing data in the client are inadequate and unprepared for the next generation of web applications. A new solution for persistent state management in the client is needed that is based on well understood foundations long prevalent on the desktop and server. read more


After some hammock driven development, Harissa is mature enough to release some results. Originally intended for entire videos, I found the process better suited for only several frame remixes, usually of an identical source image. read more

Hidden Shapes

I am slowly working on a side-project that makes a video into a mishmash of circles for each frame. I have an early version running, that manually takes a video, splits it into frames, remixes each frame into the circle mishmash, and recomposes the video with the new remixed frames. The project is called 'Harissa'. read more

Artificial Expression

Artificial Expression(AE) draws a parallel to Artificial Intelligence(AI), in that an artificially expressive program will display sentience relating to creating original subjective aesthetics. I explore the ideas behind these complexities, as well as techniques in use today to generate art, and set a standard to use in deciding whether a work is an artificial expression. read more

Anagramica is now FOSS

I'm not entirely sure why I never open sourced it in the first place. After 25 years of coding I've only recently become active in opening my code for others to see and use. I have a cathartic story to tell about a previous project, which I've never told anyone about, and silently open sourced this past winter. read more

The Idea is Art

'What is art' has been debated ad infinitum, and some like to draw the line and say something is not art if it cannot be expressed - as art is, by definition, expression. My argument is that one not even need express the idea outwards with our own voice, hands, or otherwise. The idea can exist purely in one's own mind and still be a work of art. It is expression to oneself, therefore it is art. read more


Github Profile

A good deal of my work is available as Open Source on Github. Much of it is available under MIT license. If you have any questions regarding any package or repository, or would like to contribute, please get in touch! A curated selection of some of my projects on github are summarized in the other cards in this section.


Implements an efficient and flexible floodfill for HTML canvas and byte arrays. Zero dependencies and used by many projects around the web.


Repository for code supporting the two articles above: Liquid and Ambient Guilloche.


Small library for working with an arbitrarily large array of booleans. Written as a utility library while working on Project Euler problems.


Heimdall is a type-safe, documentation oriented, and security minded API library for Express. The goal of Heimdall is to provide an easy way to create reflective and secure REST resources, to enforce documentation standards, to separate req/res from the MVC pattern, and to ensure all incoming and outgoing data is registered, validated, documented, and tested.


Datatype validation, casting, and documentation library for node.js. Originally written as part of Heimdall, it was split out into its own package to be used independently.


An experimental video-filter GUI and Algorithm for the browser. 'Probably the most inneficient way to remix video'


An experimental frame sprite editing suite for the browser. Meant to allow easy pixel style sprite illustrations and animations for use in games, gifs, and other media.


A better working algorithm and library derived from my work on Randriaan, meant to be suitable for any photo. The same algorithm is used to filter frames for Harissa.


A javascript library for plug-and-play hoisting of data and functions into webworkers, for multithreaded browser execution.


Playground and benchmarks for hand-coded 2d graphics in asm.js. Written to test the feasibility of outsourcing entire graphics jobs to a pixel manipulating engine, by rewriting fundamental canvas API methods such as arc and line. The short answer: faster than canvas in FireFox, slower in Chrome (as of November 2014).



On npmjs.org you will find a list of node.js packages I have made available for installation. If you have any questions about any of them or would like to contribute, please get in touch!