Charles Kelsoe22 downloadsImport Comu recordings, transcripts, summaries and action items into notes.
Bring your Comu recordings into Obsidian. Each recording becomes a note with the AI summary, the insights, the action items as tasks, a chapter list and the full transcript with speakers and timestamps. You can save the audio next to the note too.
The plugin uses Comu's official developer API with an API key you create in the Comu app. It only reads: it cannot change, rename or delete anything in your Comu account.
This is a community plugin. It is not made or endorsed by Comu.
Comu's API cannot tell a real change to a recording from someone viewing it, and it limits each key to 1,000 requests a day. The plugin works around both; see Comu API limitations and workarounds for what that means for you.
comu-id, comu-url, date, start and end time, duration, speakers;- [ ]), with the person each one belongs to;-assets folder next to the note and embeds it.-assets folder.comu-id, date, speakers and the rest) are rewritten on each import; properties you add yourself are kept.-assets folder moves with it.Open the Comu Importer listing and click Install, or inside Obsidian:
https://github.com/ckelsoe/obsidian-comu-importer.main.js, manifest.json and styles.css from the latest release.comu-importer inside your vault's .obsidian/plugins/ folder.kb_.The plugin checks the key with Comu before keeping it. The status then reads API key saved, with a Test connection button. The key is stored in Obsidian's secret storage on your device, not in the plugin's settings file, so it is not copied with your vault's settings.
To disconnect, click Remove key. To revoke the key everywhere, delete it in the Comu app.
Click the ribbon button (a vocal mic by default; its tooltip reads Comu importer: import recordings), or run Comu Importer: Import recordings from the command palette.
At the top of the import window, choose what to import: Summary, insights, action items, Transcript, Audio. The starting choice comes from What to import in the settings.
The list shows your recordings, newest first:
| Badge | Meaning |
|---|---|
| New | Not in your vault yet. Checked for you. |
| Update available | The recording's content changed in Comu after you imported it. Checked for you. |
| Imported | Already in your vault and unchanged. |
| Not processed yet | Comu has no transcript or summary yet. With Placeholder for unprocessed recordings on, importing it writes a short note with a link to it, which a later import replaces. |
| Ignored | You chose to ignore it. Automatic sync skips it too. |
Comu also marks a recording as changed when someone only views it, so when the window opens it checks the content of each recording Comu marks as changed, and only real changes keep the Update available badge. See No reliable "changed" signal.
Click Import. When a recording was imported before, the plugin follows When a note already exists: ask each time, update it, or skip it. Updating rewrites the part between the markers and the plugin's own frontmatter properties.
When the import finishes, the window shows what happened: how many notes are new, updated or skipped, every failure with its reason, any placeholders, and why the import stopped early if it did. Copy details copies all of it, for an issue report. After an import with no failures, the results close on their own after a countdown (you can turn that off). Closing the window stops the import after the recording in progress.
Turn on Sync automatically and pick an interval. In the background, the plugin imports new recordings and updates the notes of recordings that changed in Comu, using your What to import choices. It never asks, and it compares content before updating, so a recording that was only viewed in Comu leaves its note untouched (only its stored change time is refreshed). It skips ignored recordings, recordings Comu has not processed yet, and notes you moved out of the output folder. It imports at most 25 recordings per run, and waits while the plugin has sent 600 or more requests in the last 24 hours (see Daily request allowance). Comu Importer: Sync new and changed recordings now runs it on demand.
If Comu refuses the API key, sync pauses until you save a working key.
Run Comu Importer: Rename recording on an imported note, or right-click it and choose Rename imported recording. The note and its -assets folder are renamed together. Renaming the note any other way in Obsidian also moves its -assets folder. The title in Comu does not change: Comu's API cannot rename recordings.
---
comu-id: "4d4b0c1e-0000-4000-8000-000000000001"
comu-url: "https://web.comu.com/all-files/note/4d4b0c1e-0000-4000-8000-000000000001"
date: 2026-11-03
start-time: "2026-11-03T19:57:21+00:00"
end-time: "2026-11-03T20:33:57+00:00"
duration-seconds: 2196
duration: "37m"
speakers: [Alex, Sam]
source: comu
---
# 2026-11-03 Weekly planning
[Open in Comu →](https://web.comu.com/all-files/note/4d4b0c1e-0000-4000-8000-000000000001)
## Summary
...
## Insights
...
## Action items
- [ ] Send the agenda (Sam)
- [x] Book the room
---
#### Transcript
##### Chapters
- [[#00:01 Opening|**[00:01]** Opening]]
...
Connection
| Setting | What it does |
|---|---|
| API key | Your Comu API key. Checked with Comu, then kept in secret storage. Test connection and Remove key appear once it is saved. |
Output
| Setting | What it does |
|---|---|
| Output folder | Where notes are created. Default Comu. |
| Subfolder template | Folders under the output folder, from the recording's date or title. Insert buttons add tokens at the cursor, and a live preview shows the folder you will get. Default {{YYYY}}/{{MM}}. |
| Note name template | Each note's name. Same insert buttons and preview, plus ISO, US and EU presets. Default {{YYYY}}-{{MM}}-{{DD}} {{title}}. A template that would make an invalid file name is not saved. |
| Datetime property | Optional datetime: property in any format, for example {{YYYY-MM-DD HH:mm}}. |
| Time zone | The zone times are written in. Comu does not report the zone a recording was made in; empty uses this device's zone. |
| Extra frontmatter | Your own properties, plain or with tokens. Preserve keeps your edited value on re-import. A live preview shows the result. |
| Keep properties you add | On re-import, keep frontmatter properties the plugin does not manage. On by default. |
| Replacement character | Replaces characters a file name cannot contain. Default -. |
| When a note already exists | Ask each time, update it, or skip it. |
Tokens use Moment formats in double braces, for example {{YYYY}}, {{MM}}, {{MMMM}}, {{DD}}, {{dddd}}, {{WW}}, {{Q}}, plus {{title}}.
What to import: summary, insights and action items; transcript; audio. These are the starting choice in the import window and what automatic sync imports.
Transcript: layout (under a heading, in a collapsed callout, or in a separate Transcript.md, embedded or linked), fold the transcript when a note is written, and the transcript heading level.
Tags: your own comma-separated tags, or none.
Import window: placeholder notes for unprocessed recordings, closing the results automatically and the countdown, and showing trashed recordings.
Automatic sync: on or off, and the interval (30 minutes to once a day).
Appearance: show or hide the ribbon button, and pick its icon.
Troubleshooting: debug logging to the developer console. Your API key is never logged.
Comu's developer API is new and has gaps that affect an importer. Here is each one, and what the plugin does about it for now. If Comu closes a gap, the workaround goes away.
The limitation. Comu reports a change time for each recording, but it also moves when the recording is only viewed: the first time anyone opens its summary, in the Comu app or through the API, the change time jumps even though nothing in the recording changed. The API has no other field that changes only when content does. On its own, the change time would mark recordings as Update available after you merely looked at them, and automatic sync would re-import them again and again.
The workaround. Each note records a fingerprint of what it was built from, in the comu-content-hash property. When Comu's change time for a recording is newer than its note's, the plugin reads that recording again and compares fingerprints:
comu-version-ms) is updated, so the recording is not checked again until Comu's time moves once more.What it costs you.
The limitation. Comu allows 1,000 requests per rolling 24 hours per API key. Importing one recording takes about five (six with audio), and listing takes one per 100 recordings, which is the most Comu returns per request.
The workaround. The plugin counts the requests it sends while Obsidian is running (the count starts again when Obsidian restarts). Before each automatic sync it checks that count, and if 600 or more were sent in the last 24 hours, the sync waits; a sync that starts below 600 can go somewhat past it. Each sync imports at most 25 recordings. This leaves most of the rest of the allowance for imports you start. A very large first import may need to be spread over more than one day; requests Comu refuses for the limit appear as failures with Comu's reason. Requests made from another device or tool with the same key also count toward Comu's limit but are not visible to the plugin.
The limitation. Comu's gateway answers some requests with an HTTP 502 error when several arrive at the same time.
The workaround. The plugin sends one request at a time and retries a 502, 503 or 504 twice (after half a second, then after 1.5 seconds), the bound Comu's documentation gives for read requests. A recording that still fails is listed in the import results with the reason, and nothing is written for it.
The limitation. The API has no way to change anything in your account.
The workaround. None needed for importing. It does mean Rename recording renames only the note and its -assets folder; the title in Comu stays as it is.
The plugin talks only to Comu's API (openapi-api.comu.com) and, when Download audio is on, to the temporary audio link Comu returns. Your key stays on your device. Nothing is sent to the plugin's author or anyone else. See PRIVACY.md.
Questions, ideas, and general discussion happen on Discord. For anything that needs tracking, a GitHub issue is still the better home.