Pictures
 and ![[img.png]] on a line of their own show in the note where the terminal can draw images; p switches pixels and text.
A picture alone in its paragraph,  or ![[plan.png]], is drawn in the note where the terminal shows images, between the lines it sits in. Elsewhere, or with p set to text, it is one row: ▣ alt · 1200×800 · ⏎ view.
PNG, JPEG, GIF, WebP and SVG are read. A picture is never drawn larger than it is, wider than the text or taller than 30 rows, and its aspect is kept. With an alt text, a muted caption sits under it, centred. A | size after the alt sets the width in pixels,  or ![[bowl.png|120]], or width and height with |120x80; a wikilink’s other alias is its alt.
Where pictures are found
Section titled “Where pictures are found”A target is looked for next to the note, then from the vault root (the folder you started in when there is no .obsidian/), then by file name in the folder tree brothy scanned (the one Files shows: its depth and entry limit apply, dot folders and node_modules are skipped), the shortest path first, as Obsidian does for ![[plan.png]]. A ?query or #anchor after the file name, as in img.png?raw=true, is ignored when no file is named that way. A picture outside the root is never read, not even through a symlink. A URL is never fetched: http:, https: and data: images are a row that says remote image.
Seeing a picture larger
Section titled “Seeing a picture larger”⏎ opens the first picture on screen in a sheet: the picture fitted to the popup, upscaled if it is small, with the alt, size and path as the title. esc or q closes it. A click on a picture, its caption or its placeholder row opens it too, and so does a label from f, which labels pictures with links. Where the terminal draws no images the sheet draws the picture in half blocks.
Pixels or text
Section titled “Pixels or text”In a terminal with the kitty graphics protocol (kitty, Ghostty, WezTerm, iTerm2, Konsole) or sixel (foot, Windows Terminal) pictures are drawn in pixels, sized to the terminal’s cells. Everywhere else they are text rows. p switches between the two and saves the choice as pictures in config.json; where pixels cannot show it says pictures · pixels unavailable here · text and saves nothing. The footer offers p and ⏎ only when the note has a picture.
If a picture cannot be drawn in the terminal after all, brothy says pictures · pixels failed · text instead and stays in text until you restart. A file that can’t be decoded toasts pictures · <alt> unreadable once per note.
Inside a multiplexer, pictures depend on what it passes through. brothy asks OpenTUI, which treats tmux as showing no images, so pictures are text there; another multiplexer or a remote session that reports kitty graphics gets pixels, even when the screen you look at cannot show them. When you see blank rows, press p for text. Unlike the graph, the first open says nothing about it.
When a picture can’t show
Section titled “When a picture can’t show”The row says why, in the warning colour:
| Reason | Meaning |
|---|---|
not found |
no such file next to the note, under the root or by name |
remote image |
a URL; brothy never fetches |
outside the folder |
the file exists but beyond the root |
too large |
over 20 MB, a picture over 25 million pixels or 16384 pixels on a side, or an SVG over 40 million pixels |
unsupported |
not a picture brothy reads, or a broken header |
unreadable |
the file could not be read or decoded |
Limits
Section titled “Limits”- A picture edited on disk shows the new version after r or when the note’s text changes: image files are not watched.
- f labels do not run in zen, but ⏎ and a click do. Spotlight does not dim pictures.
- An image inside a line of text, or one of several in a paragraph, stays
▣ alt. - Source shows the Markdown as written, no pictures. The minimap marks a picture’s rows as a solid block.
- SVG text may not show: no fonts are loaded.