Skip to main content

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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gmd_editor-0.1.4-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

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

Hashes for gmd_editor-0.1.4.tar.gz
Algorithm Hash digest
SHA256 7bcbeabbc114df5746d165bc95298e3cfcfd6b1fa28a89b530c295bc9096bf7a
MD5 643bb2c4eca2d47624cf1d8099d46ac2
BLAKE2b-256 6a106e895bfb6ea995717745994aa959cfe001711ad2067d694863b7b39e2a73

See more details on using hashes here.

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

Hashes for gmd_editor-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e3e9a8a29b0370f9b469cf1c4dd27c36ca0c7c8e19d1efe443db70017c7578b5
MD5 edf837b437a4c15b9ef3c74cbaa1d8c5
BLAKE2b-256 c586d2e7dd70beef8e5138dda328a572d372c69f35b9653b4b4d27db6fd99a23

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page