Decode, encode, and edit Geometry Dash .gmd level files
Project description
gmdlib
A Python library for decoding, encoding, and editing Geometry Dash .gmd level files.
Installation
pip install -e .
Quick Start
from gmdlib import load, save
# Load a .gmd file
level = load("MyLevel.gmd")
print(f"Object count: {level.object_count}")
print(f"Bounding box: {level.bounding_box()}")
# Iterate over objects
for obj in level:
print(f"id={obj.id} x={obj.x} y={obj.y}")
# Move all objects up by 30 units
level.transform(lambda o: setattr(o, "y", (o.y or 0) + 30))
# Save the modified level
save(level, "MyLevel_modified.gmd")
API Reference
load(path) / save(level, path)
from gmdlib import load, save
level = load("level.gmd")
save(level, "level_out.gmd")
GMDLevel
| Attribute / Method | Description |
|---|---|
level.objects |
list[GDObject] — all objects |
level.header |
The level settings string |
level.object_count |
Number of objects |
level.bounding_box() |
(min_x, min_y, max_x, max_y) |
level.unique_object_ids() |
Set of GD object IDs used |
level.filter(fn) |
Filter objects by predicate |
level.filter_by_id(id) |
Filter objects by GD object ID |
level.transform(fn) |
Apply a function to every object in-place |
level.add_object(obj) |
Append a new object |
level.remove_objects(fn) |
Remove matching objects; returns count removed |
level.to_level_string() |
Serialise to raw level string |
level.to_gmd_string() |
Serialise back to full .gmd XML |
GDObject
Named property shortcuts (all gettable and settable):
| Property | Key | Type |
|---|---|---|
obj.id |
"1" |
int |
obj.x |
"2" |
float |
obj.y |
"3" |
float |
obj.h_flip |
"4" |
bool |
obj.v_flip |
"5" |
bool |
obj.rotation |
"6" |
float |
obj.scale |
"36" |
float |
obj.groups |
"57" |
list[int] |
Raw access for any property:
obj["21"] # get by numeric key string
obj["21"] = "3" # set
obj.get("21", "0") # with default
obj.remove("21") # delete
Low-level codec
from gmdlib.codec import (
decode_level_string, # base64url+gzip → plain text
encode_level_string, # plain text → base64url+gzip
extract_b64, # pull encoded data from .gmd XML
inject_b64, # put encoded data back into .gmd XML
fix_padding, # fix GD's broken base64 padding
)
Examples
Teleport all objects to a fixed X position
level = load("level.gmd")
level.transform(lambda o: setattr(o, "x", 0.0))
save(level, "level_out.gmd")
Remove all objects of a specific type
level = load("level.gmd")
removed = level.remove_objects(lambda o: o.id == 8) # remove all spike objects
print(f"Removed {removed} spikes")
save(level, "level_out.gmd")
Create a new object and add it
from gmdlib import load, save
from gmdlib import GDObject
level = load("level.gmd")
new_obj = GDObject()
new_obj.id = 1 # block
new_obj.x = 300.0
new_obj.y = 0.0
level.add_object(new_obj)
save(level, "level_out.gmd")
Work directly with the level string
from gmdlib.level import GMDLevel
level = GMDLevel.from_level_string("kA,1;1,1,2,100,3,200;")
print(level[0].x) # 100.0
raw = level.to_level_string()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
gmd_editor-0.1.0.tar.gz
(8.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gmd_editor-0.1.0.tar.gz.
File metadata
- Download URL: gmd_editor-0.1.0.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6a7504c0e572fddb66b12f0232bce4754b58f1b364ed04169322a234a5c412f
|
|
| MD5 |
790f69db535f60cf5c028e82d06f29df
|
|
| BLAKE2b-256 |
1f491318589902f339751d85723e41391e5c0f7d84386cc3e1d92e39d5f280d3
|
File details
Details for the file gmd_editor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gmd_editor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee0d13cb54cc2a0b81616c52d2773bd78a97c275bcaa268c57252c9588525751
|
|
| MD5 |
77709fca46752c7ef2dc35b292ae921d
|
|
| BLAKE2b-256 |
30c952a837f72a60a3c8ba09d5d8d115d520e834a2b3259eeadebab9041122bb
|