Skip to content

About

Redrob Canvas is a modern, cross-platform, agentic graphics editor built with Rust and Qt Quick.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

734 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Redrob Canvas

Redrob Canvas

English · 한국어

Redrob Canvas is an agentic graphics editor: photo, vector and page layout in one window, with an AI tools layer across all three and an agent that edits the document beside you.

It is one desktop application (apps/redrob-canvas, Rust and egui) with three modes, each a complete editor, under editors/ and built from source (where the code came from: SOURCE_ORIGINS.md and NOTICE):

Mode Kind What it is for
Photo raster Layers, masks, adjustment layers, layer styles, brushes, type, colour management; real PSD files
Vector vector Paths, booleans, text on paths, gradients, artboards; SVG, AI, EPS, PDF, DXF
Layout page layout Master pages, threaded text frames, hyphenation; IDML, PDF, PPTX, EPUB

The shell owns the window, the mode switch (Ctrl+1 / Ctrl+2 / Ctrl+3, or --mode photo|vector|layout), one config directory (ai.redrob.canvas) and the agent. Switching modes keeps every editor's open documents. The shared docking, colour-management and printing code the three editors have in common lives in editors/shared.

The same binary is the command line: redrob-canvas photo|vector|layout ARGS converts, inspects, runs command batches and serves MCP on stdio without opening the window (redrob-canvas photo --help).

AI tools and the agent

Two layers sit across the modes rather than inside any one of them:

  • Agent (crates/redrob-agent): a chat panel whose model edits the document through typed tool calls, each reviewable before it lands. Requires Redrob Code. The agent talks to the one shared Redrob Code daemon on this machine (~/.redrob/run/server.json, started with redrob service start) at <daemon>/v1/chat/completions, OpenAI-compatible and streaming, with x-redrob-app: canvas. The daemon holds the Redrob console key; this app never has a key of its own and has no direct path to the console. Sign in once, in Redrob Code, in Redrob Launcher, or here. Without Redrob Code the panel says so and links to the launcher's latest release.
  • AI tools (crates/redrob-ai, in progress for 0.7): inpaint, outpaint, erase, upscale, remove background and select subject through a local IOPaint engine the app installs and runs on 127.0.0.1; vectorize for the Vector mode. Everything runs on the machine; nothing is uploaded.

Control from Redrob Code

While the window is open it hands its own tools to the shared Redrob Code daemon (redrob-app-bridge, MCP on 127.0.0.1), so the agent in any Redrob surface -- a phone chat included -- can drive the open document as MCP server app:canvas. Without a daemon the app runs as before. The tools:

  • document_info -- path (or untitled), active mode (raster, vector, design), size, layer count, unsaved changes.
  • open_file {path} -- opens the file in the editor its type belongs to; answers the mode.
  • switch_mode {mode: raster|vector|design} -- switches the window, as Ctrl+1/2/3 do.
  • list_layers {max?} -- the active document's layers: id, name, visible, selected.
  • select_layer {id|name} -- makes a layer the active one.
  • set_layer_visible {id, visible} -- shows or hides a layer.
  • export {format: png|svg|pdf, path?, scale?} -- exports the current page or artboard; answers the path (svg in vector mode only).
  • save -- saves to the document's own file; an untitled document is refused with Save As named.

Formats

What each mode opens and saves comes from its editor. The short list:

Mode Open Save / export
Photo PSD, PSB, .rphoto, ORA, KRA, layered TIFF, PDN, SVG, PNG, JPEG, TIFF, WebP, GIF, BMP, OpenEXR, HDR, HEIF/HEIC (read), camera RAW, Affinity (read) .rphoto, PSD, PSB, ORA, TIFF, PNG, JPEG, WebP, GIF, BMP, OpenEXR, AVIF (optional feature)
Vector .rvector, SVG, SVGZ, AI (PDF-compatible), EPS, PDF, DXF, EMF/WMF, raster images, PSD/PSB as merged image .rvector, SVG, PDF (with PDF/X), AI, EPS, DXF, PNG, JPEG, WebP, PSD, Print, Package
Layout .rlayout, IDML, images, PDFs and vectors as placed assets .rlayout, PDF (PDF/X-4, PDF/A-2b), IDML, PPTX, EPUB, PNG

docs/formats.md says how the shell routes a file to a mode, where each editor's format tables live in the code, and which legacy extensions (.pcraft, .vectorcraft, .designcraft) still open.

Build

Rust 1.95 (rust-toolchain.toml pins it; rustup picks it up). On Linux the egui, wgpu and rfd stack needs the X11, Wayland, GL and GTK development headers:

