Settings

Every setting in the Inspector, with what it does. The look (style, colours, materials, lines, shading, cleanup) is in the Style step, whose graph is the look as nodes (the Style graph); a camera’s and a light’s settings show in the Scene step when you select that camera or light (see The scene). The images are the library’s goblin at 64 px, the clean preset with one setting changed (made by scripts/docs_images.sh, so they match this version). An accent bar on the left edge of a setting shows that you changed it from the preset; right-click it to reset.

Style

Preset is the starting point. Projects store only what you change, so when a later version improves a preset, your projects improve with it.

clean selout retro4 flat wireframe
Preset: clean Preset: selout Preset: retro4 Preset: flat Preset: wireframe

Kits go one step further: Save kit… (Save the Style as a kit) writes the Style shown — the whole look of a game: the preset and its changes, the light rig, the camera, the pixels per metre and the palette itself — into one small kit file (.pixorkit) in the library of pipelines, which the node library lists under My pipelines. Use kit… (Use a Style kit) makes a Style of this project’s from a kit and shows it, keeping the project’s own clips, materials and exports, so every asset in the game matches. Double-clicking or dropping a Style kit on Pixor with a project open does the same. Kits carry their palette inside, so they work on any machine and can be shared. On the command line: pxr style new game.pixorkit --from hero.pixor, then pxr render model.glb --style game.pixorkit.

Match a sprite… reads the look off a sprite you already have — art from your game, or a sprite you want to fit beside — and sets it: its palette (its colours, exactly), its size (how tall it stands), its outline (one dark colour all round, a darker shade of each colour, or none), its light bands, how far its ramps turn in hue from dark to light, and whether it dithers. The status line says what it read and why; every setting can be changed after, and one undo takes it all back. On the command line, pxr reference sprite.png says what it reads, and pxr project set game.pixor --match-sprite sprite.png sets it.

Console (None by default) holds the look to an old machine’s rules: Game Boy, NES, PICO-8, TIC-80 or C64 (its colours, its colours per sprite, the C64’s double-wide pixels). Under it Pixor says whether the sprite fits. On the command line: --console gameboy.

Cameras

Select a camera in the Outliner (or click it in the 3D view) to see these. Each camera renders its own sheet (cameras framed together share one, a row each); Game sets one up for a kind of game in one click (see The scene).

View sets the camera angle. A camera is one side of the sprite: more sides are more cameras, turned round the model.

side three-quarter isometric top-down
View: side View: three-quarter View: isometric View: top-down

Pitch fine-tunes the angle (degrees below the horizon, -90° to 90°; negative looks up from below). Turn (-180° to 180°) turns the camera about the model: which side it sees. Dragging the camera in the 3D view sets both. Ring round the model adds 4, 8, 16 or 32 cameras like this one, a side each.

20° 45° 70°
Pitch: 20° Pitch: 45° Pitch: 70°

Size says how a camera’s pixels are decided:

  • Fitted to the model: Width and Height are the canvas the model (every frame of every exported clip, from every side) is fitted into, 4 to 2048 px each: 64 by 64 for a character, 960 by 540 for a title image.
  • Canvas and zoom: Width and Height are the canvas, and Zoom how many pixels a metre becomes, each set on its own: a wider canvas shows more of the scene rather than drawing the model bigger, and what does not fit is cropped.
  • Pixels per metre: a fixed scale all your characters can share (Pixels/m), the canvas growing to fit.

In the 3D view the camera’s frame is drawn in the accent colour, with its width and height in pixels written inside it and its zoom (pixels a metre, 18.3 px/m) by its top right corner. Drag a side’s handle to widen, narrow, heighten or shorten the canvas — its aspect changes with it — and drag a corner to zoom: out, the frame takes in more on the same canvas; in, less, drawn bigger. Either makes the camera Canvas and zoom.

