Reservoir Vision

Draw a character. A simulated eye jitters over the board, turning the drawing into a signal that drives a reservoir computer. Only the output layer learns.

Draw something to begin.
Compute
Live loop
Per step
Last train
Model in memory
Add characters above, or type a label under the board and press Train.
How it works
  1. Retina. The board is reduced to a 64×64 ink map and read by a 16×16 grid of Gaussian receptors. Each receptor reports the ink under its footprint and how much that changed since the last tick.
  2. Fixational eye movements. The receptor grid never sits still: slow drift, fast tremor and occasional microsaccades shift it by up to a few receptor widths, 120 times a second. That motion is what converts a static picture into a time signal.
  3. Reservoir. The signal feeds a fixed random recurrent network of 400 leaky tanh units (an echo state network). Its weights are generated from a seed and never change.
  4. Readout. A linear layer maps the reservoir state to one score per character. Training runs the eye over your drawing a few times and fits that layer by ridge regression on every collected state. Scores are turned into probabilities with a softmax.
  5. Live view. Inference runs continuously, so the bars breathe with the eye's motion but lean toward what the readout has learned.
  6. Unknown state. A softmax always picks something, so the app also measures statistical leverage: how far the current reservoir state sits from every state seen in training. Familiar drawings score low, unfamiliar ones score many times higher. That ratio drives the "?" bar and can override the digit bars with "Doesn't recognize this drawing."