Skip to content
Data
Skill

/slm-media

Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays

BOOST
From plugin
superlocalmemory
23416 skills4 agents1 command1 MCP
Install
$ npx -y skills add qualixar/superlocalmemory --skill slm-media --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/slm-media

Context preview

The summary Claude sees to decide when to auto-load this skill.

Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays

SKILL.md

slm-media.SKILL.md
name: slm-media
description: Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays private, turning the feature on with `slm media` (16 GB of memory needed), connecting folders with `slm sources`, and how web apps add files through one-time upload links. Off by default.
when_to_use: |
  - "Save this screenshot / photo / PDF"
  - "Find the picture where ..." or "which page of the PDF says ..."
  - "Add this document to my memory"
  - A web app (ChatGPT, Claude on the web, Grok Bot, Muse, Composio) cannot send a file itself
  - remember_media, remember_document, get_media, media_status or media_upload_link is missing from the tool list
  - "Turn on pictures and documents", slm media status, slm media repair
  - "Connect my Obsidian vault / notes folder" (slm sources)
allowed-tools: remember_media, remember_document, get_media, media_status, media_upload_link, recall, Bash(slm:*)

slm-media — Pictures, PDFs and Folders

SuperLocalMemory can keep a picture or a PDF as a memory and find it later by describing what it shows or what it says. A picture model runs on this computer (EmbeddingGemma 2). OCR reads the text inside pictures. Each PDF page is indexed by its picture and by its text. No generative model looks at the files, so SLM cannot describe a picture to you: it finds it, and you look at the thumbnail it returns.

This feature is **off by default**. Pictures live in their own database (`media.db`); turning it on does not change any existing memory or embedding.

---

When to save a picture or a PDF

Save one when the user asks, or when the file is itself the thing worth finding again: a screenshot of an error they will meet again, a diagram of a design decision, a receipt, a scanned page, a PDF spec. Do not save a file just because it was shown in the conversation.

Add words with `content`. The picture is found by what it shows, by the text read inside it, and by the words you add, so a short sentence about why it matters ("Staging dashboard after the Postgres 17 move") helps recall.

Never save a picture or PDF that shows a password, key, token, card number, government id or private data about a third party. The text read from a file is scanned like any saved text, but a screenshot of a secret should not be saved at all. Ask the user first if you are unsure.

---

Are the tools there?

The five tools below are listed only while pictures and documents are on, and only in the `full`, `power` and `whole` MCP tool sets. They are not in `core` or `code`. The tool set is fixed when the MCP server starts, so after the feature is turned on, restart the MCP session (`slm restart` starts the picture worker too). Do not guess: run

slm media status

It says whether the feature is off, set up, still setting up, or failed (`slm doctor` explains a failure). The same status is in the dashboard under **Documents & Images**.

Turning it on (ask the user first)

slm media enable    # shows the download size and a disk check, then asks; --yes skips the question

Turning it on downloads about 1.5 GB of models and tools, and needs a computer with 16 GB of memory (the check passes from 15 GiB). On a smaller computer `enable` refuses with the reason and exits with code 4; text memory keeps working. Never turn it on, or pass `--yes`, without the user saying yes in this conversation. Never set `SLM_MEDIA_ALLOW_LOW_RAM=1` yourself: it removes the memory check and the owner must decide that.

Supported: macOS on Apple Silicon, Windows x64, Linux x86_64 and Linux ARM64 (aarch64), Python 3.12 to 3.14. Not supported: Intel Macs and Windows on ARM.

Other commands:

slm media status              # what is on and how set-up is going
slm media disable             # off again; memories are kept (--remove-files also deletes the downloaded models)
slm media gc                  # report picture records without a memory and files without a record; removes nothing
slm media gc --apply          # remove them (owner or admin); never touches SLM's databases
slm media repair --dry-run    # count pictures that cannot be found by what they show yet
slm media repair              # re-embed them (owner or admin); run again if it says pictures are left

All take `--json`. Run `slm media repair` when a save says a picture "can't be found by what it shows yet", or after the picture model changed.

---

Tool reference

`remember_media` — save a picture

remember_media(
  path: str = "", download_url: str = "", base64: str = "", file = None,   # give exactly one
  content: str = "", tags: str = "", profile_id: str = "",
  idempotency_key: str = "", scope: str = "", shared_with: str = "",
) -> dict

Give exactly one of `path` (a file on this computer), `download_url` (an https link), `base64`, or `file` (a picture attached in a ChatGPT chat; ChatGPT fills it in, never write it by hand). Two or none is refused (`invalid_request`). `scope` (personal, project, shared, global) and `shared_with` (comma-separated profile ids) work as in `remember`: leave them unset unless the user asked to share. Formats: PNG, JPEG, GIF (first frame) and WebP.

Returns `success`, `status`, and on success a `media_id` and a `resource`, `slm://media/<media_id>`. Report what the tool returned; do not say "saved" unless `success` is true.

`remember_document` — save a PDF

remember_document(
  path: str = "", base64: str = "", download_url: str = "", file = None,   # give exactly one
  file_name: str = "", content: str = "", tags: str = "", profile_id: str = "",
  idempotency_key: str = "", scope: str = "", shared_with: str = "",
) -> dict

Same sources and rules as `remember_media`, for a PDF. The work continues in the background; the answer has a `job_id` (and `

Read more
Ships withsuperlocalmemory

Open-source governed, local-first memory control plane for AI agents and teams. arXiv:2608.08253

Get the whole plugin

Other skills on superlocalmemory.