emarpiee2k downloadsExtend core plugin Canvas with PureRef-like image controls, inline Base64 embedding, and adjustable navigations.
[!WARNING] Possibly unmaintained — I've lost hope in the Obsidian team polishing their Canvas implementation, so Kambas may no longer receive updates. My focus has moved to Canvast. Kambas still works as-is, but expect few or no fixes going forward.
An image toolkit and enhanced visual workspace for Obsidian Canvas.
Kambas transforms Obsidian Canvas into a self-contained, portable reference environment for designers, researchers, and visual creators. Best suited for focused, small-to-medium scale reference boards and mood boards, its core feature is embedded image storage — images are encoded as Base64 data URIs and stored directly inside the .canvas file itself, eliminating vault clutter and broken link dependencies entirely.
Obsidian Canvas excels at connecting ideas, but managing visual reference assets creates friction for visual creators:
.canvas file requires separately locating and bundling every referenced attachment — defeating the purpose of a self-contained reference board.The defining feature of Kambas is inline Base64 image embedding. When you paste or drop an image, Kambas can encode it as a data URI stored directly in the .canvas JSON:
{
"id": "node-abc123",
"type": "link",
"url": "data:image/png;base64,iVBORw0KGgo...",
"kambasTags": ["concept", "character-design"],
"unknownData": {
"kambasFlipH": false,
"kambasFlipV": false,
"kambasGrayscale": false,
"kambasPalette": false,
"kambasOpacity": 1,
"originalWidth": 1920,
"originalHeight": 1080,
"kambasMediaLabel": "concept-01.png"
}
}
The result is a single portable .canvas file — no attachments folder, no broken paths, no extra steps when sharing, archiving, or syncing.
Right-click any canvas node or edge to access enhanced controls:
Tag nodes: Open tag manager modal to add, edit, or reorder node tags (hotkey: T).
Arrange selected elements: Organize selected canvas elements into Grid, Row, or Column layouts sorted By label (A-Z / Z-A) or By tag (A-Z / Z-A).
Set media label…: Assign custom canvas labels (node.label) to selected embedded media with interactive zero-padded counter formatting (label-## $\rightarrow$ 01, 02; label-### $\rightarrow$ 001, 002).
Flip horizontal / vertical: Mirror the image along its X or Y axis (persisted across canvas re-renders; hotkeys: H / V).
Toggle grayscale: Apply a CSS grayscale filter to evaluate light values, structure, and contrast without color distraction (hotkey: G).
Toggle color palette: Extract and display dominant color swatches overlaying the image (3–10 swatches, configurable) with a one-click Copy all palette colors button (hotkey: P).
Change opacity: Set transparency (0–100%) on any canvas element — images, text cards, file embeds, groups, or canvas edges.
Reset to original size: Restore a scaled node to its native pixel dimensions.
Move media to…: Relocate media files using a folder suggest modal with target folder auto-suggest, destination folder badges, naming strategy selector, and 7 numbering formats (01, 001, 1, I, i, A, a).
Copy media to…: Duplicate media files into a target vault folder while preserving canvas links.
Embed in canvas file…: Convert vault-linked image nodes into inline Base64 data URIs (with optional deletion of source vault file).
Copy image to clipboard: Copy raw image data directly to system clipboard.
Swap media…: Replace an existing image or video with another asset from your vault, local disk, or clipboard — preserving node position and aspect ratio.
Optimize Base64 size: Manually optimize and compress Base64 images to WebP data URIs with custom pixel dimension caps and quality targets.
Organize selected cards on the canvas with a 2-tier right-click context menu (Arrange selected elements):
node.label). For unlabeled cards, it seamlessly falls back to card titles, note headers, or file names.kambasTags[0]).Kambas integrates directly with native Obsidian Canvas node header labels (node.label), keeping your workspace organized:
label-## $\rightarrow$ label-01, label-02; label-### $\rightarrow$ label-001, label-002).Take complete control over animated GIF files directly on the canvas without external tools:
Space), step forward/backward frame-by-frame (chevron buttons), scrub through frames via timeline slider, or adjust playback speeds (0.25x, 0.5x, 1.0x, 1.5x, 2.0x, 4.0x).camera button).Toggle GIF controls on/off).Inspect fine image details and artwork without changing canvas zoom levels:
Q (configurable) over any image node to open an interactive magnifying loupe lens.loupeSmoothing: 0.05–1.0) for smooth, precise cursor movement over image details.circle, square, rounded) in settings.[!NOTE] Canvas image Level of Detail (LOD) functionality is inspired by and based on the Canvas Image LOD plugin.
High-density mood boards containing 100+ high-resolution images can strain system memory and cause viewport zoom stuttering. Kambas includes an adaptive Canvas Image LOD rendering engine supporting both vault file image links and inline Base64 data URIs:
Pasting or dropping files onto the canvas presents an instant choice:
.canvas.Multi-file drops are processed in a single batch. The Show media labels setting controls node header label visibility above embedded image cards.
When moving or copying media assets within your vault:
/).canvas_image-01).#character-design $\rightarrow$ character-design-01).01, 02…)001, 002…)1, 2…)I, II…)i, ii…)A, B…)a, b…)A floating, resizable, position-remembered panel accessed from the Tags button in the canvas toolbar or hotkey F.
Kambas uses a 3-state logic (Neutral ☐, Include ✓, Exclude ✕) per tab across three tabs ([ TAGS ], [ COLORS ], [ LABELS ]):
T to open tag modal for comma-separated kebab-case tags (#character-design).canvas-toggle-tag-visibility) or change badge positions (outside-below or inside bottom-left).canvas-toggle-auto-select-filtered-items).Away Mode). Instantly hides all canvas content by reducing node opacity to 0% and locking interactive controls for quick visual privacy.Away mode on canvas close). When enabled for a canvas file, closing the tab, opening another file in the same tab, or navigating away automatically activates Away Mode and persists 0% node/edge opacity to disk, ensuring instant visual privacy when re-opening or stepping back in history.[!NOTE] Keyboard panning functionality is inspired by and based on the Canvas Keyboard Pan plugin. All navigation and action shortcuts can be customized in plugin settings using interactive key recorders with full single-key and multi-modifier support (
Ctrl,Alt,Shift,Meta).
W / S / A / D or Arrow Keys (configurable)+ / - (configurable)Space (configurable, features smooth cubic-bezier camera transition)Q (configurable)G (configurable)H (configurable)V (configurable)P (configurable)T (configurable)F (configurable)All features can be triggered directly from Obsidian's Command Palette (Ctrl+P / Cmd+P):
| Command Name | Description |
|---|---|
| Toggle proxy swapping (canvas image lod) | Enable or disable adaptive LOD image proxy swapping. |
| Build proxies for current canvas (canvas image lod) | Prewarm and build image proxy tiers for all images on the active canvas. |
| Clear proxy cache (canvas image lod) | Purge all generated LOD image proxies from IndexedDB local storage. |
| Restore original images on current canvas (canvas image lod) | Temporarily restore all original full-resolution images on the active canvas. |
| Toggle embedded media labels | Show or hide native node labels above embedded Base64 media cards. |
| Away Mode | Toggle presentation/focus mode to hide UI overlays. |
| Away mode on canvas close | Toggle automatic Away Mode activation when closing, replacing, or navigating away from the active canvas file. |
| Tag & Color Filter Panel | Open or close the floating Tag, Color, and Label filter panel. |
| Toggle tag visibility | Hide or show tag badges across all canvas cards. |
| Toggle auto-zoom on tag selection | Enable or disable automatic viewport zooming when selecting filter tags. |
| Toggle auto-select filtered items | Automatically select canvas nodes matching active filter panel selections. |
| Toggle GIF controls on/off | Show or hide interactive GIF playback toolbars and scrubber controls. |
Access settings in Obsidian Settings > Kambas:
| Setting | Description |
|---|---|
| Show media labels | Display native canvas node labels above embedded media cards. |
| Preserve media filename on ingest | Automatically set native canvas node label to original file name when dropping, pasting, or embedding media. |
| Enable GIF controls | Show GIF playback toolbar, timeline scrubber, and frame extraction on GIF nodes (default: true). |
| Tag badge position | Position tag badges outside-below or inside bottom-left (outside / inside). |
| Zoom on select | Auto-zoom viewport to fit visible nodes when filters update. |
| Auto-select filtered items | Automatically select canvas elements matching active filter panel selection. |
| Auto-close filter panel | Automatically close panel when losing focus or clicking outside. |
| Color palette swatches | Number of dominant colors to extract (3–10). |
| Palette color separator | Delimiter used when copying palette colors (e.g. , , \n). |
| Color extraction mode | Auto, Manual, or Disabled color extraction. |
| Auto-optimize Base64 | Automatically compress pasted/dropped Base64 images to WebP URIs. |
| Base64 max dimension | Maximum pixel resolution limit for Base64 compression (default: 2048px). |
| WebP compression quality | Target compression quality for WebP images (0.10–1.00). |
| Loupe Optics & Hotkey | Hotkey (Q), magnification (1.5x–10.0x), lens size (100px–600px), shape (circle, square, rounded), and motion smoothing (0.05–1.0). |
| Media & Canvas Action Hotkeys | Interactive key recorders for Grayscale (G), Flip H (H), Flip V (V), Palette (P), Tag Modal (T), Filter Panel (F), Loupe (Q), and Selection Zoom (Space). |
| Keyboard Pan & Zoom Controls | Customizable key bindings for WASD / Arrow pan, zoom step speed, and max pan velocity. |
| Enable image optimization | Enable adaptive Level of Detail engine for high-density canvas performance. |
| Performance Profile | Performance preset selector: Performance (Fastest), Balanced (Recommended), High Quality, or Custom. |
| Maximum Cache Storage (MB) | Device cache storage cap in MB (IndexedDB) with direct Clear Cache control. |
| Advanced LOD Settings | Fine-tune image sharpness factor, resolution tiers, min source width, quality target, prewarming, concurrency, and fast panning rasterization. |
| Show in status bar | Display live LOD storage & proxy status in Obsidian status bar. |
| Debug logging | Output LOD performance diagnostics to developer console. |
main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/obsidian-kambas/.npm install # Install dependencies
npm run dev # Dev build watcher
npm run health # Type-check (tsc) and lint (eslint)
npm run build # Production bundle with type-check
npm run clean # Prettier formatting and ESLint auto-fix
If Kambas improves your workflow, consider supporting development: