emarpiee307 downloadsExtend core plugin Canvas with PureRef-like image controls, inline Base64 embedding, and adjustable navigations.
[!NOTE] Work in Progress — Kambas is actively developed. Features and interfaces may evolve between releases.
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. 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": "file",
"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
}
}
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 to access enhanced controls:
Flip horizontal / vertical: Mirror the image along its X or Y axis (persisted across canvas re-renders).
Toggle grayscale: Apply a CSS grayscale filter to evaluate light values, structure, and contrast without color distraction.
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.
Change opacity: Set transparency (0–100%) on any node type — images, text cards, file embeds, or groups.
Reset to original size: Restore a scaled node to its native pixel dimensions.
Copy media to clipboard: Copy raw image data directly to system clipboard.
Swap media…: Replace an existing image or video with another from your vault, local disk, or clipboard — preserving node position and aspect ratio.
Embed in canvas file…: Convert vault-linked image nodes into inline Base64 data URIs (with optional deletion of source vault file).
Move / Copy media to…: Relocate or duplicate vault-linked media files using a modal picker with clean incremental numbering (canvas_image-01).
Take complete control over animated GIF files directly on the canvas without external tools:
0.25x, 0.5x, 1.0x, 1.5x, 2.0x).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.circle, square, rounded) in settings.Pasting or dropping files onto the canvas presents an instant choice:
.canvas.Multi-file drops are processed in a single batch. The Hide media label setting suppresses technical data URI headers above embedded image cards for a clean visual presentation.
When moving or copying media assets within your vault:
canvas_image-01) eliminates irregular filenames.01, 02...), Roman Numerals (I, II... / i, ii...), Letters (A, B... / a, b...), or Arabic Numerals (1, 2...).A floating, resizable, position-remembered panel accessed from the Tags button in the canvas toolbar.
Kambas uses a 3-state logic (Neutral ☐, Include ✓, Exclude ✕) per tab:
#character-design).[!NOTE] Keyboard panning functionality is inspired by and based on the Canvas Keyboard Pan plugin.
W / S / A / D or Arrow Keys+ / -SpaceQToggle GIF controls on/off)Access settings in Obsidian Settings > Kambas:
| Setting | Description |
|---|---|
| Enable GIF controls | Show or hide the GIF playback toolbar, timeline scrubber, and frame extraction on GIF nodes (default: true). |
| Hide media label | Hides raw data URI header text above embedded image cards. |
| Color palette swatches | Number of dominant colors to extract (3–10). |
| Palette color separator | Delimiter used when copying palette colors (e.g. , , \n). |
| Pan speed & Zoom sensitivity | Adjust WASD/Arrow pan speeds and viewport zoom step sizes. |
| Tag filter dim opacity | Opacity of non-matching nodes during active filtering (default: 12%). |
| Tag badge position | Position tag badges outside-below or inside bottom-left. |
| Zoom on select | Auto-zoom viewport to fit visible nodes when filters update. |
| Auto-close filter panel | Automatically close panel when losing focus or clicking outside. |
| Color extraction mode | Auto, Manual, or Disabled color extraction. |
| Include accent colors | Include low-coverage minor accent colors in HSV extraction. |
| Display color names | Show color name labels alongside swatches in color filter list. |
| Include card colors | Include native Obsidian canvas card colors in filtering. |
| Auto-optimize Base64 | Automatically compress pasted/dropped Base64 images to WebP URIs. |
| Base64 max dimension | Maximum pixel resolution limit for Base64 compression (default: 2048px). |
| Base64 quality | WebP compression quality slider (0.1–1.0). |
| Loupe optics | Hotkey (Q), magnification (1.5x–10.0x), lens size (100px–600px), shape, and motion smoothing. |
| Selection zoom hotkey | Hotkey to zoom and fit viewport around selected canvas nodes (default: Space). |
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 and lint
npm run build # Production bundle
If Kambas improves your workflow, consider supporting development: