Welcome to the future of route generation! I’ve been moving fast on this project and am excited to share the first live demo of route generation using custom mutation algorithms. In building, testing, and refining, I’ve found that, unlike other tools of this nature (as this is a solver rather than a simple tool that casts out a few points and connects them into a simple loop), this tool has too many options to set up the generation run, and I’m not sure what option(s), settings, etc., are best!
That being said, I am showcasing a demo that isn’t watered down and doesn’t give an easy button; it gives all of the options, in all their complexity. I invite you to test it, break it, play with everything. What I’ve put together with this is a new idea in route creation: the concept that you can create the best profile that creates the best route for you. Then, you can save publicly, and others can try it! Essentially, I’ve found that this has so many combinations and options that I can’t say what the best settings are, and thought it perhaps wasn't up to just me in the first place.
Now, don’t worry about actually breaking anything. Instead of imposing a ton of restrictions on everything from iteration count to length, to refinements and more, I just give you 45 seconds. I have a workstation set up to handle these requests; it can scale up to 62 separate requests at once and handle a queue if need be. If you go over, your job is canceled, and you can pull back some settings and try again.
I decided to go this direction to give ultimate freedom; this route generation engine, even with that limitation, can absolutely generate routes thousands of km long, or search every possibility for your local marathon route. Given this, feel free to enter a distance, and tune some of these key settings in Advanced Settings in case it times out:
Length weight keeps distance honest; low values let other biases dominate quickly.
No-accept stop limits how long the solver will keep rejecting moves; No-improve stop caps stagnant iterations.
Refinement passes polish the final route; lower counts finish faster, higher counts chase perfection.
Elevation sampling is aggressive (every ~50 m and at every intersection), so expect higher gain totals than many apps report.
FYI, all settings, advanced and otherwise, only affect you so have fun experimenting.
For a quick explainer as to how this route solver works under the hood, it functionally generates a route by touring through hundreds or thousands of points with a carefully tuned bike-specific profile. These points are then randomly moved, removed, and added in batches, a route is drawn between them, the route is scored, and it may be accepted.
This scheduling runs through a cooling regime where the system is more likely to accept a worse mutation early on and less likely later. Then the process repeats in a refinement stage with mutations targeting the worst portions of the route directly. This is known classically as simulated annealing and is a technique that can explore the likely best solution to a problem without having to solve for every permutation.
Art mode traces the black pixels of a high-contrast stencil and uses the road network to connect evenly spaced points along the outline. The example below is the included star.png stencil—thin, fully connected lines with a clear inside/outside work best.
Multi-stop routing lets you define a start/end (optionally the same) and any number of intermediate checkpoints. The engine distributes your preferred distance across the legs and balances them with the usual weights.
Route variations
Switch off to repeat the last route.
Use the same number to recreate any route.
Route exclusions
No exclusion zones yet.
Dial in the engine. Most tweaks here can slow generation—use intentionally.