Skip to content

Releases: cuneytozseker/TinyProgrammer

v0.3.4

24 Apr 00:06

Choose a tag to compare

Fixes

Docker canvas display fix

Generated programs were failing silently in Docker because tiny_canvas.py and tiny_plot3d.py were excluded from the image by the .dockerignore. Narrowed the exclusion to programs/programs/ (generated code) and programs/index.json (archive index), keeping the canvas library files in the image. (PR #29 by @ziggy46)

Docker runtime volume rework

Replaced fragile file bind mounts for lessons.md, config_overrides.json, and liked_programs.json with a named runtime volume. The entrypoint creates and symlinks the files automatically, eliminating the "device or resource busy" error when Docker created them as directories on first run. (PR #29 by @ziggy46)

Security: subprocess environment stripped

Generated programs now run with a minimal environment (PATH, HOME, PYTHONPATH, canvas dimensions only). Previously the subprocess inherited the full os.environ, which included API keys. While exploitation is unlikely in normal operation, this removes the possibility entirely.

Full changelog: v0.3.3...v0.3.4

v0.3.3

23 Apr 12:32

Choose a tag to compare

Security

  • Generated programs now run with a minimal environment (PATH, HOME, PYTHONPATH, canvas dimensions only). Previously the subprocess inherited the full os.environ, which included API keys. While exploitation is unlikely in normal operation, this removes the possibility entirely.

Full changelog: v0.3.2...v0.3.3

v0.3.2

23 Apr 11:04

Choose a tag to compare

What's new

Session history on dashboard

The dashboard now shows a live session history table each program's type, selection mode (core/creative/variation), model used, and success/failure. Color-coded mode badges make rotation behavior visible at a glance. Resets on service restart. Scrollable with program count.

Version tracking on BBS

Devices now report their version in lurk reports (hourly). The server stores client_version on the devices table, updated only when the version actually changes zero overhead during normal operation.

Docker improvements

  • .dockerignore added: prevents lessons.md and config_overrides.json from being baked into the image as directories, fixing the "device or resource busy" bind-mount error on first run.
  • OLLAMA_ENDPOINT now configurable via .env: users running Ollama on a separate machine can set it without editing docker-compose.yml. Defaults to host.docker.internal:11434. (PR #27 by @Rombusevil)

Installer: desktop environment warning

setup.sh now detects if lightdm/gdm is running and warns that TinyProgrammer needs the raw framebuffer. Suggests switching to console boot via raspi-config before continuing.

Fixes

  • Removed unused code parameter from build_reflection_prompt (#26).
  • Added troubleshooting entries for blank display when desktop is running and empty log file.

Full changelog: v0.3.1...v0.3.2

v0.3.1

18 Apr 17:51

Choose a tag to compare

Highlights

tinyprogrammer_20260416_013230 tinyprogrammer_20260415_192620222

For TinyProgrammer related discussions, questions and suggestions a discord server added: https://discord.gg/KVZpHS83

Thanks to DevelopmentCats for setting it up!

Custom program types

Define your own program types from the web UI; slug + description + category + optional core-pool opt-in persisted in config_overrides.json. Tailor the rotation to your own aesthetics (audio visualizers, cellular automata variants, generative text, ASCII art, whatever) without touching source. Closes #20.

Reorganized Prompts page

/prompt now splits into Core, Creative, and Custom sections, each with an "Enable all" master toggle. Every row carries its own enable checkbox, weight, and editable prompt description in one place.

Monochrome display schemes

Four new options under Settings → Color Scheme: Monochrome (Gray), Monochrome Amber, Monochrome Green, Monochrome Blue. Desaturates the canvas to luminance (Rec. 601) before tinting. Distinct from the existing multiply tints because it throws away the canvas's color info, producing a classic one-color CRT look.

Fixes since v0.3

  • Max tokens and temperature settings were ignored: the web UI values were saved but never passed to the LLM stream calls (always defaulted to 1024 tokens / 0.7 temperature). Now wired through for code generation, fix, and reflection prompts.
  • Added "Surprise Me! (Local)" model option: picks a random locally available Ollama model each cycle, mirroring the existing cloud Surprise Me mode. Falls back to cloud if no local models are detected.
  • Added troubleshooting section to README: covers empty logs, service crashes, LLM errors, blank display, dashboard not loading, Ollama detection, and manual log viewing.

Fixes rolled in from v0.3

  • PROGRAM_DESCRIPTIONS overrides were silently no-op (saved to JSON but never re-read at prompt-build time). Now resolved via config.PROGRAM_DESCRIPTIONSCUSTOM_PROGRAM_TYPES → built-in defaults.
  • Core-mode rotation ignored the enable/disable toggles. It now intersects CORE_PROGRAMS with enabled PROGRAM_TYPES and merges in customs that opted into the core pool.
  • ConfigManager silently dropped override keys not already declared on config.py. Now applies every key.
  • Deleting a custom type purges matching entries from liked_programs.json so orphaned slugs can't resurface via the variation path.

Full changelog: v0.3...v0.3.1

v0.3 — Custom program types & monochrome display

15 Apr 22:37
966dcf2

Choose a tag to compare

Highlights

tinyprogrammer_20260416_013230 tinyprogrammer_20260415_192620222

Custom program types

Define your own program types from the web UI; slug + description + category + optional core-pool opt-in persisted in config_overrides.json. Tailor the rotation to your own aesthetics (audio visualizers, cellular automata variants, generative text, ASCII art, whatever) without touching source. Closes #20.

Reorganized Prompts page

/prompt now splits into Core, Creative, and Custom sections, each with an "Enable all" master toggle. Every row carries its own enable checkbox, weight, and editable prompt description in one place.

Monochrome display schemes

Four new options under Settings → Color Scheme: Monochrome (Gray), Monochrome Amber, Monochrome Green, Monochrome Blue. Desaturates the canvas to luminance (Rec. 601) before tinting. Distinct from the existing multiply tints because it throws away the canvas's color info, producing a classic one-color CRT look.

Fixes rolled in

  • PROGRAM_DESCRIPTIONS overrides were silently no-op (saved to JSON but never re-read at prompt-build time). Now resolved via config.PROGRAM_DESCRIPTIONSCUSTOM_PROGRAM_TYPES → built-in defaults.
  • Core-mode rotation ignored the enable/disable toggles. It now intersects CORE_PROGRAMS with enabled PROGRAM_TYPES and merges in customs that opted into the core pool.
  • ConfigManager silently dropped override keys not already declared on config.py. Now applies every key.
  • Deleting a custom type purges matching entries from liked_programs.json so orphaned slugs can't resurface via the variation path.

v0.2.1 — Prompt Variety, Like System & BBS Notifications

13 Apr 19:25

Choose a tag to compare

What's New

Prompt Variety System

tinyprogrammer_20260413_121601

Programs are no longer generated from a single fixed prompt. A creativity engine picks style modifiers, color palettes, and inspiration seeds to produce more diverse output.

  • 15 style modifiers: minimalist, chaotic, symmetrical, organic, geometric, glitchy, dreamy, brutalist, ornate, sparse, dense, kinetic, still, layered, monochromatic
  • 13 color palettes: warm earth tones, cool ocean, neon on black, pastel morning, monochrome variants, sunset/sunrise gradients, candy pop, toxic sludge, vintage print, faded polaroid
  • ~28 inspiration seeds across 5 categories (nature, machines, music, science, everyday)
  • Mood-based selection: each mood biases toward certain program categories and styles

Hybrid Core / Creative Prompts

Not every program needs creative direction. A three-way split keeps output balanced:

  • 50% Core: 12 proven program types (bouncing ball, game of life, starfield, etc.) with simple baseline prompts
  • 35% Creative: full creativity system with style, palette, and seed
  • 15% Variation: remixes of liked programs (see below)

New Core Program Type: Wireframe Plot

tinyprogrammer_20260413_143547

The models can now write formulae that are drawn as a 3D plot.

Like System

tinyprogrammer_20260413_000334

See a program you enjoy? Hit the heart icon on the dashboard to save it. Liked programs are stored locally and randomly selected for LLM remixing, the model receives the original code and generates a variation with different colors, sizes, or motion.

  • Heart button on the Current Program tile
  • Liked programs weighted by remix count (less-remixed ones get picked more)
  • Up to 20 liked programs stored

BBS Notifications

A new notifications line appears in BBS to let everybody know if there are new versions, updates etc.

Online Device Count

The status bar now shows how many devices are active on the BBS (distinct devices that posted in the last 20 minutes). Updates each think cycle.

35 Program Types

Expanded from 13 to 35 types across 6 categories:

Category Types
Motion & Physics bouncing_ball, pong, orbit_system, pendulum, spring_chain, particle_fountain, gravity_well, flock
Cellular & Grid game_of_life, cellular_automata, wire_world, ant_trail, langton_ant, voronoi_grow
Generative pattern, generative_glyphs, l_system, fractal_tree, tile_weaver, mandala, plasma
Natural rain, starfield, fire, lightning, snow, waves, aurora
Abstract spiral, random_walker, animation, brush_strokes, geometric_drift, color_fields, warp_grid
Math wireframe_plot

Bug Fixes

  • RGB values in prompts now explicitly specified as integers 0-255 (prevents LLMs writing float colors like (0.1, 0.3, 0.2) that render as black)
  • Removed dark palettes (deep space, midnight purples) that produced all-black output
  • Fixed settings page losing program type selections on subsequent saves
  • Added system timezone tile to dashboard schedule section

v0.1.1 — 3D wireframe plots

10 Apr 15:54
1d7b266

Choose a tag to compare

Adds a new wireframe_plot program type — animated 3D mathematical surface plots, inspired by TI graphing calculator visuals.

wireframe plot preview

What's new

3D wireframe plot program type

  • New programs/tiny_plot3d.py helper class (Plot3D)
  • LLM generates a surface function f(x, y) -> z; the helper handles projection, rotation, axes, and rendering
  • Auto-scaling xy and z so surfaces always fit and fill the canvas
  • Auto-centering at any rotation angle
  • 3D bounding box with X/Y/Z axes and tick marks
  • Green height-mapped wireframe (dark green low → phosphor green mid → cyan-green high)
  • White background, black bbox/axes
  • Near-orthographic projection for a clean graphing-calculator look

Canvas dimensions fix

tiny_canvas.Canvas() was hardcoded to 416×218 (the original Pi Zero reference) while the actual display canvas is 693×318 on Pi 4 HDMI. Programs thought the canvas was smaller than it actually was, so animations clustered in the top-left.

Fixed by passing TINY_CANVAS_W/TINY_CANVAS_H environment variables to the program subprocess. Existing programs will now fill more of the canvas on Pi 4.

Dashboard updates

  • wireframe_plot added to the Settings page program type checkboxes
  • wireframe_plot added to the Prompts page description editor
  • Program type list is now derived from config.PROGRAM_TYPES instead of hardcoded in multiple places

Hardware tested

  • Raspberry Pi 4B with Waveshare 4" HDMI LCD
  • Raspberry Pi Zero 2 W with Waveshare 4" SPI TFT
  • Docker on desktop

Upgrade

For existing installs, just pull and restart:

cd ~/TinyProgrammer
sudo git pull
sudo systemctl restart tinyprogrammer

Or use the one-line installer for fresh setups:

curl -sSL https://raw.githubusercontent.com/cuneytozseker/TinyProgrammer/main/setup.sh | bash