Osmosis from the bottom up
Small blue balls are water and slip through the membrane. Large orange balls are solute and bounce off it. Start with one bounce in slow motion. Then watch thousands of bounces in the box below draw water into the solution, until the solution's back-pressure stops the flow.
A magnified patch of membrane, like the dashed box in the arena below. It opens with every ball in random thermal motion, then zooms in and slows the water so you can follow one solute ball from its bounce to the water it draws in. Fewer balls are drawn than in the box below.
The opening is real thermal motion. After the zoom the water is frozen, a gentle drag between neighboring balls stands in for water's viscosity, and a few scripted nudges stand in for the pressure-driven flow that carries pure water through. The close-up also exaggerates one event: in the full box, each bounce moves only a fraction of a water ball on average.
Pressures are in percent of P₀, the starting pressure of the pure-water side.
Water balls cross the membrane in both directions. Solute balls never get through.
Every solute ball that reaches the membrane bounces back toward the solution at the same speed. Each bounce reverses its momentum: a small push on the solution.
A rebounding solute ball plows into nearby water and carries it away from the membrane. With highlighting on, dragged water turns dark and a pressure deficit trails the solute.
Fewer water balls hit the membrane from the solution side than from the pure side, so water pressure there is lower.
More water crosses into the solution than comes back out.
The added water raises the solution's pressure. Flow stops when that back-pressure matches the push: van 't Hoff's Π = c·kBT.
Percent of P₀, smoothed over a few seconds. Hover for values.
Net count of water balls that crossed from the pure side. Negative means water left the solution.