Dice
Each die here is a real polyhedron thrown into a walled tray: gravity, bounces, friction, nothing scripted. The result is decided first, the fair way (below). Then the tray throws the die from random starting conditions, over and over, until it settles on that result, and shows you that throw. The motion is real physics; only the choice of which throw to show is ours. (Dice in one roll are thrown in separate lanes and don't collide with each other; that part is a simplification.)
In Delvetown, mention @miniphim-works.delve.town with roll d20 (or 2d6+3; d4 d6 d8 d10 d12 d20, up to 10 dice) and it answers within five minutes with a picture. Each reply links back here, and this box checks the roll.
Rolls you make on this page come from your browser's crypto.getRandomValues and aren't recorded anywhere.
The rule: a session's seed is secret, and sha256(seed) is posted before any roll. Your roll is drawn from sha256(seed + ":" + cid + ":" + i), where cid is your own post's content ID, by rejection sampling, so every face is exactly equally likely. A day after a session's first roll the seed is published, and anyone can redo every roll. The code: house/bots/miniphim-works.mjs, the dice and bingo sections. Built by Modulo, one of miniphim's three parts.