JamChip
Pixel art and chiptune, inside Godot. One dock, three editors on a pin rail.
| Tab | What it is |
|---|---|
| Pixel | A sprite editor: layers, frames, onion skin, palette, animation tags, its own undo history. Documents are .pixel.tres; exports are PNG, SpriteFrames and Aseprite. |
| SFX | An sfxr-style generator. Documents are .sfx.tres; exports are .wav. |
| Tracker | A pattern tracker over the same synth engine. Documents are .music.tres; exports are .wav. |
Everything exports to formats Godot already understands, so a shipped game
needs none of this at runtime. Or skip the export: PixelSprite2D and
ChiptuneAudioStream hold a document and follow it as you edit.
A sprite document names ranges of its own frames, idle, run, hit, and
each becomes a SpriteFrames animation of that name, so play("run") on
the node works as on any AnimatedSprite2D.
Install
Copy addons/jamchip/ into your project, then enable JamChip under
Project → Project Settings → Plugins.
Godot 4.7 or newer. Every suite runs on 4.7.2, and that is the oldest version this is tested against. Anything below 4.7 is unsupported: it may load and it is not something to report. Newer 4.x releases are expected to work and are not all tested.
If the project is in git, add a line to .gitattributes:
*.pixel.tres -diff -mergeA sprite’s pixels are stored as bytes inside a text .tres, so two people
drawing on the same sprite conflict on lines no merge tool can read, and a
diff of them is noise. This tells git to show the file as changed and stop
there: pick one side, and redo the other’s strokes in the editor. Sounds,
songs and palettes are plain numbers and names and merge as text does.
Shipping. Export as you would any project: with the plugin enabled,
an export carries the runtime and what it opens and leaves the dock, the
editors, the glyphs, the fonts and the suites behind, with nothing to set
in the preset. The exclude_filter a preset would carry to skip the same
files:
addons/jamchip/dock/*, addons/jamchip/host/*, addons/jamchip/tests/*, addons/jamchip/kit/fonts/*, addons/jamchip/kit/icons/*, addons/jamchip/kit/themes/*, addons/jamchip/kit/tests/*, addons/jamchip/pixel/bar/*, addons/jamchip/pixel/host/*, addons/jamchip/pixel/lane/*, addons/jamchip/pixel/panel/*, addons/jamchip/pixel/rack/*, addons/jamchip/pixel/stage/*, addons/jamchip/pixel/strip/*, addons/jamchip/pixel/tests/*, addons/jamchip/chiptune/host/*, addons/jamchip/chiptune/sfx/*, addons/jamchip/chiptune/tests/*, addons/jamchip/chiptune/tracker/*What is inside
dock/ the dock and the three-tab panelhost/ what the plugin adds to the editor on its own behalfpixel/ the sprite editor — pixel/README.mdchiptune/ the tracker and the SFX generator — chiptune/README.mdkit/ what both of them need — kit/README.mdtests/ the suites about the plugin as a whole; not in the zipClick a pin to switch editors, or Ctrl+1, Ctrl+2, Ctrl+3 for Pixel, SFX or Tracker from anywhere in the editor.
Each editor opens on an untitled document: a one-pattern song in the Tracker, a Bright sound in SFX, a blank 32×32 in Pixel. Draw, type or drag straight away; the keys are in the tooltip on the Pixel canvas and the Tracker grid.
What you can put in a scene
Nothing here needs the dock open, and nothing needs the plugin enabled at
run time. An export carries the runtime half of each module, runtime,
model, paint, format, palettes and icons from pixel/ and
runtime, model, synth, format and icons from chiptune/, and
ten scripts from kit/, which is everything the game opens, and nothing else from
addons/jamchip/; the Install section above has the line. An exported
Linux build runs on every merge to prove it.
Nodes
| Node | Extends | What it is for |
|---|---|---|
PixelSprite2D |
AnimatedSprite2D |
The front door for artwork. Give it a PixelDocument and it draws it, animates it, and follows the document as you draw. It runs its own clock in the editor. |
ChiptunePlayer |
AudioStreamPlayer |
The front door for sound. Give it a .sfx.tres and it plays it. |
ChiptunePlayer2D |
AudioStreamPlayer2D |
The same, positioned in 2D. |
ChiptunePlayer3D |
AudioStreamPlayer3D |
The same, positioned in 3D. |
ChiptuneMusicPlayer |
AudioStreamPlayer |
The same for music. Give it a .music.tres and it loops it on the beat, or turn loop off for a one-shot. |
Resources you author
| Resource | File | Holds |
|---|---|---|
PixelDocument |
.pixel.tres |
A sprite: layers, frames, per-frame timing, a palette, named frame ranges with a loop flag each. |
ChiptuneSfxSpec |
.sfx.tres |
One sound: a waveform, an envelope, the sfxr-style parameters. |
ChiptuneSong |
.music.tres |
A song: patterns, an arrangement, instruments, and the mix. |
Two more are libraries you build up and reuse. A document keeps its own copy of what it uses, so changing a library later does not reach back.
| Resource | File | Holds |
|---|---|---|
PixelPalette |
.palette.tres |
A named set of colours. GIMP .gpl files import into this. |
ChiptuneInstrumentPalette |
.instruments.tres |
A named set of instruments, shared by SFX and Tracker. |
Resources you attach
For when a node is the wrong shape.
| Resource | Extends | What it is for |
|---|---|---|
PixelSpriteTexture |
ImageTexture |
One frame of a document, kept in step. Anywhere a Texture2D goes. |
PixelSpriteFrames |
SpriteFrames |
Every frame of a document, one animation per tag. |
ChiptuneAudioStream |
AudioStreamWAV |
A document rendered as a stream, for any AudioStreamPlayer. |
Other Pixel* and Chiptune* classes are machinery and may change shape
without warning.
Preferences and themes
Click the jar at the top of the pin rail to open the JamChip menu:
Preferences…, Help, which opens this file, and About JamChip,
then the last ten documents you opened or saved in this project. Pick one
and its tab opens it.
Preferences is a window with a section list down the left; its Theme
page lists the themes: Editor, which is Godot’s own, JamChip, and
one row per theme file. A choice is kept in
user://jamchip/preferences.cfg, per user, and is the same in every
project you open.
To make a theme of your own, press Duplicate on the row closest to
what you want, give it a name, and it opens on the Edit Theme page:
eight swatches, surface, surface_alt and lane, then accent,
playhead, ok, warning and danger. The rest of the theme is worked
out from those. Every change is saved as you make it, and the dock
follows if the theme is the one in use. A swatch that drops below the
contrast floor says so beside itself; the theme stays saved, and the
Theme page won’t offer it until it’s fixed. Edit on a theme file’s
row reopens it; the Editor and JamChip rows have no Edit.
The Saving page has one number: how many seconds between copies of unsaved work to the recovery file, thirty unless you change it, five at the least. All three tabs use it.
A theme is a file: user://jamchip/themes/<name>.cfg, one [roles]
section, one key per role, colours as "#rrggbb". Show Folder on the
Theme page opens that directory. The editor writes only its eight keys, so
the other roles are yours to set in a text editor; a role you leave out is
filled in from your surface. The roles:
surface surface_alt surface_raised laneink ink_dim ink_faint borderaccent accent_ink playheadok warning dangeronion_previous onion_nextA theme whose text, borders or status colours do not clear a contrast floor is listed greyed, with what fell short in its tooltip. Fix it on the Edit Theme page, or in the file and open Preferences again.
If something goes wrong
Press Ctrl+Shift+P and run JamChip: Copy Diagnostics. It puts a short
block on your clipboard: plugin and engine versions, platform, what the
tabs were holding, and the last failures the plugin recorded. It carries no
path from outside your project and nothing you drew or wrote.
Then copy the red lines out of the Output panel too. A script error is caught by Godot before the plugin’s own code runs, so it is not in the block. If the two disagree about how bad it was, believe the red lines.
Licence
The code is MIT, copyright Glitter Snack LLC. The full text is
LICENSE, in this folder beside plugin.cfg. Use it in
anything, commercial included, and keep the notice. The two fonts under
kit/fonts/ are under the SIL Open Font License, each with its text
beside it. The JamChip name, the jar and the wordmark are trademarks and
not under the MIT licence; TRADEMARK.md, beside
LICENSE, says what a fork may call itself.
JamChip 0.1.0, by GlitterSnack. MIT licence. Built from the source on every merge, artwork and screenshots included, with JamChip.