Ake94 downloadsArrange images and videos side by side, then drag to reorder and resize them. Notes keep plain embeds plus an HTML comment, so they stay readable without the plugin.
Arrange, resize, and lay out images and videos in Obsidian like a modern canvas using layout blocks — stored via lightweight HTML comments, keeping 100% native Markdown with zero format lock-in.
Version 0.4.0 adds text boxes, multi-column text and numbered figures, tables and equations with cross-references, on top of the text wrapping, movable layouts and editable text columns of 0.3. Download from GitHub Releases. See project status and validation for test coverage and known limitations.

wrapfigure: Float a layout to the left or right and let the note's own paragraphs, lists, quotes, headings and code flow around it, then continue at full width below it. The text beside it is ordinary note text: type right next to the image and it reflows as you go.[[ suggests links, and Obsidian's formatting, link, list, task and heading commands work on the hotkeys you gave them (Ctrl+B, Ctrl+I, Ctrl+K and Ctrl+L by default). Or right-click an image and choose Add text on the left or Add text on the right to start one.multicols, with its own column gap, alignment (including justified) and text size, and a narrow box can sit in the middle (right-click the box and choose Text settings…). Code, math and figures go inside the text, so a whole paper section can be one box.{#fig:name} or {#tbl:name}, put \label{eq:name} in an equation, and write @fig:name, @tbl:name or @eq:name in the text. Captions start with "Figure 1.", equations get their number, and references read "Figure 1" and jump to their target when clicked. The syntax is pandoc-crossref's, so the draft converts to LaTeX as it is. Choose English or Chinese numbers in the settings.![[...]] or ).<!-- vml ... --> ... <!-- /vml -->).Adjustable Media: Wrap selection in a layout (assign a dedicated hotkey in Settings → Hotkeys). Lines of media embeds are gathered into rows; lines with text are wrapped as they are, making a text box, or text columns beside the media.| Goal | Action |
|---|---|
| Adjust column width ratio | Drag the gap between two items |
| Change row height | Drag the bottom edge of the row |
| Resize the entire layout block | Drag the outer glowing frame (right edge for width, bottom edge for height, corner for proportional scale; a layout floating right uses its left edge and bottom-left corner; with text beside the media, the handles sit on the media column) |
| Position a single item | Drag the image horizontally; snaps smoothly to left, center, and right |
| Reorder or move items | Drag and drop onto adjacent spots, between rows (to split into a new row), or into another layout block |
| Wrap text around a layout | Right-click an item and choose Float left, wrap text or Float right, wrap text; No text wrap takes it back |
| Put text beside the media | Right-click an item and choose Add text on the left or Add text on the right, then type right there; later, click the text to edit it in place (Tab indents, Enter continues lists, [[ suggests links, and your formatting hotkeys such as Ctrl+B/I/K work; Esc or a click elsewhere finishes). The same menu lines the text up with the media at the top, in the middle or at the bottom |
| Move the whole layout | Drag the grip on top of the frame: the left or right third of the text floats it there from the line you point at, the middle places it between paragraphs |
| Move a video | Drag the dedicated handle in the top-left corner of the video |
| Full-screen image viewer | Double-click an image in Live Preview (scroll to zoom, drag to pan, arrow keys to switch); single-click in Reading View |
| Captions | Right-click an item to edit captions and alignment |
| Move out of layout block | Right-click an item and choose to remove it from the layout block |
| Cancel drag gesture | Press Esc anytime during a drag to cancel |
| View/edit source | Click the "Edit source" button in the top-right corner of the layout block (of its media, when there is text beside them) |
Adjustable Media introduces no custom syntax. Your notes contain only standard embeds wrapped in clean HTML comments:
<!-- vml {"v":2,"rows":[{"height":240,"widths":[1,1.4]}]} -->
![[beach.png]] 
![[clip.mp4]]
<!-- /vml -->
The opening comment stores only essential parameters (row height, width ratios, captions, alignment), with zero unnecessary overhead.
A layout that wraps text sits right above the text that wraps around it, and says which side it floats to:
<!-- vml {"v":2,"width":0.4,"wrap":"left"} -->
![[portrait.png]]
<!-- /vml -->
This paragraph flows around the image, then continues at full width below it.
Without the plugin, the image simply shows above that paragraph.
Text written in a layout before its media shows in a column on their left, text after them in a column on their right:
<!-- vml {"v":2,"width":0.4} -->
Text on the left: several lines or paragraphs, lists, quotes.
![[beach.png]]
Text on the right.
<!-- /vml -->
Without the plugin, the text and the image show one after the other.
Embed syntax remains completely untouched, fully compatible with file renaming and moving.
If you ever decide to stop using the plugin, run Remove layout block comments from all notes… to cleanly restore plain Markdown in one step.
main.js, manifest.json, and styles.css from the latest release.<your vault>/.obsidian/plugins/adjustable-media/.