Skip to content
ProjectsDemosResearchDocsAI search
GitHubSign in
qentrah

© 2026 Qentrah

Projects

All projectsLive demosOpen sourceDownloads

Resources

Documentationnpm packagesBlogRun this hub

Qentrah

AboutStudio websiteContact

GitHub

qentrahUp-to-codeuptocodejs
Projects

QH Pixels

Agent-authored pixel animation with a preview studio, local MCP, SQLite revisions, and PNG, GIF, JSON, and MP4 exports.

Ahmed MansourMaintained by
Explore QH PixelsGitHubDocs
Maintainer
qentrah
License
MIT
Technology
JavaScript
Status
Preview
Loading video…
0:00 / 0:00
1 / 3 · Video
OverviewInstallationProject guideDocsIssues

About QH Pixels

Agent-authored pixel animation with a preview studio, local MCP, SQLite revisions, and PNG, GIF, JSON, and MP4 exports.

  • Numeric palette cells authored through local MCP
  • Preview workspaces, character motions, and frame timing
  • SQLite storage with revision conflict checks and restore
  • PNG, sprite sheet, JSON, GIF, and MP4 exports
  • MIT-licensed fox walk, turn, car, and balloon motion pack
Original project page

Install & get started

Terminal
Shell
1git clone https://github.com/qentrah/qh-pixels.git
2cd qh-pixels
3npm ci
4npm run dev
Follow the installation guide

Project guide

Read the original README for the complete repository reference.

QH Pixels

Agent-authored pixel animation, with a preview-only studio.

A Qentrah project. Characters are numeric palette cells, authored through local MCP. The browser plays and inspects them; clicking the artwork never paints it.

Watch the 30-second walkthrough · Original recording

A motion pack, as a gift

The pack contains native 256 × 256 artwork with articulated fingers, rounded eyes and catchlights, clothing details, body/head turns, and smooth scene timing. These frames are rendered at their target resolution—not enlarged copies of the earlier sprites.

MotionPreviewFramesPlaybackPixel document
Walk
321.33-second loopJSON
Turn
482-second loopJSON
Car journey
726-second sequence, stops in the studioJSON
Balloon
484-second loopJSON

GIF previews repeat for viewing. The JSON preserves the car's single-shot playback flag. PNGs, JSON, GIFs and a timing manifest are included. The earlier pose collection is no longer part of the active presets; previous local edits remain recoverable in SQLite revisions.

Run locally

Requires Node 24+. Install FFmpeg for GIF and MP4 export.

Terminal
Shell
1npm install
2npm run dev

Studio: http://127.0.0.1:8094 · API: http://127.0.0.1:8095.

For the production bundle, run npm run build, then npm start and open port8095.

Preview workflow

  • Workspaces contain characters. Create several workspaces and separate their character lists.
  • Characters contain named motions. Selecting a motion limits the timeline, frame stepping and playback to that motion.
  • Drag the sidebar divider to resize it; arrow keys also resize the focused divider.
  • Drag the preview to pan. Use the XY grid to inspect coordinates; it overlays a faint coordinate gradient, labeled axes and a pointer crosshair without changing any cells.
  • Full-screen preview hides the header, sidebar, timeline and controls. Press Escape to return.
  • The browser cannot paint, erase, duplicate frames or alter their timing. Agents make artwork changes through MCP. Workspace/character creation, agent configuration, preview controls and export remain available.

Space plays/pauses and left/right arrows step frames when the preview is focused. The GitHub icon opens this repository.

Connect an agent

Use a standard local stdio MCP configuration:

json
json
1{
2  "mcpServers": {
3    "qh-pixels": {
4      "command": "node",
5      "args": ["/absolute/path/qh-pixels/server/mcp.mjs"]
6    }
7  }
8}

The server and UI share local SQLite storage. Read qh://protocol before editing.

  1. list_workspaces / create_workspace establish a workspace.
  2. list_models / create_project with modelId and workspaceId create a character. Built-ins: fox, fox-car, fox-balloon, blank.
  3. read_project, read_region, preview_frame and read_3d_model inspect the current artwork and numeric geometry.
  4. apply_operations batches grid or pixel changes with an expected revision; conflicts do not silently overwrite another agent.
  5. render_3d_pose, inspect_animation, candidate comparison and revision restore support corrections.
  6. export_project produces PNG, sprite sheets, JSON, GIF or MP4. register_model saves a reusable custom pixel model.

The app records an external model preference; inference runs in the external agent, not in the browser. No image-generation service is required.

Install the reusable qh-pixels skill by copying its folder into your agent's skills directory. The custom QH harness adapter remains a draft integration task; standard MCP works now.

Coordinates and rendering

Integer cell (x,y) maps to y*width+x; cell centers are (x+.5,y+.5). Pixel0 is transparent. Canvas coordinates remain independent of viewport zoom/pan.

Sizes are configurable through 1,024 × 1,024. Doubling both sides multiplies pixel count by four. Large cels use compact non-overlapping color runs; every cell remains individually addressable through rectangular reads and patches.

The detailed fox renderer casts orthographic rays into authored ellipsoid, box and cone surfaces. A depth buffer resolves visibility; head, sleeves, fingers and shoes follow their joint transforms. This gives new contours and detail at256/512/1024 instead of magnifying a64-pixel image. Agent-painted frames retain their pixels on resize. The car and balloon are authored layered scene presets, not a general physics simulator.

Frame holds control time. Video24/30/60 FPS repeats held poses without inventing intermediate frames. GIF quantizes timing to centiseconds; MP4 is lossy. Numeric diagnostics can detect specific defects but cannot prove artistic or emotional quality.

See protocol, rendering mathematics, interface references and validation.

Checks and reproducible assets

Terminal
Shell
1npm test
2npm run build
3npm run test:ui
4node scripts/build-motion-pack.mjs
5npx playwright install ffmpeg
6node scripts/record-studio.mjs

Browser tests require an installed Chrome at the documented path or CHROME_PATH. UI tests use temporary workspaces and clean up their fixtures. Runtime databases, revision history and local exports are excluded from Git.

The source and algorithm-generated motion pack are shared under the MIT license. Third-party packages retain their own licenses. The supplied Qentrah logo remains a Qentrah brand mark.