A rotation system picks a cyclic order of the edges at each vertex, and this determines
an embedding of the graph on an orientable surface. Here you can change the rotations of
$K_{3,3}$, $K_5$, $K_5 \setminus e$, or the octahedral graph and see what faces and surface you get.
Choose a graph
1Rotation system, $K_{3,3}$
Local rotations σv
2Facial walks
3Fundamental polygons
Each face opens out into a polygon whose sides are its facial walk. Sides sharing a letter (and color) are the same edge, glue them, matching the arrows, and the polygons reassemble the surface.
4Building the embedding
Identify a shared edge {a,b} with its reverse {b,a} to merge the face polygons into one. Once they're a single fundamental polygon, the leftover boundary edges are identified in pairs (arrows), those identifications determine the surface.
The same embedding in 3D: walk each face dart by dart, lift the faces apart, then fetch the real surface from Alexander Metzger's live solver (genus.fly.dev, used with permission) and morph the faces onto it. Drag to rotate once it's 3D.
The 3D surface view is built for K₃,₃ for now, switch to K₃,₃ to use it.