LingLu · Live Topic Tree Minutes
A live topic tree grows during recording; HTML reports export when you stop. On-device first (Ollama recommended), 9 LLM providers, 5 report themes.
- Live mode: topic tree + "now speaking"
- Wrap-up: summary / decisions / actions
- Delivery: 5 HTML report themes
- 9 LLM providers, Ollama recommended
Three states, one data model
LingLu splits a recording session into three coordinated
states sharing a single LingLuDoc:
Live · while recording
The "LingLu" output panel grows a live topic tree in the dock area. Closed topics never get rewritten; the current open topic is highlighted with a vermilion left border; the "now speaking" zone shows the active partial.
Wrap-up · after stop
Auto-consolidates summary / key decisions / action items. The scenario field decides whether business-style fields are emitted (personal / gathering scenarios never force-extract action items).
Delivery · pick a theme
Toolbar theme dropdown →
👁 Preview (iframe sandbox) or
⬇ Export (lands in
session/<id>/reports/). Five
themes: terminal-grade / keynote-stage / editorial /
minimal-print / sumi-ink.
9 supported LLM providers
Boundless Flow is an on-device product, so Ollama (local) is the default and recommended path — no API key, zero cost per call, data never leaves your machine. The other 8 are cloud options and all support custom third-party OpenAI-compatible proxy URLs.
🏠 Ollama · local (recommended)
Default base URL
http://localhost:11434; no API key
required. Also accepts remote Ollama like
http://192.168.x.x:11434.
☁️ OpenAI-compatible
DeepSeek / Kimi (Moonshot) / GLM (Zhipu) / Volcengine (Doubao) / MiniMax / OpenAI itself — 6 providers share the same OpenAI-compatible codec.
☁️ Anthropic Claude
Messages API (/v1/messages) with its
own codec; x-api-key +
anthropic-version: 2023-06-01;
max_tokens required.
☁️ Google Gemini
v1beta generateContent /
streamGenerateContent?alt=sse;
x-goog-api-key auth;
systemInstruction +
contents body shape.
Eight scenarios · auto detection
LingLu swaps prompt strategy by scenario, producing visibly different output styles:
| Code | Scenario | Default theme | Tone |
|---|---|---|---|
| S0 | generic · fallback | minimal-print | Neutral note-taking; never assumes a scenario. auto falls back to this when confidence < 0.5 |
| S1 | personal · solo recording ★ | sumi-ink | Classical Chinese literati voice ("thinking of…", "feeling…"); classical chapter names (录略 / 念想 / 断语) |
| S2 | private_chat · 1-on-1 | minimal-print | Two-sided positions + commitment phrases ("I will…", "I promise…") |
| S3 | gathering · informal gathering ★ | sumi-ink | Chinese literati gathering tone; small talk OK; no action items |
| S4 | closed_meeting · closed-door | terminal-grade | Verb-noun topics; prioritize decision verbs (decide / approve / agree) |
| S5 | public_meeting · public | keynote-stage | Agenda-style topics; emphasize public commitments |
| S6 | business · KPI/sales | terminal-grade | KPIs / projects / clients first; preserve numbers / amounts / dates |
| S7 | academic · research talk | editorial | Claims / evidence / counter-arguments / citations |
★ personal & gathering use the sumi-ink theme (Song-dynasty palette: paper-white + vermilion + Songti/Kaiti typefaces). Content stays half-classical half-vernacular; business jargon is forbidden.
auto, after ~90s of transcript, the system
runs one cheap LLM call for classification.
If confidence < 0.5, the result is forcibly
downgraded to generic
— this keeps casual / private recordings from being
misclassified into "business commitments".
Five report themes
🖥 terminal-grade
Serious execution; deep #0b0d10 ground + warm gold accent. KPI cards + ASCII topic tree + OPEN/CLOSED status. Default for S4 closed / S6 business.
🎤 keynote-stage
Stage style; deep-blue gradient + gold + teal; centered hero + three-pillar conclusions. Default for S5 public.
📰 editorial
Magazine feel; paper white + vermilion; serif headlines + two-column abstract + roman-numeral topics + large chapter numbers. Default for S7 academic.
📄 minimal-print
Quiet, A4-friendly; pure white + gray text + no
accent color; @page print styles.
Default for S0 generic / S2
private_chat.
🖋 sumi-ink · Chinese aesthetic
Song-dynasty palette: paper #f4ede0 + ink #1b1a17 + vermilion #8a3b2e; Kaiti chapter names (题记 / 录略 / 念想 / 断语 / 待办 / 跋). Default for S1 personal / S3 gathering.
All themes inject Content-Security-Policy meta
and forbid <script> / external CSS /
external images / iframes; every LLM/transcript field is
HTML-escaped; self-contained < 200 KB; mobile-safe at
< 640px.
Quick start
Onboarding (first install)
Go to Step 4 · API Providers,
scroll down to "LingLu API · Live topic tree +
reports". Defaults are Ollama +
http://localhost:11434; just fill
in the model name (e.g.
qwen3.6:35b).
Main panel · Advanced (anytime)
Settings → Advanced → LingLu API · Live topic tree + reports (open by default). Click "Fill defaults" to auto-fill base URL by provider; click "Test connection" to verify in one shot.
Start recording
Press RightAlt or click
Start Recording; open
AI Meeting View and watch the
dock area "Live topic tree" grow. Click
↗ Floating Window to detach to
a side screen.
Export a themed report
Pick a theme from the dock toolbar (smart
default by scenario) →
👁 Preview or
⬇ Export. Reports land in
session/<id>/reports/<theme>.html
and persist across restarts.
Configuration reference
| Field | Meaning | Example |
|---|---|---|
| Provider | 9 options; Ollama listed first | ollama |
| Base URL | Any OpenAI-compatible proxy works (e.g. oneapi.example.com); Ollama defaults to localhost | http://localhost:11434 |
| API Key | Leave empty for Ollama; required otherwise | sk-xxxxxxxx |
| Model | Model id with tag |
qwen3.6:35b /
deepseek-chat /
claude-3-5-haiku-20241022
|
| Scenario | auto + 8 scenarios; auto with low confidence falls back to generic | auto |
| Report theme | 5 themes; smart default by scenario | sumi-ink |
| Temperature | 0.0–1.0; 0.1–0.3 recommended for minutes | 0.2 |
| Max tokens | ≥ 2048 recommended for reasoning models (chain-of-thought eats budget) | 4096 |
| Interval (seconds) | Lower bound 10, default 60; shorter = more real-time but more calls | 60 |
Session directory layout
After stop, artifacts land under
sessions/<YYYYMMDD_HHMMSS_slug>/:
| File | Purpose |
|---|---|
audio.wav |
Source recording (existing) |
enriched_transcript.json |
Speaker-tagged transcript (existing) |
minutes.json |
Rule-based minutes (existing) + new LingLu fields: topic_tree_ref / scenario / theme_id / llm_provider / llm_model / linglu_schema |
minutes.html |
Minutes HTML — v0.4 now renders with the scenario-appropriate theme (no more blue-teal gradient) |
linglu.json |
NEW: full LingLuDoc with topics / liveTail / runtime / providerSnapshot |
reports/<theme>.html |
NEW: user-exported themed reports |
Security & privacy
- No raw audio sent: only transcript + speaker labels + timestamps go to the LLM
- API keys never persisted in artifacts: providerSnapshot stores provider / model / endpoint host only
-
All logs redacted: every
eprintln!path runs throughredact_auth_header, scrubbingsk-*/Bearer */x-api-key/ Gemini?key= -
HTML reports CSP-enforced:
default-src 'none'+ no script / no external resources; the in-app preview iframe usessandbox="allow-same-origin"(noallow-scripts), giving two-layer XSS protection - auto-scenario low-confidence fallback: prevents casual/private chats from being misclassified as "business commitments"