Projection is Orthographic — every part the same size wherever it is, as pixel art mostly is — or Perspective, where what is nearer is bigger, with its Field of view (5° to 150°, 50° when you switch to it). Either way the model’s feet keep the same pixels per metre. (pxr project set game.pixor --fov 50, 0 for orthographic.)

32 px (shown 2x) 64 px
Size: 32 px (shown 2x) Size: 64 px

Samples (in the Style step, under Cleanup) is the supersampling per axis, 1 to 8. More samples decide each pixel from more of the model: cleaner shapes and thin parts, slower renders. On the command line: --samples 2.

1 4 (default)
Samples: 1 Samples: 4 (default)

Nudge X and Nudge Y (under Samples) move the model a fraction of a pixel along the pixel grid, -0.5 to 0.5. The sprite keeps its size and its pivot; only which points of the model become pixels changes. When one detail will not land — an eye that falls between two pixels, a stair-step on an edge that should be clean — a quarter of a pixel is often all it takes. On the command line: --nudge 0.25,0.

Lights

Select the key, fill or rim light in the Outliner (or drag the key and fill lights in the 3D view).

Azimuth (-180° to 180°) and Elevation (-90° to 90°) place the key light. With Follows the camera on (the default) they are measured from the camera, so the light stays on the same side of every camera, as sprites usually want. Turn it off and the light stays put in the scene: a character walking away from it is darker (--light-space world on the command line).

azimuth -90° -45° (default) 45°
Light azimuth: -90° Light azimuth: -45° (default) Light azimuth: 45°
elevation 15° 45° (default) 80°
Light elevation: 15° Light elevation: 45° (default) Light elevation: 80°

Light rig sets up the whole lighting at once, still on the palette’s ramps: Noon (sun high above), Dusk (low orange sun, violet fill on the shadow side, rim highlights), Torchlight (a warm flame low in front), Moonlight (cold light from above, faint blue fill, rim) and Studio (key, fill and rim, for icons and previews). A rig sets the key light, a fill light that lifts the shadow side by a band or two, rim highlights, and the hues that lights and shadows lean toward. Azimuth and elevation can still be changed after picking a rig.

The fill light’s Strength (0 to 1; 0 turns it off) lifts the shadow side; Own angle gives it an azimuth and elevation of its own instead of opposite the key (--fill 0.3 on the command line). The rim light (On) adds a highlight on edges that turn away from you, on the lit side; Width (0.3 to 0.95) sets how far in it reaches.

Cast shadows (on the key light) lets parts shade each other (the shield on the body, the helmet on the shoulders). On the command line: --no-shadow.

on off
Cast shadows: on Cast shadows: off

Colours

Base colours (1 to 32, automatic palettes only) is how many colours Pixor takes from the model’s textures. Each one gets its own ramp of lighter and darker shades.

3 10 (default)
Base colours: 3 Base colours: 10 (default)

Light bands (1 to 4) is the number of lit shades per colour (--bands 2).

1 2 3 (default) 4
Light bands: 1 Light bands: 2 Light bands: 3 (default) Light bands: 4

Hue shift (0° to 30°) turns shadows toward blue and lights toward yellow, as pixel artists do, instead of only darkening.

0° 9° (default) 25°
Hue shift: 0° Hue shift: 9° (default) Hue shift: 25°

Dither mixes neighbouring shades in an ordered (Bayer) pattern where one light band meets the next, instead of a hard step. The pattern is fixed to the model’s surface: it is a clean pixel grid when the model stands still and moves with each part as the model animates, instead of crawling over it. Only two neighbouring shades of the same colour ever mix, and cleanup leaves dithered pixels alone. It runs from 0 to 1 (--dither 0.5). Shown at 96 px:

0 (default) 0.5 1
Dither: 0 (default) Dither: 0.5 Dither: 1

Dither pattern: Crosshatch (Bayer), the ordered grid above, or Scattered (blue noise), pixels spread evenly with no grid the eye picks out — the dither an artist places by hand. Both stay on the surface as the model moves, so neither crawls. On the command line: --dither-pattern blue-noise.

