Skip to content

craft-apps

The 13 storytold "Craft" apps (Apache-2.0, github.com/storytold): photocraft (Photoshop-like), vectorcraft (Illustrator), wordcraft (Word), gridcraft (Excel), pdfcraft (Acrobat), deckcraft (PowerPoint), designcraft (InDesign), lightcraft (Lightroom), filmcraft (Premiere), effectcraft (After Effects), soundcraft (Pro Tools), cadcraft (AutoCAD 2D), figcraft (Figma). Each is <app> (GUI) + <app>-cli (commands, --help) + a user-scope Claude Code MCP server named after the app. Rule entry: memory design-tools-craft.

Status

  • Installed by ~/Notes/bin/craft-setup (same script on the server and the Mac): latest release, SHA256-verified, ~/.local/opt/<app>-<ver> (current + one previous; rollback = repoint the ~/.local/opt/<app> symlink), CLIs in ~/.local/bin, MCP registration in ~/.claude.json, ~/design link. Skips an app whose release/checksum fails and exits 1 at the end. Not installed: figcraft-server, artcraft/craft-launcher.
  • Auto-update: user timer craft-update.timer runs craft-setup daily ~05:00 (units in ~/Notes/bin/systemd/, linked into ~/.config/systemd/user/); failure pages through the shared service.d/10-job-failure.conf. Updated binaries reach Claude sessions on their next restart. Manual: systemctl --user start craft-update or craft-setup.
  • Versions: do not keep a table; ls ~/.local/opt is the truth (checked 2026-10-19, e.g. photocraft 0.10.0, vectorcraft 0.13.1, wordcraft 0.8.0; the 2026-10-13 install was 0.5-0.10).
  • MCP folder confinement, read from ~/.claude.json on 2026-11-06: confined to ~/design (vectorcraft, wordcraft, effectcraft, designcraft via --automation-read-root/--automation-write-root; pdfcraft via --root); not confined in current registration: photocraft, gridcraft, deckcraft, lightcraft, filmcraft, soundcraft, cadcraft, figcraft. Keep their files in ~/design by habit. craft-setup detects flags from top-level --help each run.
  • Tool schemas for the 13 MCP servers are deferred, so they cost no context until used.

Decisions

  • ~/design is a symlink to the NAS share /mnt/storage/EmbeddedEra/design (owner, 2026-10-12: use our NAS, not GitHub). Protected by parity, hourly rsnapshot, the NVMe copy and restic. The Mac reaches it at /Volumes/EmbeddedEra/design via smb://192.168.5.15/EmbeddedEra. Never put design binaries in the vault git repo (brand/design/ is gitignored). Copy inputs (brand logo ~/Notes/brand/artwork/logo/embeddedera-lockup.svg, shop photos) into ~/design first.

Recipes

  • Watermark (proven 2026-10-12): vectorcraft-cli convert logo.svg logo.png --scale 2, then photocraft-cli run photo.jpg --cmd file.placeEmbedded --params '{"path":"/home/angel/design/logo.png","scale":35,"center":[x,y]}' --cmd layer.setProps --params '{"opacity":0.55}' --out out.jpg --quality 90. The lockup is dark; use a white/copper variant on dark photos.
  • photocraft-cli commands --filter <word> / vectorcraft-cli commands list the command ids and params (850+/740+ at install).
  • Logo v2: ~/design/logo-v2/ and ./make.sh rebuilds every file deterministically (byte-identical output, no git churn). Photo demo: ~/design/photos-demo/build.py. Both use relative paths. The Mac path is untested until the owner runs craft-setup there; see memory mac-workstation.

Log

  • 2026-10-12: PhotoCraft 0.7.0 + VectorCraft 0.10.0 installed at the owner's request ("so you can create watermarks... come up with a logo").
  • 2026-10-13: WordCraft + GridCraft added ("the spreadsheet one, the one to write, like Word"); then the whole family ("install all the family of tools", ~600 MB in ~/.local/opt); auto-update added ("we don't fall behind"). More detail in projects/plex-server.md Log for those dates.

  • 2026-11-06: Manually ran craft-update.service; all 13 apps upgraded to GitHub latest stable releases, all downloads SHA256-verified. Independently compared release API tags to active install symlinks and executable versions; all 13 --version and --help checks passed. Service Result=success / ExecMainStatus=0; daily timer enabled and active. Current MCP confinement refreshed from live registration.