Skip to content

Session Log — 2026-07-21

Canva Editor: Chat Debugging & Image Upload

Chat "no response" errors

  • User reported "no response messages from questions error unknown" in the chat panel
  • Backend was returning empty replies with no error info
  • Root cause: OpenCode Zen API key had insufficient balance — hy3-free model requires credits despite being listed as "free" in Zen docs
  • Upstream returns {code: 30001, message: "Sorry, your account balance is insufficient"} — not the standard OpenAI error format

Error surfacing fix

  • Updated editor-server.js to check for both error formats:
  • OpenAI-style: {error: {message: "..."}}
  • opencode-style: {code: 30001, message: "..."}
  • Updated editor.js frontend to display j.error prominently instead of "unknown"

Model discovery

  • hy3-free — listed in Zen docs as free, but actually requires account balance
  • big-pickle — truly free, routes to MiMo V2.5 (Xiaomi) behind the scenes
  • Switched chat model to big-pickle — chat now works without balance
  • Other free models available: DeepSeek V4 Flash Free, MiMo-V2.5 Free, North Mini Code Free, Nemotron 3 Ultra Free

Image upload feature

Added drag-and-drop and file picker image upload: - HTML: "+ Add Image" button + hidden file input in sidebar - JS: injectImage(file) reads file as base64 data URL, injects <img> into iframe body - JS: Drag-and-drop handlers on stage-wrap (dragover visual feedback, drop injects image) - JS: Modified startResize to handle images — scales width/height proportionally instead of changing font size - CSS: .drag-over class for dashed outline feedback during drag

Technical notes

  • Node's fetch() stalls against opencode.ai/zen/v1 — curl spawn works reliably
  • Server runs as detached process: setsid nohup node editor-server.js > /tmp/canva-editor.log 2>&1 &
  • Autostart added to Hyprland config (~/.config/hypr/modules/autostart.lua)
  • Export: Playwright renders temp PNG → ImageMagick converts to WebP (quality 90)

Files modified

  • ~/.config/opencode/skills/canva-design/editor/editor-server.js — error surfacing, model switch to big-pickle
  • ~/.config/opencode/skills/canva-design/editor/editor.js — error display, image upload, drag-drop, image resize
  • ~/.config/opencode/skills/canva-design/editor/editor.html — image button, drag-over CSS

OpenCode Zen pricing research

  • Zen pay-as-you-go: free models cost $0, paid models range $0.05–$180/M tokens
  • $20 top-up lasts ~20,000 requests on cheap models (DeepSeek V4 Flash) to ~300 on expensive (Claude Sonnet)
  • Free models are genuinely free (no per-token cost) but some require account balance