Short version: the network predicts the same thing in both phases, a velocity v_θ(x_t, t). Training fits that velocity with regression. Sampling uses the trained velocity as the right-hand side of an ODE and integrates it.
I drew the two phases as two lanes that share one network box: flow_matching.svg (open it with open flow_matching.svg on macOS or xdg-open flow_matching.svg on Linux; it follows your light/dark setting).
Training (no ODE, one network call per example)
Sampling (no target, many network calls)
Why the same network works for both The training target x₁ − x₀ is different for every pair, even pairs whose lines pass through the same point x at time t. Squared-error regression therefore learns the average: v_θ(x, t) ≈ E[x₁ − x₀ | x_t = x]. That average is a single velocity field, and integrating it from t = 0 to t = 1 moves the noise distribution onto the data distribution.
The usual mix-ups
Convention: t = 0 is noise and t = 1 is data, as in Lipman et al. with σ_min = 0 (this is also rectified flow). Many diffusion papers run time the other way, so their signs flip.
If it helps, I can make a small page where you change the number of Euler steps and see how the sample path changes.