Generator Bajek

Powered by the Portable Animator engine

Portable Animator is a lightweight animation and scene-synthesis engine. Generator Bajek is its flagship, finished application that puts these capabilities into practice.

All inference runs LOCALLY.

User Interface

The screenshots below come from the running desktop application.

„Nowa Bajka” (New Story) screen — form with the child's age and the story language
New Story (Nowa Bajka) The user enters the child’s age and picks a language — the app guides them step by step · click to enlarge
„Moje Bajki” (My Stories) screen — library of previously generated stories
My Stories (Moje Bajki) A library of finished stories, with a refresh option · click to enlarge
„Muzyka” (Music) screen — track library filtered by mood
Music Library (Biblioteka Muzyki) The soundtrack is selected automatically, with a mood filter · click to enlarge
„Asystent” (Assistant) screen — ask a question, optionally hear the answer read aloud
Assistant (Asystent) Chat support, with the option to have the answer read aloud · click to enlarge

Interactive Demo — Skeletal Playback

This is an illustrative demo, not the production pipeline. A 2D canvas renders a scene graph: a JSON document describes a 2D character skeleton (root, hips, torso, neck, head, arms, legs) where every bone inherits its parent's transform. Two keyframe clips (Idle and Run cycle) are interpolated with a Catmull–Rom spline inside a requestAnimationFrame loop. It is fully deterministic: the same scrubber position always gives the same pose. Nothing here generates images or speech, and no model is called — the skeleton and keyframes are illustrative sample data, not an export from a real project. The actual rendering, TTS and video assembly run locally in the desktop application, not in this page.

Pipeline Architecture

  • Text advisor: local GGUF language model (2.2 GB on disk)
  • Image generation: SD-Turbo, local inference, 4.9 GB safetensors weights
  • Speech recognition (STT): offline model
  • Speech synthesis (TTS): local voices
  • Frame orchestration and video assembly: frames and the audio track are joined locally into a single file with moviepy (H.264/AAC, 24 fps)
Target architecture: scenes as independent DAG nodes Specification (docs/PORTABLE_ANIMATOR_ROADMAP.md) -- not yet implemented, today's pipeline is monolithic Scene 1 depends_on: [] Scene 2 depends_on: [] Scene 3 depends_on: [1, 2] Scene 4 (selected) depends_on: [3] input_fingerprint = hash(prompt+assets+ timing+camera) -- skip if unchanged Scene Inspector Prompt Assets Timing Camera Dependencies Three regeneration levels: 1) single scene atom 2) scene + DAG successors 3) full project recompute (today's behavior, kept as fallback) Today's data model: a flat `scenes` list with no IDs (mock_video.projekt.json). Target: nodes with explicit ID + depends_on -- see PORTABLE_ANIMATOR_ROADMAP.md §2.2.

Roadmap

The Scene DAG above is a specification today, not implemented code -- see the full roadmap and current status on the project roadmap.