Infinite Props is a portable binary format and toolchain for seed-based procedural
2D assets. You author an asset in the .ips language, compile it to a
self-contained .iprop binary, and any backend renders it deterministically from a
seed and declared input values.
Download the SDK
Tagged releases ship SDKs with command-line tools (bin/), the C header
and libraries (include/, lib/) and documentation/examples
(share/iprop/). Choose a published version and its checksums on the
releases page.
This documentation describes product 0.7.1. Build the current source using Source to use the current format and the features in this handbook. Earlier SDKs follow their own tagged documentation.
The tools
| tool | what it does |
|---|---|
ipc | compile .ips → .iprop |
ipgen | render a .iprop to a PNG and print the result JSON (outputs and fuel) |
ipsheet | render a consecutive seed grid |
ipdis | disassemble a binary, optionally with source lines |
ipval | validate a binary |
ipa | assemble .ipa → .iprop |
Every tool prints its exact options with -h / --help.
Your first asset
Write rock.ips:
asset rock {
size 64x64
origin 32,56
input color tint = #808d74
output rect collider
draw {
w = 20 to 30
h = 14 to 24
rect(32 - w / 2, 56 - h, w, h, tint)
rect(32 - w / 2, 56 - h, w, 3, color.shade(tint, 3))
if (index(3) == 0) {
rect(32 + w / 2 - 6, 56 - h - 4, 8, 6, color.shade(tint, -4))
}
collider = {32 - w / 2, 56 - h, w, h}
}
}
Compile it, then render a seed:
ipc rock.ips -o rock.iprop
ipgen rock.iprop --seed 7 -o rock.png
ipgen writes the image and prints the result: the structured outputs your game reads
next to the pixels, and the fuel the run spent.
"fuel": {"budget": 5000000, "spent": 868},
"outputs": [
{"name": "collider", "kind": "rect", "list": false,
"values": [{"x": 18, "y": 36, "w": 28, "h": 20}]}
]
The same seed always renders the same pixels, on every platform and backend. The compiler writes
stripped, packed production files by default; add --debug for source maps and symbols or
--no-compress for an expanded file to inspect.
Seeds and declared inputs
The seed initializes the root random stream. Authors declare any controls they need with
input, including colors, dimensions or selection indices. Hosts can override these
values by name; omitted inputs keep their defaults. There are no implicit variant/archetype
controls. v and a are ordinary names.
The editor
The VS Code extension (editor/ in the repository) adds syntax highlighting, inline
compiler diagnostics, a live preview with seed controls, an atlas browser, a bytecode inspector and
one-click exports:
cd editor
sh install.sh
Reload VS Code and open any .ips file. The integrated terminal doubles as a console for
coding agents: they edit the sources and the extension recompiles.
Next steps
- The language reference: every statement, type and builtin, with tested examples.
- The binary format: what is inside an
.ipropfile. - Backends: the CLI, WebAssembly, the C API, SFML and Godot.
- 24 recipes: small, focused
.ipstechniques.