Generate a climb

Predict grade

Click holds to build a climb

Click a hold on the board image. The app appends the corresponding frame token using the selected semantic role.

    What the controls mean

    Temperature
    Sampling randomness. Lower values are more conservative; higher values are more exploratory.
    Target V-grade
    The grade token given to the generator. The generated route is also checked by the grade predictor.
    Known climb
    An exact match against the tokenized dataset: same board, same angle, and same hold-role set.
    Validity
    A structural check: enough holds, no duplicate placements, at least one start, and at least one finish.

    Research demo caveat

    This is an experimental model demo. Generated climbs and predicted grades may be wrong, especially at rare grades or sparse board/angle combinations.

    How this works

    Routes are converted into tokens such as <BOARD_TB2>, <ANGLE_40>, and <TB2_p652_start>.

    The generator samples a token sequence. The grade predictor removes the grade token and estimates difficulty from the board, angle, and hold-role tokens.

    Angle scope

    The physical boards can be used at steeper angles than this demo exposes. This model snapshot is intentionally restricted to the angle range used in training/evaluation: TB2 up to 50° and Kilter up to 55°.

    The restriction avoids asking the models to extrapolate into sparse, noisier high-angle data where grades and route distributions are less reliable.

    Data acknowledgement

    Board layouts, hold metadata, and route data are derived from Tension Board 2 and Kilter Board datasets. This project is unaffiliated with Tension Climbing or Kilter. The route generator is inspired by Andrej Karpathy's nanoGPT.

    Choose a board and run a request

    The climb overlay will appear below. You can also click holds to build a route for prediction.

    Known climb means an exact match against the tokenized dataset for the same board, angle, and hold-role set.

    Board background
    Raw result JSON
    {}