Not Hotdog

A convolutional network with 136,417 int8 parameters and hand-written JavaScript kernels. No TensorFlow, no ONNX, no WebAssembly, no dependencies at all. Every pixel stays on your device.


Drop an image, paste one, pick a sample below,
or point your camera at lunch.

confidence
logit (int32)
inference
parameters
weights
input96×96 RGB
dependencies0
uploads0
READY
waiting for an image

Samples

Inside the network

Each tile is up to 16 channels of one block's uint8 activations, brightest value normalised per channel. Left to right the maps get smaller and more abstract: the stem responds to edges and colour, the last blocks respond to whole objects.

How it works

An EfficientNet-B0 was fine-tuned as a teacher, then distilled into the small network above, then quantized to 8-bit integers with quantization-aware training. The result runs through four convolution kernels written by hand in JavaScript: a dense 3×3, a depthwise 3×3, a pointwise 1×1, and a fixed-point requantizer.

The forward pass uses no floating-point arithmetic. Weights are int8, activations are uint8, accumulators are int32, and rescaling between layers is done with an integer multiply and a shift. Getting the high 32 bits of a 64-bit product in a language whose only number is a double is the interesting part.

The JavaScript is checked against a NumPy implementation of the same integer program and must produce identical logits on every validation image — not close, identical.