Drawing Tools
Select a tool from the left panel or via keyboard shortcut. Left-click on the canvas uses the primary colour; right-click uses the secondary colour. Shape tools commit on mouse-up.
| Tool | Shortcut | Description |
|---|---|---|
| Pencil | B | Draws individual pixels with the active colour. |
| Eraser | E | Sets pixels to transparent. |
| Fill | F | Flood-fills a contiguous region of the same colour. |
| Eyedropper | I | Picks the colour under the cursor without changing the tool. |
| Dither | D | Paints a checkerboard of primary and secondary colour (right-click swaps them). The pattern is fixed to the image grid, so overlapping strokes line up. |
| Shade | S | Steps each pixel to the next palette swatch (left-click) or the previous one (right-click), once per stroke. Arrange your palette as colour ramps. Colours not in the palette are left unchanged. |
| Replace | K | Replaces every pixel of the clicked colour on the active layer (inside the selection, if any) with the primary colour. |
| Line | L | Draws a straight line between two points. Click and drag. |
| Rectangle | R | Draws a hollow rectangle. Click and drag. |
| Filled Rectangle | Shift+R | Draws a solid rectangle. |
| Circle | C | Draws a hollow circle. Click and drag. |
| Filled Circle | Shift+C | Draws a solid circle. |
Brush, mirror & tile mode
- Brush size (1–8, keys 1–8) and shape (square / round) apply to Pencil, Eraser, Dither and Shade. Pixel Perfect only works at size 1.
- Mirror X / Y (Shift+X / Shift+Y) mirrors brush strokes, shapes and fills across the canvas centre. The axes are shown as dashed lines.
- Tile (Shift+T) shows the image repeated 3×3 for seamless textures. Brush strokes, shapes and fills wrap around the canvas edges while it is on.
Selection & Transform
While a selection is active, all drawing tools only affect the selected pixels.
| Tool | Shortcut | Description |
|---|---|---|
| Select | M | Rectangular selection. Click without dragging to deselect. |
| Lasso | Q | Freehand selection; the shape is closed automatically. |
| Magic Wand | W | Selects pixels of exactly the clicked colour on the active layer. Untick Wand contiguous to select that colour everywhere. |
| Move | V | Drags the selected pixels, or the whole layer if nothing is selected. Alt/Ctrl-drag duplicates instead of cutting. |
- Hold Shift to add to the selection, Alt or Ctrl to subtract from it.
- Moved, pasted or transformed pixels float above the layer until they are applied with Enter, by choosing another tool, or by deselecting. Ctrl+Z cancels a floating operation.
- Transparent pixels of floating content do not overwrite the layer.
- Flip / Rotate buttons below the select tools transform the selection, or the whole active layer if nothing is selected.
- Ctrl+C / Ctrl+X copy to the system clipboard as PNG; Ctrl+V pastes images from PixelForge or other applications.
Colours
The overlapping swatches in the left panel show the primary (front) and secondary (back) colours. Click a swatch or the labelled picker below it to open the colour chooser.
- Left-click on the canvas paints with the primary colour.
- Right-click on the canvas paints with the secondary colour.
- Swap (X) — swaps primary and secondary.
- Hex field — type a colour directly (
#rrggbb).
Palette & Lospec
Colour Palette
The Palette panel shows your working colour set as swatches.
- Left-click a swatch → set as primary colour.
- Right-click a swatch → set as secondary colour.
- + — adds the current primary colour to the palette.
- ↺ — resets to the built-in 32-colour default palette.
Image Colours
Click ↻ next to Image Colours to extract every unique colour currently used on visible layers. The result appears as swatches — click any to set it as a colour.
Lospec Palettes
lospec.com/palette-list hosts hundreds of community-made palettes.
- Load by slug — enter the palette slug (e.g.
db16,sweetie16,na16) and click Load by slug. Press Enter to load without clicking. - Search — type a name and click Search. Click a result to load it.
Layers
Layers are stacked transparently, composited top-to-bottom. All drawing goes to the active (highlighted) layer.
| Button | Shortcut | Action |
|---|---|---|
| + | Shift+N | Add a new blank transparent layer above the active one. |
| ⧉ | Shift+D | Duplicate the active layer. |
| ⊕ | — | Merge all visible layers into a single layer. |
| 👁 | — | Toggle visibility of the layer. |
| 🔒 / 🔓 | — | Lock a layer to prevent drawing on it; unlock to allow drawing again. |
| ↑ / ↓ | ] / [ | Move the layer up or down in the stack. |
| ✕ | — | Delete the layer (disabled when only one layer remains). |
- Opacity — the slider at the bottom of the Layers section controls the active layer's transparency (0–100 %).
- Rename — double-click a layer name to edit it inline; press Enter or click away to confirm.
Reference Image
A reference image overlays the canvas to guide your drawing. It is never saved into the exported PNG or Koala file.
- Click … to load any raster image (PNG, JPG, GIF, …).
- Toggle the overlay with the 👁 button.
- Opacity — how transparent the reference overlay is (default 50 %).
- Scale — resize the reference independently of the canvas (10–4000 %). The slider is logarithmic; type an exact value into the field next to it.
- Rotate — exact rotation angle around the centre of the reference (−180° … 180°).
- Adjust on canvas — shows a frame with handles around the reference; the canvas does not paint meanwhile. Drag inside the frame to move the reference, drag a corner handle to resize it proportionally, drag the round knob above the frame to rotate it (hold Shift to snap to 15°). Dragging outside the frame pans the view. Scroll scales around the mouse pointer, Shift+scroll rotates in 1° steps, Ctrl+scroll zooms the view. Choosing a tool or pressing Esc ends the mode.
- 🔒 Lock — as soon as you paint the first pixel, the reference is locked so it cannot be moved, scaled or rotated by accident. Click the lock button to unlock it again.
- Reset position, scale & rotation — returns the transform to its defaults.
- Click ✕ to unload the reference entirely.
Canvas & View
Zoom
- − / + buttons in the toolbar or press − / + on the keyboard.
- Scroll wheel on the canvas zooms at the cursor position.
- Fit — fits the entire canvas into the visible area.
Grid
Toggle the pixel grid overlay with the Grid toolbar button or press G. The grid is hidden automatically at low zoom levels.
Preview Window
A floating mini-preview shows the artwork at a selectable scale (2×, 4×, 6×, 8×, or a custom value). Toggle with Preview or P. Drag the preview header to move it around the canvas area. Previews larger than 60 % of the canvas area (high scales, tall C64 pictures) scroll inside the window.
Status Bar
The bar at the bottom of the canvas shows: cursor position, canvas size, current zoom, colour under the cursor, active tool, and active layer name.
File Operations
| Action | Shortcut | Notes |
|---|---|---|
| New image | Ctrl+N | Opens the New Image dialog. Set width, height, background colour, or enable C64 mode. |
| Load | Ctrl+O | Load PNG, BMP, GIF, JPG, or a Koala .koa file. Loading a .koa switches to C64 mode automatically. |
| Save PNG | Ctrl+S | Exports all visible layers flattened to a single PNG file. |
| Koala | — | C64 mode only. Exports a standard Koala Painter .koa file for use in emulators or on real hardware. |
| Drag & drop | — | Drop an image file directly onto the canvas to load it. |
C64 Graphics Modes
PixelForge can edit pictures in several Commodore 64 graphics modes. Every mode has its own colour limits, which are enforced while you paint: a stroke that would break them is blocked and a message names the rule. All colours come from the 16-colour Colodore palette.
Choose a mode in New Image (Ctrl+N), or load a C64 picture file. The toolbar then shows the C64 BG background colour and a Save button for the mode's native file format.
| Mode | Size | Colour limit | Saved as |
|---|---|---|---|
| Multicolor bitmap | 160×200, wide pixels | Background + 3 colours per 4×8 cell | Koala .koa |
| Hires bitmap | 320×200 | 2 colours per 8×8 cell (background counts as one) | Art Studio .art |
| FLI | 160×200, wide pixels | Per 4×1 row 2 colours, plus 1 colour shared by the 4×8 cell, plus background | FLI Graph .bml |
| AFLI | 320×200 | 2 colours per 8×1 row | AFLI Editor .afl |
| IFLI | 2 frames of 160×200 | FLI rules per frame; both frames share the 4×8 cell colour | Gunpaint .gun |
| NUFLI | 320×200 | Ink + paper per 8×2 block, plus one sprite underlay colour per 48-px column that can change every 2 lines | NUFLI Editor .nuf* |
Tall FLI and AFLI pictures
FLI and AFLI pictures can be taller than one screen — useful for portraits shown with a scrolling viewer. Set the height in New Image or in the tracer (steps of 8 lines, up to 2000). There is no standard file format for tall pictures, so Save splits them into standard 200-line files (image_1.bml, image_2.bml, …) and downloads them as one ZIP; the last part is filled up with background. Each part loads in any FLI/AFLI viewer. Pictures shorter than 200 lines are saved as one padded file.
NUFLI
NUFLI combines hires FLI with sprites behind the bitmap, and even covers the FLI bug area with sprites. Its colour limits depend on each other across whole columns, so instead of blocking a stroke PixelForge fits it in after you release the mouse: pixels that NUFLI cannot show get the nearest possible colour, and a message tells you how many. Pixels outside the stroke are never changed.
* A .nuf file contains the NUFLI display program. PixelForge keeps it from the loaded file, so saving works for pictures loaded from .nuf or .nup files. A new NUFLI picture can be edited but not saved.
Preview: CRT, PAL and flicker
The display select in the preview window offers three looks. Plain shows the bare pixels. CRT is a simple monitor look: scanlines, phosphor glow and slight blur. PAL emulates the whole video chain of a C64: the VIC-II output with its slow luma edges and bus crosstalk, PAL modulation of the colour signal, the transmission (RGB, Luma/Chroma, composite or RF with noise, ghosting and interference), the PAL decoder with its delay line (the colour blending of neighbouring lines that C64 artists rely on) and finally the picture tube with beam-shaped scanlines, shadow mask, bloom, afterglow and curvature. The ⚙ button opens its settings with presets; Animate runs the signal live at 50 Hz. PAL needs WebGL2.
Flicker (IFLI only) shows the two frames alternately at 50 Hz like a real C64, instead of the steady mix. All settings are remembered in the browser.
IFLI frames
IFLI shows two FLI pictures alternately, the second shifted by half a pixel. The eye mixes them, which gives more colours and finer horizontal detail. In PixelForge the frames are the layers Frame 1 and Frame 2; select a layer to paint on that frame. The canvas shows the mixed result; hide one frame layer to see the other on its own.
Loading C64 files
Load (or drag and drop) recognises these picture files by load address, size and signature, regardless of the file name:
- Multicolor: Koala Painter
- Hires: Art Studio, Interpaint Hires, Hi-Eddi, Doodle (also packed
.jj), Image System, plain mono bitmaps - FLI: FLI Graph / Blackmail (also packed), FLI Designer
- AFLI: AFLI Editor
- IFLI: Gunpaint, Funpaint II, Pixel Perfect (also packed
.ppp) - NUFLI: NUFLI Editor
.nufand packed.nup
A D64 disk image opens a C64-style directory listing. Files PixelForge can load are highlighted, with their format; click one to load it. Self-starting programs (usually packed picture viewers or demos) are shown dimmed and cannot be loaded.
Restrictions in C64 modes
| Feature | Restriction |
|---|---|
| Canvas size | Fixed by the mode |
| Colours | Colodore 16; colour pickers become palette dropdowns, hex input is disabled |
| Palette panel | Locked to Colodore 16; Lospec and image colours are hidden |
| Layers | Fixed drawing layer(s) plus a locked background layer; no add, delete, merge or opacity |
Image Tracer
Open with the Trace button (T). The tracer converts a photograph or artwork into pixel art — for a normal image of any size or directly into one of the C64 graphics modes.
Loading a Source
Click Load Source… to open a JPEG or PNG image. The source appears in the left preview pane.
- Pan — drag anywhere in the preview canvas.
- Zoom — scroll wheel, or use the − / + / Fit controls.
- Crop box — the dashed rectangle defines which region of the source gets traced. Drag the box interior to reposition it; drag a corner handle to resize it. Only the area inside the box is used as input.
- Snap — while the box is not rotated, its edges snap to the image edges when moved or resized close to them. Untick to place it freely.
Target
Normal image lets you pick a size preset or a custom size. The C64 targets (Multicolor, Hires, FLI, AFLI, IFLI, NUFLI) use the mode's resolution and palette, and the result is converted with that mode's colour rules, so it opens as an editable C64 picture. The crop box follows the mode's displayed aspect ratio. For FLI and AFLI you can set the height (steps of 8 lines) to trace portraits into one tall picture: type it in, or drag the top or bottom edge of the crop box — the height snaps to 8-line steps while the width stays. For modes with a background colour, the tracer picks the most frequent colour unless you choose one. Traced NUFLI pictures can be edited but not saved (see C64 Graphics Modes).
Style: Pixel art
The default style aims for results that look pixelled by hand, so only little touch-up is needed:
- Smoothing — an edge-preserving filter flattens texture and noise in the source while keeping edges sharp.
- Each target pixel takes the colour that most of its source area matches, instead of an average — flat areas, no muddy in-between colours at edges.
- Outlines — strong, connected edges in the source get dark 1-pixel outlines; soft gradients and short texture fragments are ignored. L-shaped corners are removed so diagonals stay one pixel wide. 0 turns outlines off.
- Hue priority — how colours are matched to the palette: low values match brightness, high values keep hue and saturation, which is usually closer to an artist's choice with small palettes.
- Checkerboard mixes — in-between tones become clean 2-colour checkerboards, as in hand-made C64 art (on by default for C64 targets except Hires).
- Remove stray pixels — isolated single pixels are merged into their surroundings.
For IFLI the tracer works at 320 pixels width with the colour mixes of both frames and splits the result into two frames whose blend matches the picture. The split keeps both frames consistent from line to line and respects the FLI colour rules, so the mixes survive the conversion. For all interlaced modes (IFLI, SHI, SHIF), Max. flicker limits how far apart in brightness the two mixed colours may be: low values give a calm picture with fewer in-between colours, high values more colours but stronger flicker on a real C64. Hard edges between light and dark areas may still flicker on a single pixel, as in hand-made IFLI pictures.
Style: Photo
Averages the source and applies one of the dithering methods below — the classic conversion, better suited for photos with soft gradients.
Dithering
Dithering distributes the error between a desired colour and the nearest available palette colour to neighbouring pixels, creating the illusion of intermediate tones. The examples below show a black-to-white gradient dithered with each method (black/white palette).
Error-diffusion methods
These scan left-to-right, top-to-bottom. Each pixel's quantization error is propagated forward to unprocessed neighbours according to a weight matrix. Results look organic and natural.
Ordered (Bayer) methods
A pre-computed threshold matrix is tiled across the image. Each pixel's channel values are nudged by the corresponding matrix entry before quantizing. Results have a regular, mechanical dot pattern — the classic retro halftone look.
Color Mode (normal images)
- Full color — Photo style keeps all RGB colours; Pixel art style generates a 32-colour palette from the source.
- Auto palette — generates a palette with the chosen number of colours from the source.
- Match palette — restricts output to a loaded palette (Lospec slug or search, or the current editor palette).
Image Enhancement
These adjustments pre-process the source before dithering. Click ↺ to reset all sliders.
| Control | Effect |
|---|---|
| Brightness | Shifts every pixel brighter (+) or darker (−). |
| Contrast | Expands (+) or compresses (−) the tonal range around 128. |
| Saturation | Uniformly boosts or reduces colour intensity. |
| Vibrance | Smart saturation — affects desaturated colours more than already-vivid ones, preserving skin tones and highlights. |
| Invert | Negates all channels (white ↔ black, etc.). |
Result Preview & Applying
The Result preview canvas at the bottom right updates automatically whenever any setting changes. Click Trace to Canvas to open the result in the editor — as a normal image, or as a picture in the chosen C64 mode.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| B | Pencil tool |
| E | Eraser tool |
| F | Fill / bucket tool |
| I | Eyedropper / colour picker |
| L | Line tool |
| R | Rectangle (outline) |
| Shift+R | Rectangle (filled) |
| C | Circle (outline) |
| Shift+C | Circle (filled) |
| D / S / K | Dither / Shade / Colour replace |
| 1 – 8 | Brush size |
| Shift+X / Shift+Y | Toggle mirror X / Y |
| Shift+T | Toggle tile mode |
| M / Q / W | Rectangle select / Lasso / Magic wand |
| V | Move tool |
| Ctrl+A / Ctrl+D | Select all / Deselect |
| Ctrl+I | Invert selection |
| Ctrl+C / Ctrl+X / Ctrl+V | Copy / Cut / Paste |
| Del / Backspace | Clear selected pixels |
| Arrow keys | Nudge selection by 1 px (Shift: 8 px) |
| Shift+H / Shift+V | Flip horizontal / vertical |
| < / > | Rotate 90° counter-clockwise / clockwise |
| Enter | Apply floating pixels |
| X | Swap primary ↔ secondary colour |
| G | Toggle pixel grid |
| P | Toggle preview window |
| T | Open Image Tracer |
| + or = | Zoom in |
| − | Zoom out |
| [ | Move active layer down |
| ] | Move active layer up |
| Shift+N | Add new layer |
| Shift+D | Duplicate active layer |
| Ctrl+Z | Undo |
| Ctrl+Y / Ctrl+Shift+Z | Redo |
| Ctrl+S | Save PNG |
| Ctrl+N | New image dialog |
| Ctrl+O | Load file |
| Esc | Deselect / close Tracer / close this Documentation panel |