Rendering
Studio's preview, Studio's export and the CLI use one Pillow renderer.
auto draws an app window for Mac and a device mockup for the other platforms.
device-focus (Large device) gives the screenshot more room. raw (Image
only) fills the size with a centered crop of the screenshot and draws no text or
background. Custom sizes show the screenshot with rounded corners, without a mockup.
Images and text
- Screenshots: static PNG, JPEG or WebP, at most 24 million pixels. EXIF rotation is applied and transparency is flattened onto white. Use sRGB images: color profiles are not converted. Studio uploads are limited to 16 MiB and saved as PNG.
contain(Match screenshot) keeps the whole screenshot;cover(Crop to display) crops its center to the mockup's screen. Screenshots are never rotated to match the output orientation, so check each size before exporting.- Text wraps and shrinks to fit its box. Text that still does not fit fails with
Text overflowinstead of being clipped; spacing that leaves no room for the screenshot fails withLayout overflow. - Right-to-left text and missing glyphs fail; complex-script shaping and emoji fallback are not supported.
Fonts
No fonts are bundled or downloaded. Text without a named font uses an installed
sans-serif family: Helvetica Neue, Helvetica or Arial on macOS; Segoe UI or Arial
on Windows; DejaVu Sans, Noto Sans, Liberation Sans or Arial elsewhere. If none is
installed, install one (Linux: fonts-dejavu-core), choose a project font, or set
JAMSHOOT_FONT to a TTF, OTF or TTC file. raw needs no font.
typography.<field>.font names a family, looked up first in the project's
assets/fonts, then among installed fonts. Fonts uploaded in Project →
Typography travel with the project; installed fonts render only where installed.
JAMSHOOT_FONT_DIRS replaces the system font folders, separated like PATH.
Named families must resolve when planning.
The same project renders to the same pixels only with the same fonts, Pillow and
FreeType versions; manifest.json hashes are comparable only under those conditions.
Export
Each output is an RGB PNG at the size's exact dimensions. manifest.json records
the renderer and catalog versions, the file count, and each PNG's size, path and
SHA-256. Paths follow the output matrix.
The CLI renders into a staging folder and publishes the batch when every file succeeds; on a handled error it removes that run. A killed process can leave partial output, so retry into a new folder. Studio creates missing parent folders and numbers repeated exports. Both apply the file limit.
Device mockups
Device mockups are drawn by code, as approximations rather than exact hardware or
Apple artwork; Device frame sets them to black, silver or none. Their geometry
is in render/devices.py;
MacBook camera proportions are estimated from Apple's
front view.