A toolkit for handling Geometry Dash level data.
Project description
GMD Toolkit
Python toolkit for modifying & creating Geometry Dash plist files, including gmd & gmdl (GDShare level & level list export) and the encoded dat format (GD savefiles).
[!CAUTION] There are no safety checks or warnings when modifying levels or save files. You should always keep backups or save copies of any file you edit. Avoid editing in-place where possible.
[!NOTE] Editing levels or save files does not ensure safe round-trip if nothing was changed. This library saves level objects slightly differently and discards unknown characters if they cannot be resolved.
Installation
Install the latest release from PyPI:
pip install gmdkit
Install the latest development version from GitHub:
pip install git+https://github.com/UHDanke/gmdkit.git
Clone and install in editable mode:
git clone https://github.com/UHDanke/gmdkit.git
cd gmdkit
pip install -e .
Basic Usage
Importing, modifying a level and saving it:
# import level
from gmdkit import Level
# import object
from gmdkit import Object
# import property mappings
from gmdkit.mappings import obj_prop
# import object functions
import gmdkit.functions.object as obj_func
# open file
level = Level.from_file("example.gmd")
# get inner level properties
start = level.start
# get level objects as an ObjectList()
# object lists subclass list() so they can use all list methods alongside the ones defined by ListClass
# level.objects WILL throw an error if the level lacks an object string,
# or if you passed load = False to Level.from_file(), which skips loading objects
# LevelSave by default does not load the objects of levels
# so for any level you want to edit the objects of you must call level.load() first
obj_list = level.objects
# filter by condition
after_origin = obj_list.where(lambda obj: obj.get(obj_prop.X, 0) > 0)
# apply functions, kwargs are filtered for each called function
# ex: obj_func.fix_lighter has 'replacement' as a key argument
after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
# create new object
new_obj = Object.default(1)
# set properties of object
# objects subclass dict() so they can use all dict methods alongside the ones defined by DictClass
new_obj.update(
{
obj_prop.X: 100,
obj_prop.Y: 200,
obj_prop.SCALE_X: 2,
obj_prop.SCALE_Y: 2
}
)
# append object to the level's object list
# can also be done directly to level.objects or level['k4'].objects (which level.objects references)
# lvl_prop.level.OBJECT_STRING also maps to 'k4'
obj_list.append(new_obj)
# export level
level.to_file("example.gmd")
Documentation (WIP)
You can find the work-in-progress documentation at:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 gmdkit-0.5.1.tar.gz.
File metadata
- Download URL: gmdkit-0.5.1.tar.gz
- Upload date:
- Size: 8.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6eac5afceb71f66a65dae33975d7134d8c83b0cacd5f7ec7222943a759c42e59
|
|
| MD5 |
386a0662a4d219206f850a924d751e2c
|
|
| BLAKE2b-256 |
541aed7a9280a3809df501d02fa552747217449650ef1413d9f4af8117b959eb
|
Provenance
The following attestation bundles were made for gmdkit-0.5.1.tar.gz:
Publisher:
pypi.yml on UHDanke/gmdkit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gmdkit-0.5.1.tar.gz -
Subject digest:
6eac5afceb71f66a65dae33975d7134d8c83b0cacd5f7ec7222943a759c42e59 - Sigstore transparency entry: 1044043104
- Sigstore integration time:
-
Permalink:
UHDanke/gmdkit@52a0f247e9d1c2b6733c4331d7474c5cf39ebd32 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/UHDanke
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@52a0f247e9d1c2b6733c4331d7474c5cf39ebd32 -
Trigger Event:
release
-
Statement type:
File details
Details for the file gmdkit-0.5.1-py3-none-any.whl.
File metadata
- Download URL: gmdkit-0.5.1-py3-none-any.whl
- Upload date:
- Size: 160.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
730474a551895a7ef815c19267ba30ee9c1e41b7fcddeb43249758f347a69123
|
|
| MD5 |
52b192b3c907cc60a304391db03ad736
|
|
| BLAKE2b-256 |
18e71241b25132916ba5375396d06ba7a5810e2a3cb2ad2e03853141494f2c40
|
Provenance
The following attestation bundles were made for gmdkit-0.5.1-py3-none-any.whl:
Publisher:
pypi.yml on UHDanke/gmdkit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gmdkit-0.5.1-py3-none-any.whl -
Subject digest:
730474a551895a7ef815c19267ba30ee9c1e41b7fcddeb43249758f347a69123 - Sigstore transparency entry: 1044043166
- Sigstore integration time:
-
Permalink:
UHDanke/gmdkit@52a0f247e9d1c2b6733c4331d7474c5cf39ebd32 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/UHDanke
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@52a0f247e9d1c2b6733c4331d7474c5cf39ebd32 -
Trigger Event:
release
-
Statement type: