A set of tools for parsing, viewing, and extracting data from Google Gemini AI Studio conversation files and Claude Console session exports. Written in Delphi (Object Pascal), framework-independent (no VCL/FMX), with zero external dependencies.
Three deliverables share the same core library:
- GemView — a command-line application for inspecting and extracting Gemini files
- Gemini WCX — a Total Commander packer plugin that presents Gemini files as virtual archives
- Gemini WLX — a Total Commander lister plugin that renders Gemini conversations as HTML in an embedded WebView2 control
Google AI Studio exports conversations as extensionless JSON files. Each file may contain:
- Model run settings (model name, temperature, top-p, top-k, safety settings, feature flags)
- System instruction
- A sequence of conversation chunks (user messages, model responses, thinking blocks)
- Base64-encoded embedded resources (images attached or generated during the conversation)
- References to remote Google Drive attachments
Files can range from a few kilobytes to 500+ MB depending on the number of embedded images.
Claude Console exports use a JSON object with kind: "console-playground-prompts" and schema version v: 1. One file contains multiple sessions in prompts, each with its own metadata and saved versions.
Saved versions are independent snapshots: editing a prompt or regenerating a response can change earlier messages. Keeping them separate preserves that history without duplicating it inside a conversation. The newest snapshot by its saved timestamp is selected initially; ties use the last snapshot in export order. Session and version numbering follow export order.
Text, thinking, system instructions, model settings, HTTPS/HTTP image references, and embedded base64 images are supported. Unfamiliar content blocks remain visible as labeled JSON so their data is not silently lost. Empty thinking blocks with signatures remain in the model and are hidden when empty-block hiding is enabled.
HTML output and the WLX viewer show one session and one version at a time. The Sessions (N) button opens a side panel containing wrapped session titles and their metadata, with title filtering and an active-session indicator. A version selector exposes each session's history. Switching sessions remembers the selected version, scroll position, and loaded images. The panel sits beside the content in wide windows and overlays it in narrow windows.
Text search operates on the currently displayed snapshot. Use the side panel to select another session or version before searching its content.
Both plugins read RemoteImages from [HtmlDefaults] in the gemini.ini beside their DLL. The CLI uses --images for HTML exports.
| Value | Behavior |
|---|---|
links (default) |
Show clickable URLs. Clicking downloads the image and replaces the link with it. |
fetch |
Display the document first, then load images in the displayed snapshot after page load. |
load |
Start loading images as soon as their snapshot is opened. |
Inactive snapshots do not download remote images. Failed downloads remain retryable. Normal browser caching applies, and loaded image elements stay in memory while switching snapshots. WLX uses its existing WebView2 user-data folder for the browser cache; no separate image-cache directory is required.
[HtmlDefaults]
RemoteImages=linksEmbedded images follow the existing external-resource or embedded-HTML setting. Remote images remain URLs even in embedded HTML and use the configured loading mode.
gemview sessions <file> List sessions and saved versions
gemview info <file> Show file metadata and statistics
gemview conversation <file> Print latest conversations as text
gemview export <file> [options] Export HTML (default), Markdown, or text
gemview resources <file> List embedded resources
gemview extract <file> [options] Extract embedded resources
gemview help Show usage information
| Option | Description |
|---|---|
--session N |
Select one session, numbered from 1. Omit to process all sessions. |
--version N |
Select a saved version, numbered from 1; requires --session. Omit to use the latest snapshot. |
--format html|md|txt |
Output format for export or conversation. |
--output <file> |
Write exported content to a file; otherwise write to standard output. |
--images links|fetch|load |
Remote image loading for HTML; default links. |
HTML retains selectable history, with --version choosing the initial snapshot. Text and Markdown contain the selected version, or each session's latest version when no version is selected. resources and extract also accept session/version selection and process embedded resources; they do not download remote images. Claude extraction uses sessions/<number - title>/versions/<number>/resources/ beneath the output directory to keep attachments from different snapshots separate.
gemview sessions playground-prompts.json
gemview export playground-prompts.json --output sessions.html --images fetch
gemview conversation playground-prompts.json --session 2 --version 1
gemview export playground-prompts.json --session 2 --format md --output session.md
| Option | Description |
|---|---|
--output <dir> |
Output directory (default: <filename>_resources) |
--sequential |
Single-threaded extraction (default is multi-threaded) |
--prefix <name> |
Filename prefix for extracted files (default: resource) |
Show metadata and statistics:
gemview info "My Conversation"
Extract all embedded images:
gemview extract "My Conversation" --output ./images --prefix img
The WCX plugin allows opening Gemini conversation files directly in Total Commander. Each file appears as a virtual archive containing:
<name>.txt Plain text conversation export
<name>.md Markdown conversation export
<name>.html HTML export (images as external links)
<name>_full.html HTML export with embedded base64 images (only when resources exist)
resources\
resource_001.png Extracted embedded resources
resource_002.jpg
...
resources\think\
resource_003.png Resources from thinking blocks (separated automatically)
...
Claude exports additionally contain session folders and version-specific exports:
<name>.txt / <name>.md Latest snapshot of every session
<name>.html Session panel and selectable history
<name>_full.html Embedded HTML, when embedded resources exist
sessions/
001 - <title>/
conversation.txt / .md This session's latest snapshot
conversation.html This session and its selectable history
conversation_full.html Embedded HTML, when resources exist
versions/
001/
conversation.txt / .md This saved snapshot
conversation_full.html Embedded HTML, when this snapshot has resources
resources/ This snapshot's embedded attachments
002/
...
002 - <title>/
...
Session folder names have a numeric prefix and a sanitized title, so identical titles remain distinct. Existing format enable/disable settings apply to Claude exports too.
The <name> part uses the original Gemini file name by default. This can be changed to a generic conversation prefix via configuration.
- Build the plugin from source or obtain the compiled
gemini.wcx(32-bit) /gemini.wcx64(64-bit) - In Total Commander, go to Configuration > Options > Plugins > Packer plugins
- Click Configure, then Add and select the
.wcx/.wcx64file - Associate it with a file extension (e.g.,
gemini) or use the plugin directly
Plain Text — Readable conversation with role labels ([USER], [MODEL]), token counts, timestamps, thinking blocks wrapped in <Thinking> tags, and resource attachment indicators.
Markdown — Structured with headings (### User, ### Model), collapsible thinking blocks via <details>, horizontal rules between turns, and inline resource references.
HTML — Self-contained HTML page with:
- Styled message bubbles with role labels, token counts, and timestamps
- Collapsible thinking blocks (click to expand/collapse)
- Embedded or linked images
- System instruction display
- Floating controls panel for toggling full-width mode, expanding/collapsing all thinking blocks, and toggling Markdown rendering
- Markdown rendering in model output (headings, bold, italic, code, code blocks, strikethrough)
- Custom CSS override support
HTML Embedded — Same as HTML but with all images embedded as base64 data URIs, producing a fully self-contained single file. Only generated when the conversation contains embedded resources.
All three formatters support optional block combining. When enabled, consecutive chunks of the same kind (user, model, or thinking) are merged into a single visual block with one header. Sub-blocks within a combined group are separated by visual dividers.
This is useful when a conversation contains multiple consecutive user inputs (e.g., text followed by an image upload) or fragmented model responses that logically belong together.
Block combining is disabled by default and can be enabled per formatter independently.
The WCX plugin reads configuration from two optional files placed next to the plugin DLL:
gemini.ini— behavioral settingsgemini.css— CSS overrides for HTML output
All settings are optional. Defaults are used when a key is absent or the file does not exist.
| Key | Default | Description |
|---|---|---|
UseOriginalName |
1 |
1 = virtual files use the original Gemini file name (MyChat.txt, etc.). 0 = generic names (conversation.txt, etc.) |
| Key | Default | Description |
|---|---|---|
EnableText |
1 |
Include plain text export in the virtual archive |
EnableMarkdown |
1 |
Include Markdown export in the virtual archive |
EnableHtml |
1 |
Include HTML export in the virtual archive |
EnableHtmlEmbedded |
1 |
Include embedded HTML export (when resources exist) |
HideEmptyBlocksText |
1 |
Hide empty display blocks in text output |
HideEmptyBlocksMd |
1 |
Hide empty display blocks in Markdown output |
HideEmptyBlocksHtml |
1 |
Hide empty display blocks in HTML output |
CombineBlocksText |
0 |
Combine consecutive same-kind blocks in text output |
CombineBlocksMd |
0 |
Combine consecutive same-kind blocks in Markdown output |
CombineBlocksHtml |
0 |
Combine consecutive same-kind blocks in HTML output |
When empty blocks are hidden, chunks with no text and no embedded resource are skipped. Remote attachment counts are shown as hints on the next non-empty block instead.
| Key | Default | Description |
|---|---|---|
DefaultFullWidth |
0 |
Start the HTML page in full-width mode (no max-width column). The user can still toggle via the floating controls panel. |
DefaultExpandThinking |
0 |
Start thinking blocks expanded instead of collapsed. The user can still toggle via the floating controls panel. |
RenderMarkdown |
1 |
Render Markdown formatting in model output as HTML. Supports: headings (# through ######), bold (**), italic (*), bold-italic (***), inline code (`), strikethrough (~~), fenced code blocks (```). |
Place a gemini.css file next to the plugin DLL to override the built-in HTML styles. The custom CSS is appended after the built-in stylesheet, so it takes precedence.
Available selectors:
| Selector | Purpose |
|---|---|
body |
Page container (max-width, background, font) |
body.full-width |
Active when full-width mode is on |
body.md |
Active when Markdown rendering is on |
h1 |
Page title |
.meta |
Model/settings metadata line |
.section-title |
"System Instruction" / "Conversation" headings |
.system-instruction |
System instruction block |
.message |
Each conversation turn container |
.message.user |
User message |
.message.model |
Model message |
.role |
Role label (USER / MODEL) |
.tokens |
Token count badge |
.time |
Timestamp badge |
.content |
Message text container |
details.thinking |
Collapsible thinking block |
summary |
Thinking block toggle label |
.resource-img |
Embedded/linked image |
.resource-info |
Image metadata caption |
.remote-attachments |
Remote attachment hint |
.combined-part |
Sub-block within a combined group |
#controls |
Floating controls panel |
#controls button |
Control panel buttons |
body.md .content |
Content when Markdown is rendered |
body.md .content p |
Paragraphs in rendered Markdown |
body.md .content pre |
Fenced code blocks |
body.md .content code |
Inline code spans |
Example dark theme (excerpt):
body {
background: #1a1a2e;
color: #e0e0e0;
}
.message.user {
background: #16213e;
border-left-color: #4a9eff;
}
.message.model {
background: #1a1a2e;
border-left-color: #4caf50;
}See the included gemini.css file for a complete dark theme example and other override snippets.
The WLX plugin renders Gemini conversation files as formatted HTML directly in Total Commander's built-in viewer (F3) and quick view panel (Ctrl+Q). It uses an embedded WebView2 (Microsoft Edge) control for rendering.
- Renders conversations as styled HTML with embedded images, thinking blocks, and interactive controls
- Thumbnail previews in Total Commander's thumbnail view — embedded images are used when available; for text-only files, a configurable fallback strategy generates a visual thumbnail
- In-page text search via Total Commander's search dialog
- Keyboard transparency — non-character keys (Esc, F-keys) and modifier combinations pass through to Total Commander; navigation keys (arrows, Page Up/Down, Home/End, Space) scroll the content; Ctrl+C/A/V/X are handled by WebView2. Limitation: character keys without modifiers (letters, numbers, Tab) are consumed by WebView2 and do not reach TC hotkeys — click inside the TC file panel first to restore TC keyboard control
- Custom CSS override support (same selectors as the WCX HTML output)
- Microsoft Edge WebView2 Runtime (pre-installed on Windows 10/11). Installing the Runtime does not provide
WebView2Loader.dll— that loader is a separate redistributable, bundled with this plugin (see below). WebView2Loader.dll— included in the release package insidewebview2x32/webview2x64subfolders next to the plugin DLL, so no manual step is required. The plugin looks for it in the architecture-specific subfolder next to the plugin, then in the plugin directory, then on the system DLL search path. When building from source it is deployed automatically fromwlx/redist/bywlx_build.bat(debug) andrelease.bat(packaging).
- Build the plugin from source or obtain the compiled
gemini.wlx(32-bit) /gemini.wlx64(64-bit) - In Total Commander, go to Configuration > Options > Plugins > Lister plugins (WLX)
- Click Add and select the
.wlx/.wlx64file - The plugin auto-detects Gemini files by looking for
runSettingsandmodels/, and Claude exports by looking forconsole-playground-prompts, in the first 8 KB of the file
The WLX plugin reads configuration from two optional files placed next to the plugin DLL:
gemini.ini— behavioral and WebView2 settingsgemini.css— CSS overrides for HTML output (same selectors as the WCX plugin)
All settings are optional. Defaults are used when a key is absent or the file does not exist.
| Key | Default | Description |
|---|---|---|
HideEmptyBlocks |
1 |
Hide empty display blocks (no text, no embedded resource) |
CombineBlocks |
0 |
Combine consecutive same-kind blocks into a single visual block |
RenderMarkdown |
1 |
Render Markdown formatting in model output as HTML |
| Key | Default | Description |
|---|---|---|
DefaultFullWidth |
0 |
Start in full-width mode (toggleable via controls panel) |
DefaultExpandThinking |
0 |
Start thinking blocks expanded (toggleable via controls) |
| Key | Default | Description |
|---|---|---|
UserDataFolder |
%TEMP%\gemini_wlx |
WebView2 browser profile storage location |
AllowContextMenu |
0 |
Allow right-click context menu in the viewer |
AllowDevTools |
0 |
Allow opening DevTools (F12) in the viewer |
| Key | Default | Description |
|---|---|---|
Fallback |
text |
Fallback thumbnail strategy for files without embedded images |
When a Gemini file contains embedded images, the first image is decoded and scaled as the thumbnail. For files without images, the Fallback strategy determines what is shown:
| Value | Description |
|---|---|
text |
White card showing the first user message as a text excerpt. Fast binary scan with early termination. |
stripe |
Colored horizontal bars representing conversation structure — blue for user turns, green for model turns, heights proportional to message length. Fast binary scan, no JSON parsing. |
metadata |
Badge showing the model name, chunk count, and token count. |
none |
No thumbnail for imageless files. |
After build.bat, run python tests/test_claude_browser.py on Windows with Microsoft Edge installed. This supplements the DUnitX suite with CLI smoke tests and real browser checks of session/version switching, remote image modes, cross-origin image loading, retry links, and caching while switching. It uses Python's standard library, synthetic sessions, and a local HTTP server; it does not request private example content or external images. Screenshots and generated HTML are saved in a printed temporary directory.
- Delphi 12 Athens (or compatible)
- Windows build environment
src/ Core library (framework-independent)
GeminiFile.Types.pas Value types, enums, records, helpers
GeminiFile.Model.pas Domain model classes
GeminiFile.Parser.pas Gemini JSON parser
ClaudeFile.Parser.pas Claude snapshot parser
ConversationFile.pas Sessions and independent version snapshots
ConversationFile.Formatter.pas Collection exports and session navigation
GeminiFile.Extractor.pas Resource extractor
GeminiFile.Grouping.pas Block combining logic
GeminiFile.Formatter.Text.pas Plain text formatter
GeminiFile.Formatter.Md.pas Markdown formatter
GeminiFile.Formatter.Html.pas HTML formatter
GeminiFile.Markdown.pas Markdown-to-HTML renderer
GeminiFile.pas Facade (re-exports all types)
app/ GemView console application
wcx/ Total Commander WCX packer plugin
GeminiWcx.pas Plugin logic
WcxApi.pas WCX SDK types
gemini.dpr DLL project
gemini.ini Example configuration
gemini.css Example CSS overrides
wlx/ Total Commander WLX lister plugin
GeminiWlx.pas Plugin logic (WebView2 integration)
WlxApi.pas WLX SDK types
gemini.dpr DLL project
gemini.ini Example configuration
gemini.css Example CSS overrides
tests/ DUnitX test suite
Copyright (C) 2026 Pavel Dubrovsky
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation.
See LICENSE for the full text.