tommyhedgerow45 downloadsPublish a finished note and every file it embeds into a second vault, mirroring the folder structure.
Publish the note you are working on, and every file it embeds, into a second Obsidian vault. The folder structure is mirrored, so a note that finds an image by name in your working vault finds it in the library too. The plugin is desktop only, because it writes with Node's filesystem modules.
Lesson Publisher runs in the vault you write in and writes into a second vault, called the library below. You give the plugin the library's folder path in its settings, and nothing is published until you do.
The rule is a mirror. A note's path relative to the mirror root, Learn by default, is recreated inside the library, and every file the note embeds comes along to the same relative position. Obsidian resolves an embed by name when the exact path fails, so keeping the relative positions is what makes the published note stand on its own.
Anything outside the mirror root lands in a fallback folder inside the mirror root: notes in Inbox, embedded files in Attachments, both configurable. A folder overrides map can send a folder or a whole subtree somewhere else, and it is checked before the mirror root.
Embeds are found in both forms, ![[diagram.svg]] and , including the angle-bracket form for paths with spaces. Remote and data: URLs are left alone. Embeds of other notes, ![[Some Note]], are published only by the "with linked notes" command, and only when the linked note's frontmatter status is one of the values listed in settings. A linked note with no status is skipped. The note you run the command on is published as it is; the status filter applies to the notes it links to.
Before anything is written, the destination files that already exist are listed in a confirmation dialog, and cancelling writes nothing. If two planned files would land on the same path, only the first is kept. Writes go to the library through Node's fs module, so the library folder is written to directly rather than through Obsidian. A summary notice then reports how many files were published, how many linked notes were skipped by status, and how many embeds were not found.
If a write fails, publishing stops, the error is shown in a notice, and the files already written stay where they are.
Lesson Publisher is not in the community directory yet. Submission is pending, so the manual path is the one that works today. It is desktop only.
Manual install:
main.js and manifest.json from the latest release at https://github.com/tommyhedgerow/obsidian-lesson-publisher/releases. This repository has no styles.css.<Vault>/.obsidian/plugins/lesson-publisher/.<Vault>/.obsidian/plugins/lesson-publisher/
main.js
manifest.json
Once the listing is live, the plugin can be installed from Settings → Community plugins → Browse, by searching for "Lesson Publisher".
There is a ribbon icon and three commands:
All settings live in one tab, Lesson Publisher.
/Users/you/Documents/SecondVault. This is a local filesystem path, not a vault name. The plugin writes into it with Node's fs, so it must be a path this machine can write to. Publishing does nothing until it is set.Learn.Inbox.Attachments.published and published_to in the note you published from.source_vault and the publish date in the library copy.done, established.{"Learn/Concepts": "Knowledge/Concepts"}, which sends a folder or a subtree somewhere else in the library.fs and path modules and cannot run on mobile.source_vault and published when "Stamp the published copy" is on.data.json.MIT. See LICENSE.