Decode, encode, and edit Geometry Dash .gmd level files
Project description
gmd-editor
A Python library for decoding, encoding, and editing Geometry Dash .gmd level files.
Installation
pip install gmd_editor
Quick Start
from gmd_editor 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 gmd_editor 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 gmd_editor.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
from gmd_editor import load, save
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
from gmd_editor import load, save
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 gmd_editor import load, save
from gmd_editor 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 gmd_editor.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.4.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.4.tar.gz.
File metadata
- Download URL: gmd_editor-0.1.4.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 |
7bcbeabbc114df5746d165bc95298e3cfcfd6b1fa28a89b530c295bc9096bf7a
|
|
| MD5 |
643bb2c4eca2d47624cf1d8099d46ac2
|
|
| BLAKE2b-256 |
6a106e895bfb6ea995717745994aa959cfe001711ad2067d694863b7b39e2a73
|
File details
Details for the file gmd_editor-0.1.4-py3-none-any.whl.
File metadata
- Download URL: gmd_editor-0.1.4-py3-none-any.whl
- Upload date:
- Size: 9.4 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 |
e3e9a8a29b0370f9b469cf1c4dd27c36ca0c7c8e19d1efe443db70017c7578b5
|
|
| MD5 |
edf837b437a4c15b9ef3c74cbaa1d8c5
|
|
| BLAKE2b-256 |
c586d2e7dd70beef8e5138dda328a572d372c69f35b9653b4b4d27db6fd99a23
|