QnALog
English | 简体中文
Record or import audio, transcribe it, and organize the conversation into Markdown notes in Obsidian. QnALog includes no API keys, requires no QnALog account, and uses services you choose. Requires Obsidian 1.11.4 or later.
Installation · First-time setup · Basic usage · Features · Files and folders · Privacy and network
Installation
Community plugin directory (recommended)
- In Obsidian, open Settings → Community plugins and browse the directory.
- Search for QnALog, install it, then enable it.
BRAT
- Install and enable BRAT from the community plugin directory.
- In BRAT, choose Add beta plugin and enter
qnalog/qnalog.
- Install, then enable QnALog under Settings → Community plugins.
Manual release installation
Download main.js, manifest.json, styles.css, LICENSE, and NOTICE from the releases page into <vault>/.obsidian/plugins/qnalog/. This manual method does not create an installation backup. For source installation and rollback, see Source installation and rollback.
First-time setup
- Open Settings → QnALog. Choose Setup Wizard, select Alibaba Cloud Bailian or OpenAI, enter the API key (the built-in service address and models are filled in), test the services, then choose Apply and start.
- Open Settings → QnALog → Open sidebar. The wizard may appear automatically on first enable when setup is incomplete; reopen it from the settings home at any time.
- Quick config is a separate shortcut for a preset configuration. If a setup is already present, confirm before replacing it. To configure services individually, open Settings → QnALog → API.
On the settings home, click a status row to open the API tab. Under Speech transcription, Get models lists models returned by the selected transcription service; if no usable catalogue is available, enter the model ID manually. Settings tab labels follow the selected interface language.
The API tab offers these services. Speech transcription: OpenAI, Groq, Alibaba Cloud Bailian, SiliconFlow, and Local / custom OpenAI-compatible. AI organizing: OpenAI, Anthropic Claude, Google Gemini, OpenRouter, DeepSeek, Alibaba Cloud Bailian, SiliconFlow, and Local / custom OpenAI-compatible. A service that is no longer in these lists keeps working if it is already selected; it is not offered for new selections. Each AI organizing service keeps its own address, access key, and model, so switching back restores them. Speaker recognition for imported audio, and saved configurations, are under API → Advanced settings, which is collapsed by default. The settings home lists speaker recognition only while it is enabled.
Recording transcription needs a configured speech-to-text (ASR) service. Importing a complete audio file may use a separate transcription service. AI organization, questions, and knowledge extraction need a configured large language model (LLM); an ASR key alone does not enable those features. You can use local services where supported.
Alibaba Cloud Bailian quick config uses Qwen-Audio-3.1-ASR-Flash over its native HTTP API for recording transcription and Qwen-Audio-3.1-ASR-Flash-Filetrans for whole-file imports with speaker diarization. Under Speech transcription, Get models lists the service catalogue; selecting a recognized Bailian ASR model updates its endpoint and protocol together. Bailian models use their registered native HTTP, Chat Completions, file-transcription, task WebSocket, or Qwen3 event WebSocket path. WebSocket recording requires desktop Obsidian; Gummy one-sentence tasks rotate before the service's one-minute audio limit. The quick-config defaults remain unchanged. See MAINTAINING.md for protocol details and region-specific pricing.
When several speakers are detected and have no names yet, organizing does not wait: the note is organized with session numbers (Speaker 1, Speaker 2). After the note is written, a notice offers Name speakers; the command Name speakers in the current note and the Edit speakers list in the side panel do the same at any time. A name replaces the number in the note properties, the original transcript display, and the organized text. It does not change speaker IDs, the transcribed source text, or the audio. Names already saved in the note properties or taken from hardware channels are applied before organizing.
Basic usage
-
Open the QnALog voice notes panel from the left ribbon. The Obsidian toolbar shows a monochrome Q icon that follows the theme.
-
Choose a template and audio input, then check that the level meter reacts.
-
Start recording. Follow the live outline and add markers or notes as needed.
-
Stop recording and follow transcription, AI organization, and Markdown writing in Task progress. Retry from the failed step if processing stops.
-
Use the Distill and Q&A tabs as needed.
The default General template chooses paragraphs, lists, or topic sections from the content without requiring a recording type. Short notes stay direct; longer bodies can include an optional overview. Its organizing rules preserve personal voice, feelings, questions, uncertainty, and speaker attribution where it affects meaning. Only explicit requests, reminders, or committed future actions become tasks. Saved default templates and custom prompts continue to apply.
The sidebar tabs appear in this order: Notes, Outline, Distill, Q&A, and Topics. They show the note list, live outline and markers, reviewable knowledge candidates, questions about a note, and topic pages. The note list context menu can open a note in Outline or Distill; Distill starts a scan when the note has no scan results.
The note list context menu has two re-generate actions. Each submenu lists the modes (the note's own mode first) and optional preferences:
- Reorganize regenerates the organized body in the chosen mode and replaces the current content. Before writing, the current note is saved to the plugin's hidden version folder (
.versions); if that save fails, nothing is written. An existing Original snapshot is updated to the new draft.
- Save as new version creates a separate derived note and leaves the source note unchanged. Clean copy is also in this submenu.
The matching commands are Reorganize Current Note and Save Current Note as New Version; they use the note's own mode and the checked preference.
The 1.6.1 interface follows the active light or dark theme and supports narrow panels, visible keyboard focus, and reduced-motion preferences.
Features
Outline and live markers
Chapters grow during recording and link to the audio position. After recording, AI can complete the outline. To rebuild only an outline, choose Rebuild outline from all transcripts in the completed note's sidebar. QnALog saves a backup at <vault>/<configDir>/qnalog-outline-backups/<timestamp>/<filename> before replacing outline details. If generation fails or is incomplete, or the note changes during generation, the existing note is not replaced. The action does not change the note body.
During recording, markers support #term (explain a term), ?question (ask about the current discussion), !highlight (mark an important point), @assignee (suggest a todo owner), and /todo (mark a todo candidate). Half-width and full-width symbols are accepted. These notes are labeled supplementary material in the organization prompt; they are not presented as transcript text.
Continue a recording and preserve its sources
Choose Append recording to this note from the open note's sidebar, the file menu, or the floating control. QnALog verifies the target note, records into a separate pending note, and waits for active processing and transcription tasks before merging. If a merge fails, the staged note and audio remain available for retry. If the target disappears or its transcript identity changes, the separate recording is kept rather than written to a different note. Continued recordings accumulate audio sources and retain their source references and continuous numbering.
Transcribed notes preserve the original speech-to-text text and revision history. Decisions, actions, questions, and topics can link to transcript passages; changed passages are marked stale. Evidence is included with existing organization requests rather than sent in a separate extraction request.
When a recorded note is organized with utterance-level transcript data and the model returns complete evidence, the end of the organized body gets a Where decisions and actions were said section. Each decision and action item lists the speaker, a link to the moment in the recording, and a quote of up to 40 characters from the transcript. Times come from the transcript record, not from the model. Times that the transcription service returned per sentence show as exact seconds; estimated times are marked "approx.", times known only to the segment are marked "approximately in this segment", and unknown times have no link. Each decision carries a status: confirmed (someone explicitly agreed), proposed (suggested, no agreement heard), disputed (an objection left unresolved), open (explicitly left for later) or superseded (changed later in the same meeting, with a pointer to the decision that replaced it). A missing status counts as proposed, and a decision cited by only one sentence is shown as proposed even if the model marked it confirmed. Action items show the owner and the due time as said in the recording (dates are not converted), and "not explicitly accepted" when nobody was heard taking the item on. The statuses appear only in this section; the body is written by the model as before. The model chooses which passages to cite and the status, so click a time and listen to check. Re-organizing replaces the section; older notes are not changed and show no status.
To find a passage in a long recording, type words into Find in recording under the player in the sidebar note panel, or run the command Find in the current note's recording. Each matching sentence shows its time, speaker, and text; click it to play from that moment. Case, spaces, and punctuation are ignored, several words must all appear in the same sentence, Chinese numerals match digits (十一 finds 11), and a speaker name finds that speaker's sentences. Times are marked the same way as above. Notes without sentence-level transcript data are searched by segment. The search runs on the note's transcript on your device and sends nothing to a service.
The command Open to-do summary opens a tab that lists the Markdown to-dos (- [ ] / - [x]) of the notes in the QnALog notes folder, grouped by note (newest first) or by owner, filtered to not done, completed or all, by owner, or to items with a due. Derived versions, clean copies, topic pages, daily notes, raw material and the "Where decisions and actions were said" section are not read. When a to-do matches an action item of the organized note, the row also shows the owner, the due as said, "not explicitly accepted" when that applies, and a time link to the recording; other to-dos show their text only. Clicking a to-do opens the note at that line. Ticking the box in the summary changes only that checkbox in the note, and only if the line is unchanged since the summary read it; otherwise nothing is written and the summary asks you to open the note. To-dos inside the version section of a note with saved versions are not ticked from the summary, because switching versions replaces that section. Completion is taken from the checkbox only. The summary reads notes on your device and sends nothing to a service.
Before the first new version, QnALog caches the source text as an Original snapshot. Reorganization updates an existing snapshot to the new draft. When no snapshot exists, reorganization does not create one; the first later new version uses the then-current source note as its original. Save as new version → Clean copy creates a separate file and activates that version in the source note. Other new versions create a derived Markdown file and a minutes cache but are not activated automatically. The whole note replaced by reorganization is kept in the hidden .versions folder. After failed transcription segments are transcribed again, QnALog reorganizes the note in place automatically, saving the current note first in the same way.
Errata for note corrections
Use QnALog: Create or open errata for this note to open the note's errata file. Select a short incorrect term and run QnALog: Correct selected text to save a replacement; QnALog also updates matching text in the current editor while leaving transcript blocks unchanged. Use QnALog: Mark selected text as noise to record text that should be excluded from future organization. Reorganize the note or save it as a new version to apply its errata to new output. Errata files are stored under QnALog/勘误表. Section headings may use Chinese or English (替换/Replace, 噪音/Noise, 说明/Notes); newly created files use the current interface language.
Long content, task progress, and recovery
For standard meeting and learning-note modes, long recordings are organized in parts with local checkpoints, then assembled in time order. If a request is interrupted or the model reaches its output limit, completed parts are reused and unfinished parts can be retried. Incomplete work is shown as partially completed, not as an empty note.
The processing panel separates transcription, AI organization, and Markdown writing, and shows the active stage, failures, and retry or cancel actions. Supported failed tasks can resume from the failed step. Unknown or damaged queue records are paused with their original data and references retained; inspect the pending queue for the reason. A paused damaged record is not automatically repaired by retry.
Distill and the knowledge library
Knowledge extraction is user-initiated by default. Optional automatic extraction is off by default; when enabled, it automatically writes todo candidates only. People and glossary candidates still require review or maintenance.
People can be kept, merged, or ignored. Confirmed todos are added as tasks under "To-do" in today's daily note, each with a link back to the source note; this requires the Daily notes core plugin. Terms can be maintained in the glossary, and knowledge items retain source links. Candidate todos support inline edits to owner, due date, and subtasks.
Topic pages
Right-click an original minutes note and choose Create topic to select related notes by project tags, topic tags, or similar content. Topic pages use note overviews by default; choosing finalized note bodies shows a request estimate and a credit-use notice first. The page opens with a narrative overview, groups progress into threads, cites source notes with footnotes, and shows a program-generated timeline. Updates open a change preview and can be undone when the page has not changed afterward. The page keeps block anchors out of the body; a rebuildable cache stores the block index. Topic integration does not modify source notes.
Note list
The note list can group recent notes by folder or time, with search and template filters.
Recording reliability
- Level meters help check microphone and system audio input before and during recording. Device checks are available in settings.
- Inputs remain user-selectable. Compatible independent multichannel inputs can be transcribed by channel; separation stays off when independent channels cannot be verified.
- Deleting a transcript offers to delete its audio file too.
- During recording, audio is written in parts to a
.partial folder inside the recordings folder. If Obsidian quits or crashes before a recording is saved, the next start merges the parts into a recording whose file name ends in -recovered, deletes the parts only after a byte-for-byte check, and offers Import and transcribe. Parts are kept when the result cannot be verified.
- After a recording is saved and read back, or when kept audio is imported, QnALog records the file's SHA-256 checksum and size in the note's transcript data. The command Check recording integrity of the current note (command palette) compares the audio file with that record and reports whether it matches, differs from when it was recorded, or is missing. The check only reads files and never changes or repairs them. Recordings made before this feature have no record. The check shows whether the file has changed; it is not legal proof.
- On mobile, the screen stays awake while recording. Recorded audio is saved before the app moves to the background, and the recording input is checked when it returns.
- Short-recording filtering is on by default. Recordings under 1 second are discarded without transcription. Recordings from 1 to under 10 seconds are transcribed once: blank results are discarded, complete text creates a note, and shorter text keeps the audio without a note. An anomalous result whose text volume far exceeds the recording duration keeps the audio and creates no note. A transcription failure keeps the audio and a retry task. Turn filtering off to process short recordings normally. Imported audio bypasses this filter.
Files and folders
These are default locations; folders and files are created as needed. The segment cache is temporary processing storage, not a place to organize notes.
| Content | Default path |
|---|
| Recordings | QnALog/Recordings |
| Transcribed notes | QnALog/Transcribed notes |
| Meeting materials | QnALog/Meeting materials |
| People | QnALog/Library/People |
| Views | QnALog/Library/Views |
| Glossary | QnALog/Library/Glossary.md |
| Errata | QnALog/勘误表 |
| Diagnostics log | QnALog/System/Diagnostics log |
| Archive | QnALog/Library/Archive |
| Segment cache | QnALog/.cache/segments |
Saved configurable paths do not change when the interface language changes, and existing files are not moved. Unset paths use the current resolved interface language: Chinese uses Chinese directory names; other resolved languages use English names. Obsidian determines the interface language by default. Cache locations are not user-configurable folder settings.
Platform and audio setup
QnALog supports desktop and mobile Obsidian. Mobile recording uses the device microphone and transcription can use segmented or whole-file HTTP requests. System audio, virtual devices, multichannel capture, desktop device diagnostics, and realtime WebSocket transcription require the desktop app. Bailian Qwen-Audio-3.1-ASR-Flash recording transcription uses native HTTP on both platforms; manually selected Bailian WebSocket models are desktop-only.
Capturing computer audio usually needs a virtual audio device:
- Windows: VB-Cable
- macOS: BlackHole
- Linux: PulseAudio / PipeWire monitor source
With VB-Cable, meeting apps, browsers, and system output go to CABLE Input; QnALog reads CABLE Output as a recording device. To record yourself as well, select your physical microphone as the microphone input. See Settings → QnALog → Recording for device selection and checks.
Privacy, network, and updates
QnALog requires no QnALog account and has no QnALog-operated backend, ads, analytics, or telemetry. Settings, queue items, and context are stored in .obsidian/plugins/qnalog/data.json. Current API keys use Obsidian SecretStorage; older data and install backups may still contain plaintext or obfuscated keys. SecretStorage behavior across installations or sync is not guaranteed, so re-enter keys that are missing. See PRIVACY.md and SECURITY.md.
Network requests depend on the feature you use:
- Transcription sends audio to the configured speech-to-text service.
- Organization, Q&A, and knowledge extraction send relevant text and prompts to the configured LLM. Manual service tests and model-list retrieval can also make requests.
- When you click Check for updates in Settings → About or run Check for Updates from the command palette, QnALog reads this repository's
main branch manifest.json from raw GitHub or jsDelivr mirrors. There is no background update check; QnALog does not download or install plugin files. Obsidian or BRAT manages installation.
The optional watched folder reads audio only from a folder inside the vault that you choose; after processing it moves the files to an archive subfolder in that folder. Transcription and organization of imported audio still use your configured services.
For sensitive content, use local services where practical and obtain consent before recording. Provider terms apply to content you send to a third-party service.
Source installation and rollback
Source installation is for desktop. It builds the committed source and backs up the existing plugin directory before copying files, including data.json:
git clone https://github.com/qnalog/qnalog.git
cd qnalog
npm ci
npm run build
npm run install:vault -- "/path/to/your/vault"
The installer copies main.js, manifest.json, styles.css, LICENSE, and NOTICE into <vault>/.obsidian/plugins/qnalog/. Its backup is stored under <vault>/.obsidian/qnalog-install-backups/<timestamp>/. The community directory and BRAT manage their own installations.
Settings with the same schema version are read as-is. Recognized releases from version 1 onward migrate forward when a migration path exists, preserving user configuration. A higher on-disk version is read-only and is not overwritten. If the source version cannot be identified, the original file is backed up under <plugin folder>/settings-backups/ before defaults are used. These rules do not guarantee migration from every older version.
To restore an installation backup:
npm run restore:vault -- "<vault>/.obsidian/qnalog-install-backups/<timestamp>" "/path/to/your/vault"
restore:vault saves the current plugin directory before restoring, making the restore reversible. It rejects unsafe plugin ids and linked or overlapping restore paths. Add --set-enabled to update community-plugins.json; otherwise switch plugins in Obsidian. Pass the vault path when the backup is outside a vault. Restoring an older build may leave newer settings read-only, and restoring files does not guarantee recovery of SecretStorage keys from another installation.
Project background
QnALog is derived from LexVoice, based on its last MIT-licensed release (2.1.2). It is independently maintained. See NOTICE and MAINTAINING.md for origin and licensing details.
QnALog does not inherit settings or migrate notes from the predecessor project. It does not scan or rewrite existing notes on load. The plugin id is qnalog, distinct from the predecessor's id, and written data uses the QnALog namespace.
Contributing
See CONTRIBUTING.md for development commands and contribution guidance. The maintenance workflow and validation requirements are in MAINTAINING.md.
License & credits
MIT — see LICENSE, NOTICE, and MAINTAINING.md.
Copyright (c) 2026 Lynnx (original work); modifications copyright (c) 2026 Q&A Log Team.