Palette is Auto (colours taken from the model), one of Pixor’s own palettes, or a file. The built-in ones are sets of ramps, dark to light, made for Pixor:

pixor-16 pixor-8 dusk-12 forest-12
Palette: pixor-16 Palette: pixor-8 Palette: dusk-12 Palette: forest-12
desert-12 ice-10 mono-8
Palette: desert-12 Palette: ice-10 Palette: mono-8

Palette file… uses your own palette (Lospec .hex, GIMP .gpl, or a .png whose colours become the palette); the ramps snap to its colours. On the command line: --palette my.hex or --palette dusk-12. Here, an 8-colour palette:

Palette: an 8-colour palette from a file

Match colours in (with a palette of your own or a built-in one) decides which of its colours counts as nearest when the ramps snap to it: OKLab, as the eye judges and keeping light and dark apart (the default); sRGB, the plain distance most tools use, which a palette made in one of them may expect; or Weighted RGB, in between. Under it, the current frame matched in each of the three, side by side: click one to choose it. On the command line: --match-space srgb.

Materials

Every material of the model is listed here with what the look does to it. The settings belong to the material, not to one part, so they apply to every part made of it; selecting a part in the Scene step tells you which material that is.

From the model file takes what a glTF material says about its surface, beyond its colour, as a starting point for the look:

What the file says What Pixor does with it
metal, and roughness below fully rough a harder, wider glint; a metal keeps single bright pixels, which read as a glint rather than as noise
a metallic-roughness map the same, per pixel: a surface can be metal in some places and not in others
an occlusion map a crevice goes one ramp step darker
emissive (with KHR_materials_emissive_strength) the material glows: its brightest shade whatever the light. With an emissive map, only the pixels the map lights, so a lamp glows and its post does not
KHR_materials_unlit the flat look: the base shade everywhere
alpha BLEND, KHR_materials_transmission see-through, drawn as an ordered dither anchored to the surface, never as soft alpha; a BLEND texture with clear texels (a decal, an eye) is cut out where it is clear
KHR_texture_transform honoured: the texture is offset, turned and scaled as the file asks
clearcoat, sheen, iridescence, volume ignored, and pxr inspect says so rather than letting the surface come out quietly wrong
a normal map read and reported, but not used: bending the normal needs a tangent, and the two ways to get one either add four floats to every vertex of every model or differ between GPUs

Fully rough and not metal is the neutral case, because that is what glTF itself defaults to and what every exporter writes for a surface nobody thought about. The number of light bands stays yours: it is the Colours setting above, and the model does not override it.

The maps are sampled by a second pass over the geometry, which runs only when a material has one and this is on, so a model without maps costs nothing.

Turn this off to shade a material from its colour alone. On the command line: --no-material-channels. pxr inspect MODEL lists what each material asks for.

  • lines: the 1-pixel lines around this material. Turn them off for glows, flames, water and glass, where a dark outline reads wrong.
  • shades cycle: this material’s shades turn round a step per frame on the Colour cycle action (water, lava, runes, screens). The JSON export also lists the palette indices, for engines that cycle at run time.
  • team colour: this material is the team colour. A team palette variant (Asset step, Add variant: team red, team blue, …) recolours it and nothing else, each shade keeping its lightness, so one sprite gives every team (Palette variants).
  • wires glow: only while the wireframe look is on. This material’s wires take its brightest shade whatever the light, for holograms and neon, and they are in the emission sheet (--export emission), so an engine can bloom them — or show them alone, the wires on black.

Team colour by colour names the team colour by a colour instead: every ramp of that hue becomes it, whatever material draws it. That is the way on a model painted from one texture atlas, where one material draws the whole character. Under the list Pixor says how many shades the team colour has, and how many it leaves alone because another colour of the sprite uses them too.

