Skip to main content

Encode files into Geometry Dash levels

Project description

GD Storage

What is this?

GD Storage lets you hide any file inside a Geometry Dash level by encoding the file's binary data into level object properties. The encoded level can be:

  • Saved to your local GD save file
  • Uploaded to GD servers and shared via level ID
  • Downloaded and decoded back to the original file

Features

  • Upload to GD Servers - Store files on RobTop's servers, get a level ID to share
  • Fetch from GD Servers - Download and decode files using just a level ID
  • Local Save Support - Inject encoded levels directly into your GD save file
  • Cross-Platform - Works on Windows, macOS, and Linux (via Proton)
  • Configurable - Custom GD save paths for non-standard installations
  • Secure - Path traversal protection, input validation, overwrite confirmation

Installation

Requires Python 3.10+

pip install gd-storage

Or install in development mode:

git clone https://github.com/c4k3ss/GD-Storage
cd GD-Storage
pip install -e .

Usage

# Upload a file to GD servers
gd-storage --upload photo.png

# Download and decode from GD servers
gd-storage --fetch 123456789

# Encode and inject into local GD save
gd-storage --encode document.pdf

# Decode from local GD save
gd-storage --decode "LevelName"

# Configure GD save path (for non-standard installations)
gd-storage --config

How It Works

Files are encoded using a base-9999 group encoding method:

  1. Compression - The file is gzip compressed with the filename prepended
  2. Chunking - Binary data is split into 8-byte chunks
  3. Base Conversion - Each chunk is converted to 5 base-9999 numbers (1-9999)
  4. Object Encoding - Numbers are stored in GD object group properties
  5. Level String - Objects are serialized into a valid GD level string

Why Base-9999?

GD supports 10 groups per object (1-9999). By treating group numbers as digits in a base-9999 number system, we can efficiently pack 8 bytes into just 5 group values, achieving ~62.5% space efficiency.

Configuration

On first run, GD Storage auto-detects your save path:

  • Windows: %LOCALAPPDATA%\GeometryDash
  • macOS: ~/Library/Application Support/GeometryDash

For custom paths (Linux/Proton, custom installs), run:

gd-storage --config

Config is saved to ~/.config/gd-storage/config.json

Platform Support

Platform Local Save Upload/Fetch
Windows Yes Yes
macOS Yes Yes
Linux Yes* Yes

*Linux requires configuring the Proton GD save path manually

Dependencies

Acknowledgments

Save file handling is based on a modified version of PyCCGameManager.

License

GD Storage is licensed under the MIT License

Disclaimer

This project is for educational purposes. Use responsibly and don't abuse GD's servers.

GitHub @c4k3ss  ·  Twitter @_c4k3ss  ·  Bluesky @c4k3ss

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

gd_storage-1.0.6.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

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

gd_storage-1.0.6-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file gd_storage-1.0.6.tar.gz.

File metadata

  • Download URL: gd_storage-1.0.6.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for gd_storage-1.0.6.tar.gz
Algorithm Hash digest
SHA256 44af5c4b1e54a21beef73c14a2b29ad1fcd4d3e06895afec0a6273bd3602b230
MD5 813feb4d705a47301eef790e9ef2258d
BLAKE2b-256 8ffda2603934433629fa0c6fc5edbad2cbfa462c1c628373d24b1ba640a6d8cb

See more details on using hashes here.

File details

Details for the file gd_storage-1.0.6-py3-none-any.whl.

File metadata

  • Download URL: gd_storage-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for gd_storage-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 2e1a822bb0d26f6dfa116ab6df4b299609c623842495054f4e46fbc7c7d0d42a
MD5 9c3a5fd5c831a54d227bbf4b4a367aab
BLAKE2b-256 4242085eb74871d70367a5ee1a096ce323ee0d9ac7af554a3b79e2878dee9d4d

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