No description
Find a file
Ryan Baier 0a29c2ed3d fix(review): replace JSZip with fflate to eliminate dynamic script elements
JSZip's bundled immediate/setImmediate polyfills contain IE9-era
fallbacks that call document.createElement("script"). The branches
never run in Obsidian's Electron runtime, but Obsidian's review
scanner statically flags them as 4 dynamic script-element creations.

fflate is a modern, zero-dependency ZIP library with no such
polyfills. The swap also cuts the production bundle from ~315KB
to ~174KB.

Bump version to 0.1.2.
2026-05-15 17:36:09 -07:00
.github/workflows fix(output): improve callout quality filters and add infrastructure 2026-04-06 07:09:07 -07:00
docs fix(parser,tags): fix role attribution and St. Kitts tag splitting 2026-04-10 23:30:51 -07:00
src fix(review): replace JSZip with fflate to eliminate dynamic script elements 2026-05-15 17:36:09 -07:00
.gitignore fix(output): improve callout quality filters and add infrastructure 2026-04-06 07:09:07 -07:00
ARCHITECTURE.md docs: update architecture for Claude web parser, summary builder, and title strategy 2026-02-28 09:44:15 -08:00
CHANGELOG.md fix(review): replace JSZip with fflate to eliminate dynamic script elements 2026-05-15 17:36:09 -07:00
esbuild.config.mjs feat: scaffold obsidian plugin project structure 2026-02-14 12:06:51 -08:00
eslint.config.mjs fix(review): address remaining Obsidian plugin review findings 2026-05-15 14:49:20 -07:00
LICENSE Clean up repo for public release 2026-02-22 22:29:56 -08:00
manifest.json fix(review): replace JSZip with fflate to eliminate dynamic script elements 2026-05-15 17:36:09 -07:00
package-lock.json fix(review): replace JSZip with fflate to eliminate dynamic script elements 2026-05-15 17:36:09 -07:00
package.json fix(review): replace JSZip with fflate to eliminate dynamic script elements 2026-05-15 17:36:09 -07:00
README.md Clean up repo for public release 2026-02-22 22:29:56 -08:00
styles.css fix(review): address remaining Obsidian plugin review findings 2026-05-15 14:49:20 -07:00
tsconfig.json fix(output): improve callout quality filters and add infrastructure 2026-04-06 07:09:07 -07:00
version-bump.mjs feat: scaffold obsidian plugin project structure 2026-02-14 12:06:51 -08:00
versions.json fix(review): replace JSZip with fflate to eliminate dynamic script elements 2026-05-15 17:36:09 -07:00

Chat Splitter

Split long AI chat transcripts and documents into organized, topic-specific Obsidian notes.

Chat Splitter takes a sprawling multi-topic conversation from ChatGPT or Claude -- or any long-form document -- and breaks it into individual notes, one per topic or section, with auto-generated titles, tags, summaries, key points, bidirectional wikilinks, and an index (Map of Content) note tying everything together.

Features

  • Multi-format import -- paste text or import JSON/ZIP/Markdown files
  • ChatGPT + Claude support -- paste format, JSON export, and ZIP archives
  • Document import -- paste or import any long-form document; headings become section boundaries with paragraph-group fallback
  • Heuristic topic segmentation -- 6 weighted signals detect topic boundaries offline, no API keys needed
  • Key info extraction -- each note gets a summary, key points, and reference links in callout blocks
  • Auto-tagging -- domain-aware tags (coding, database, web, design, writing, real-estate, finance, immigration, travel, health, ai-ml)
  • 4-strategy title generation -- comparison detection, entity + kernel, cleaned sentence, keyword fallback
  • Bidirectional wikilinks -- prev/next/parent navigation in both frontmatter and footer
  • Index / MOC note -- one Map of Content per conversation with topics table and summaries
  • Optional Ollama enhancement -- use a local LLM for improved segmentation quality
  • Segment preview/edit -- review, merge, split, and rename segments before creating notes
  • 4 speaker styles -- callouts (default), blockquotes, bold labels, or plain (no labels)
  • Per-import configuration -- folder, tags, granularity, style adjustable each import from Step 1

Installation

Manual install

  1. Download main.js, manifest.json, and styles.css from the latest release
  2. Create a folder in your vault: .obsidian/plugins/chat-splitter/
  3. Copy the three files into that folder
  4. Open Obsidian Settings > Community plugins > enable "Chat Splitter"

Build from source

git clone https://github.com/rybaier/obsidian-chat-analyze-plugin.git
cd obsidian-chat-analyze-plugin
npm install
npm run build

Then copy main.js, manifest.json, and styles.css into your vault's .obsidian/plugins/chat-splitter/ folder.

Usage

Paste import

  1. Open the command palette and run Chat Splitter: Import from clipboard
  2. Paste your conversation text (or any long-form document) into the textarea
  3. The format is auto-detected (ChatGPT paste, Claude paste, generic markdown, or document)
  4. Set target folder and tag prefix (optional, also configurable in Step 2)
  5. Click Analyze to parse and segment
  6. Configure granularity, speaker style, and other options
  7. Click Create N Notes to write notes to your vault

Documents with headings are automatically split at heading boundaries. Documents without headings fall back to paragraph-group splitting. The format badge shows "Document" when non-chat content is detected, and plain speaker style is auto-selected.

File import

  1. Open the command palette and run Chat Splitter: Import from file
  2. Select a .json, .zip, or .md file
  3. For multi-conversation ChatGPT exports, select which conversation to import
  4. Same configuration and creation flow as paste import

Preview mode

Click "Preview segments..." before creating notes to review the auto-detected topics. In preview mode you can:

  • Rename segment titles
  • Merge adjacent segments
  • Split a segment at any message boundary
  • Single-level undo for merge/split operations

Enable "Always preview" in settings to open preview mode by default.

Settings

Setting Default Description
Default folder AI Chats Base folder for imported conversations
Naming template {{topic}} Template for note filenames ({{date}}, {{conversation_title}}, {{topic}}, {{source}}, {{segment}}, {{segment_total}})
Tag prefix ai-chat Prefix for auto-generated tags
Folder structure Nested Nested (per-conversation folder) or Flat
Default granularity Medium Coarse / Medium / Fine segmentation
Speaker style Callouts Callouts / Blockquotes / Bold / Plain
Keep full transcript Off Also create a single unsplit transcript note
Enable Ollama Off Use local Ollama for LLM-enhanced segmentation
Custom frontmatter (empty) Additional YAML fields added to every note
Debug logging Off Log detailed info to console with [Chat Splitter] prefix

Supported Formats

Format Method Notes
ChatGPT paste Paste "You said:" / "ChatGPT said:" format
ChatGPT JSON export File Single or multi-conversation .json files
ChatGPT ZIP export File ZIP archives containing conversations.json
Claude paste Paste "Human:" / "Assistant:" format
Claude JSON export File chat_messages array format
Generic markdown Paste/File Heading-based or bold-label speaker patterns
Documents Paste/File Any long-form text; splits at headings or paragraph groups

License

MIT