A model file can set the first two itself, through a material’s outline and cycle hints (custom properties on the material); the list then says so instead of offering the toggle.

Lines

Each kind of line is None, Dark (the darkest shade) or Selout 1 to Selout 3 (that many steps down the colour’s own ramp, so a red cape gets a dark-red line). On the command line and in files Dark is dark and Selout 2 is selout2.

Silhouette, the outline around the whole sprite:

none dark (default) selout 3
Silhouette: none Silhouette: dark (default) Silhouette: selout 3

Inner, where one part overlaps another:

none dark selout 2 (default)
Inner: none Inner: dark Inner: selout 2 (default)

Creases, at sharp folds within one part:

none (default) selout 1
Creases: none (default) Creases: selout 1

Convex edges, a light line on folds that bulge towards you, the only line that goes up its ramp: None (the default), Highlight 1 to Highlight 3, or Dark. It uses the crease angle below. On the command line: --convex highlight1.

Lines are always 1 px wide, never form L-shaped corners, and never cross from one part to another.

Dark line colour (automatic palettes only) sets the colour of lines set to Dark (--line-colour #3b2a8f). Click it to open the colour picker, which also offers the sprite’s own colours; right-click it to go back to the preset’s colour. Selout lines keep their ramp colours, and fixed palettes always use their darkest colour.

#14101c (default) #3b2a8f #7a2a1c
Dark line colour: #14101c (default) Dark line colour: #3b2a8f Dark line colour: #7a2a1c

Wireframe

The model’s own mesh edges, drawn as pixel lines on the palette: retro vector 3D, holograms and scanner effects, blueprints and UI. No rival tool draws wireframes on a palette. It is off unless you turn it on.

  • Mesh edges is the wires’ colour, and turns the look on (None by default): Dark uses the line colour, Selout N the colour under the wire N steps down its own ramp, so a red part gets dark-red wires.
  • Under them is the fill: The shading as usual, One flat colour over the whole silhouette (the vector and blueprint look; plain wires are drawn in the brightest shade there, since the flat colour is the dark one), or Nothing, which leaves the wires alone on transparency. With nothing under them the silhouette and inner lines go too, because they belong to a surface that is no longer drawn.
  • Behind a surface decides what happens to the part of an edge that runs behind something: Not drawn (the default), 1 step darker, 2 steps darker, or Dotted.
  • Every edge draws all of them. Off, only open edges and those sharper than the Edge angle (0° to 180°, 20° by default) are drawn, which hides the diagonals a glTF file puts across flat quads, so the model reads as the quads it was modelled with. Turn the angle down to draw more of the mesh, up to draw only the hard corners.

On the command line: --wire selout2 --wire-fill none --wire-hidden dotted --wire-angle 30 --wire-all-edges (Dark is --wire dark, 1 step darker is --wire-hidden darker1), and the same names on pxr project set (with --no-wire to turn it off). A material’s wires glow with --wire-glow MATERIAL.

Line sensitivity

Where lines start. While you drag one of these, the viewport shows the edges stage: orange pixels are over the depth threshold, cyan over the crease angle, blue are between parts; dim ones are close.

  • Crease angle (1° to 179°, 55° by default): how sharp a fold must be to get a crease or convex line (lower draws more; creases must be on under Lines). --crease-angle.
  • Depth step (0.1 to 40 px, 2.5 by default): how far one surface must stand in front of another to get an inner line (lower draws more). --depth-step.
  • Shortest line (0 to 16 px, 3 by default): inner and crease lines shorter than this are dropped; while you drag it, the lines stage shows. --shortest-line.
  • Lines between parts (on by default): lines where two parts touch even without a depth step (off: only depth steps and creases). --no-part-lines.
  • Silhouette inside (off by default): the silhouette on the sprite’s own edge pixels instead of around them. --outline-inside.

Shading

Band edge 1, 2… set where each light band starts, as N.L (-1 faces away from the light, 1 faces it); the bands stage shows the result while you drag. Smallest highlight (1 to 16 px, 2 by default) drops highlights smaller than that many pixels, and Band hold (0 to 0.3, 0.05 by default) keeps a pixel’s band across frames while it is that close to an edge, so bands don’t flicker.

Specular adds a bright shade where the light reflects (metal, gems). Size sets how large the highlights are. Highlights smaller than Smallest highlight are dropped. It is off in every preset but selout. (Shown with the selout preset.)

off on
Smallest highlight: off Smallest highlight: on

Cleanup

Coverage is how much of a pixel the model must cover to be drawn, and Thin parts how much a thin part (a blade, a staff) needs to keep its pixel, each a fraction of the pixel (0.5 and 0.2 by default); the coverage stage shows both (dropped pixels in red).

Orphan size (0 to 4): stray clumps of up to that many pixels take the colour around them; 1, the default, cleans single pixels, 2 pairs too. 0 turns the cleanup off.

Anti-aliasing: softens line staircases the way pixel artists do, with one darker pixel in the inner corner of each step. 1 applies it to the silhouette, 2 to every line (--aa 1). (Shown with the selout preset.)

0 (default) 1 2
Anti-aliasing: 0 (default) Anti-aliasing: 1 Anti-aliasing: 2

Even stairs: straight edges of the silhouette get even steps, the way a pixel artist draws them — an isometric edge that came out 2, 3, 1, 2 pixels becomes 2, 2, 2, 2. Only runs of steps that average a whole number of pixels are touched, curves are left alone, and no edge moves by more than a pixel; the pixels it adds are the colour of the ones they grow from. Off by default; --even-stairs on the command line.

Smear frames: in a clip, a pixel that moved this many pixels or more since the frame before leaves a trail of its own colour back along the way it came — the smear of a fast swing or a lunge, the way animators draw one. It is drawn behind what moved, never over anything else, and a slow frame has none. It goes up to 64 px; 0 (the default) turns it off, and 3 to 4 pixels suits a sprite of 64. On the command line: --smear 3.

Export

Formats, layout, padding and extrusion: see Exporting to engines.

Judging the pixels

The 2D View in the Style step is where the pixels are actually judged, and its bar has the tools an Aseprite user reaches for:

Tool What it is for
Pixel grid (Shift+G) a line around every pixel, from 4x up
Zoom (+, -, wheel, pinch) about the pointer, smoothly; every pixel stays whole screen pixels. The middle button moves the sprite, Home fits it again
The readout (hover a pixel) its palette index, its hex, which ramp it is on and how far along, whether it is fill, a line, dither or a soft edge, and the part and material it came from. The index is the one that matters: everything after shading works in palette indices
Colours (C) every palette entry as a bar of how often this frame uses it, the ones it does not use greyed, and any two an eye cannot tell apart outlined. It is live, so a colour count is checked while the ramp is being chosen rather than in a report after the export
Onion skin (O) the frame before (warm) and after (cool), for judging an arc
What changed (D) the pixels that differ from the frame before, so a clip reads as motion rather than as a row of stills. A frame where nothing changed says so
A/B (A) hold this render, change a ramp or a light, and press A to flick between the two in place. A small change is judged by flicking, not by remembering
Background a checkerboard, a flat colour, or your own game art, so contrast is judged where the sprite will live
Consistency board: every side at once (B) every side of this frame at once, with its width and height; Silhouettes draws each as its shape alone, Pivots marks where each stands, Colour counts counts each one’s colours
Checks what every check found, marked on the pixels it means, and counted under the frame (off at first)

What is on screen is what lands in the file: Pixor’s own tests compare the preview’s pixels with the exported sheet’s, byte for byte, at every zoom.

Shapes

Size, segments, place and colour of a shape built in the app: see The scene.

What this page describes is in the full version; the free browser demo keeps to the default look and the PNG sheet.

Try in browser Get Pixor