Grok's Geometry Dash Random Short Level Generator

Real Python in your browser • Short levels (20–50s) • Unique every time

File downloads automatically! Import with GDShare/Geode in Geometry Dash.

import random import js # Constants GROUND_Y = 124 SPIKE_Y = 109 PAD_Y = 109 PORTAL_Y = 124 ORB_Y = 124 FINISH_Y = 124 START_X = 48 START_Y = 139 def add_object(obj_id, x, y, rot=0, sx=100, sy=100, col1=-1, col2=-1): return f"1,{obj_id},1,{int(x)},{int(y)},{sx},{sy},{int(rot)},1,{col1},{col2},1,1,1,1,0,0" def generate_and_download(): random.seed() length = random.randint(6000, 15000) est_time = round(length / 300, 1) name_options = ["ChaosDash", "GrokRand", "QuickChaos", "ShortFury", "PixelRush", "DashRandom", "MiniMayhem", "SpeedSpin", "NeonBurst", "QuantumJump"] name = random.choice(name_options) + f" #{random.randint(1000,9999)}" desc = f"Random short level by Grok! (~{est_time}s chaos)" song_id = random.randint(1, 50000) objects = [] objects.append(add_object(82, START_X, START_Y)) # Start pos # Ground + hazards step = random.randint(20, 40) for i in range(0, length + 200, step): x = i block_id = random.choice([1, 21, 31, 41]) objects.append(add_object(block_id, x, GROUND_Y)) if random.random() < 0.25: hazard_id = random.choice([8, 9, 176]) objects.append(add_object(hazard_id, x + step//2, SPIKE_Y)) # Jump aids num_aids = random.randint(4, 10) aid_xs = sorted([random.randint(400, length-400) for _ in range(num_aids)]) for x in aid_xs: if random.random() < 0.65: pad_id = random.choice([35, 37, 38, 140]) objects.append(add_object(pad_id, x, PAD_Y)) else: orb_id = random.choice([36, 42, 52, 84]) objects.append(add_object(orb_id, x, ORB_Y)) # Portals num_portals = random.randint(2, 5) portal_xs = sorted([random.randint(800, length-800) for _ in range(num_portals)]) for x in portal_xs: portal_id = random.choice([11, 46, 47, 99, 101, 202, 203]) objects.append(add_object(portal_id, x, PORTAL_Y)) # Finish orb objects.append(add_object(43, length + 50, FINISH_Y)) # Decorations deco_ids = [2, 3, 4, 5, 22, 23, 289, 30, 31] for _ in range(random.randint(15, 35)): x = random.randint(150, length-150) deco_id = random.choice(deco_ids) y = random.choice([GROUND_Y-40, GROUND_Y+40, 80, 200, 300]) rot = random.randint(0, 360) objects.append(add_object(deco_id, x, y, rot=rot)) object_str = ";".join(objects) # Build level data keys = [ ("k1", "1"), ("k2", name), ("k3", desc), ("k4", object_str), ("k5", str(song_id)), ("k6", "0"), ("k7", "0"), ("k8", "0"), ("k9", "0"), ("k10", "0"), ("k11", "0"), ("k12", "0"), ("k13", "0"), ("k14", "0"), ("k15", "0"), ("k16", "0"), ("k17", "0"), ("k18", "0"), ("k19", "0"), ("k20", "0"), ("k21", "0"), ("k22", "0"), ("k45", "0"), ("k50", "") ] plist = "".join(f"{k}{v}" for k, v in keys) gmd_content = f"{plist}" # Unique filename filename = f"{name.replace(' ', '_')}_{random.randint(10000,99999)}.gmd" # Auto download blob = js.Blob.new([gmd_content], {type: "text/plain;charset=utf-8"}) url = js.URL.createObjectURL(blob) a = js.document.createElement("a") a.href = url a.download = filename js.document.body.appendChild(a) a.click()o js.document.body.removeChild(a) js.URL.revokeObjectURL(url) # Update UI info_text = f"Downloaded: {name} (~{est_time}s) • Length: {length}px • Song ID: {song_id}" output_html = f"""

File automatically downloaded: {filename}

Check your Downloads folder!

You can also copy the above text and save manually as .gmd if needed.

""" js.document.getElementById("info").innerHTML = info_text js.document.getElementById("output").innerHTML = output_html # Bind button js.document.getElementById("generate-btn").addEventListener("click", generate_and_download)