sudo apt-get install -y libxkbcommon-dev libwayland-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libgtk-3-dev
cargo build --release -p redrob-canvas
target/release/redrob-canvas

The gates every pull request must pass, as CI runs them (.github/workflows/ci.yml: the checks job, then rust over our crates only with --profile ci):

cargo fetch --locked && python3 tools/generate_distribution_artifacts.py --check
python3 tools/check_design_system.py
python3 -m unittest discover -s tools/tests -p "test_*.py"
cargo fmt --all -- --check
cargo clippy -p redrob-canvas -p redrob-ai -p redrob-agent --all-targets --locked --profile ci -- -D warnings
cargo test -p redrob-canvas -p redrob-ai -p redrob-agent --locked --profile ci

There is no Qt, CMake or Node anywhere in the build. The root Cargo.toml is the one workspace manifest for the shell, the editors and their libraries.

Project structure

apps/redrob-canvas/     The shell: window, mode switch, services, agent panel (egui / eframe)
crates/redrob-agent/    Redrob Code client: streaming chat completions, tool loop, approvals
crates/redrob-ai/       AI tools layer (IOPaint engine, vectorize); in progress
editors/photo/          Photo mode
editors/vector/         Vector mode
editors/layout/         Layout mode
editors/shared/         Shared UI, colour management, print and PDF crates
installer/              macOS disk image and Windows setup
tools/                  Notice generator, design-system guard, release packaging
docs/                   Architecture, formats, licensing

Where the editors came from

The editors started as four MIT OR Apache-2.0 projects and are no longer synced with them; they are developed here. Their authors keep their copyright: the licence and NOTICE files stay intact under editors/<name>/ and are reproduced in NOTICE and COPYRIGHT, and SOURCE_ORIGINS.md records each origin and commit. Their original names and logos are trademarks of their authors, not open source, and are not used or shipped here.

Roadmap

Where the project is going, milestone by milestone: ROADMAP.md. The change history is CHANGELOG.md.

Releases

Push a vMAJOR.MINOR.PATCH tag on main, then run gh workflow run release.yml --ref main -f tag=vMAJOR.MINOR.PATCH. The workflow (.github/workflows/release.yml) checks the tag against origin/main, Cargo.toml and the changelog, runs every gate, builds redrob-canvas for each platform with cargo build --release, signs and notarizes macOS with the organization's Developer ID, signs Windows through Azure Artifact Signing with the job's OpenID Connect login (the executable before the zip, then the uninstaller, then the setup), and hands the artifacts to the shared redrob-labs publish job (redrob-labs/.github/.github/workflows/release-publish.yml), which writes SHA256SUMS.txt and redrob-launcher.json and publishes the release as latest. -f dry_run=true builds and signs the dispatched branch and publishes nothing. Which platforms a run builds is decided by tools/release_matrix.py; Windows x64 is built only once the repository variable WINDOWS_SIGNING_READY is "true", never unsigned.

Platform Assets Signing
Linux x86_64 .tar.gz, .deb (tools/release/make_deb.py) none; verify the published SHA-256 sums
macOS arm64 (Apple silicon) .dmg (installer/macos/), .zip Developer ID, hardened runtime, notarized and stapled, app and disk image each
Windows x64 -setup.exe (installer/windows/), -portable.zip Azure Artifact Signing (OIDC) on the app, the uninstaller and the setup

Installing

Platform Download Install Remove
Windows …-windows-x64-setup.exe Run it. Per user, no administrator rights Settings > Apps > Redrob Canvas
macOS …-macos-arm64.dmg Open it and drag Redrob Canvas onto Applications Open Uninstall Redrob Canvas on the disk image
Linux …-linux-x86_64.deb sudo apt install ./redrob-canvas-…-linux-x86_64.deb sudo apt remove redrob-canvas

Redrob Launcher installs from the -portable.zip on Windows, the .dmg on macOS and the .tar.gz on Linux. Asset names follow redrob-canvas-<version>-<os>-<arch>[-portable].<ext>. Every archive carries LICENSE-MIT, LICENSE-APACHE, COPYRIGHT, NOTICE and THIRD_PARTY_NOTICES.md beside the binary.

License

MIT OR Apache-2.0, at your option: LICENSE-MIT, LICENSE-APACHE, COPYRIGHT. Third-party attribution is in NOTICE, SOURCE_ORIGINS.md and the generated THIRD_PARTY_NOTICES.md; the policy is in docs/licensing.md.

About

Redrob Canvas is a modern, cross-platform, agentic graphics editor built with Rust and Qt Quick.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages