v-4940 downloadsRefine reading layout and rich-text paste, align standalone images, resize table columns, and synchronize scrolling between two note panes.
A desktop Obsidian plugin that brings together restrained reading styles, rich-text paste fixes, editable web cards, native table-column resizing, and relative scrolling between two note panes.
中文说明 · Releases · Report an issue
Requires Obsidian 1.14.0 or later on desktop. Mobile is not currently supported.
Install from the community page when its install action is available, or from GitHub Releases.
main.js, manifest.json, and styles.css from the same release.<vault>/.obsidian/plugins/fortynine-notion-gpt/ (use your configured settings directory if different).Updates replace those three files. Keep your local data.json.
The optional Windows bundle also includes a PowerShell installer and source. Its installer backs up the original plugin configuration, disables the superseded local extensions and snippets, and preserves unrelated settings. The plugin itself never installs or updates extensions.
Copy rich text from a webpage and paste normally. Paste-as-plain-text has no HTML formatting to preserve. Recognition is based on semantic HTML; this is not a pixel-perfect website importer, and unsupported source layouts may become ordinary Markdown. If a website copy exporter has already removed emphasis or diagrams, the receiving plugin cannot reconstruct them. The optional browser helper copies from rendered ChatGPT content; refresh existing ChatGPT tabs after loading it.
For scroll lock, open exactly two notes side by side. Position each note, then click the lock icon or status-bar control. Click again to unlock. Holding Alt temporarily suspends synchronization. The same file can be open in both panes. The toggle command is also available in the command palette.
For tables, hover over a visible table and drag a column boundary. Double-click a boundary to fit its contents. After focusing a resize handle, use left/right arrows; Shift changes the step to one pixel. Commands are available to focus resize controls or reset widths for the active note. Embedded notes and tables with merged cells are left to their existing renderer.
Recognized web cards use native callouts:
> [!web-card]
> > [!web-row|search] Find information
> > The content remains editable Markdown.
>
> ---
>
> > [!web-row|truck] Deliver the result
> > A second row in the same card.
This is the unified successor to the local 49-notion-gpt package, the compact-rich-paste, relative-scroll-lock, and native-table-resize extensions, and the wider-note, prompt-handbook-code, and project-progress-dashboard CSS snippets. The Windows installer archives those plugin folders in its backup to avoid duplicate entries; manual installers must disable the old entries. The public plugin ID is fortynine-notion-gpt. It imports old table widths once from the local unified package or standalone table extension if their data file exists in the current vault; the old file is retained.
Prompt-handbook styling is scoped to the prompt-handbook CSS class. Dashboard styling is scoped to project-progress-dashboard. Folder grouping follows the original 1.1-主任务/work convention; it only affects that matching folder tree. Other folder trees keep their own layout.
Version 1.1.2 passed 24 automated tests, ESLint and isolated Windows installation/upgrade checks. A captured real clipboard sample preserved all other text and four tables after removing the detached citation badges. The affected user reports the citation residue gone after restarting Obsidian.
The plugin performs no telemetry, account sign-in, or network requests. It processes HTML only when you paste and stores table widths and image alignment preferences in its local plugin data file. Image preferences use bounded image-source keys, not full embedded image data. It reads note text locally to associate tables with source positions. It does not rewrite existing notes automatically. Pasted images and formulas use Obsidian's native import path; remote image links can be loaded by Obsidian in the usual way.
The optional installer operates on a vault explicitly supplied by the user. It is not executed by the plugin. The release excludes vault contents, backups, account configuration, and local table-width data.
npm ci
npm test
npm run lint
npm run build
The build emits the three release files at dist/fortynine-notion-gpt/, and copies main.js and styles.css to the repository root for release verification. Runtime assets have no external dependency other than Obsidian. Sources are in src/, styles in styles/, and regression tests in tests/.
MIT, copyright 2026 49. The relative-scroll module incorporates the author's earlier Relative Scroll Lock project under the same license. Notion, ChatGPT, and Obsidian are trademarks of their respective owners; this is an independent community project.