Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>AI Notes β Source-Grounded AI Note Taker (Open Source) | Lynote</title> | |
| <meta name="description" content="Open-source, source-grounded AI note taker: turn documents, web pages, audio, video and YouTube links into notes where every bullet cites the exact source chunk. Local-first, bilingual, zero-dependency core." /> | |
| <meta name="keywords" content="open source ai note taker, ai notes, source grounded notes, citations, rag notes, local first notes, ai notes cli, anki export, bilingual notes" /> | |
| <meta property="og:title" content="AI Notes β Source-Grounded AI Note Taker (Open Source)" /> | |
| <meta property="og:description" content="Notes where every bullet cites the exact source chunk. MIT licensed, local-first, bilingual." /> | |
| <style> | |
| :root { --bg:#0f1420; --card:#171f31; --card2:#1b2540; --fg:#e8edf7; --muted:#9aa7c0; --accent:#7b6dff; --accent2:#34d399; --line:#23304a; } | |
| * { margin:0; padding:0; box-sizing:border-box; } | |
| body { background:var(--bg); color:var(--fg); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif; line-height:1.7; } | |
| .wrap { max-width:960px; margin:0 auto; padding:48px 24px 72px; } | |
| .logo { font-size:15px; letter-spacing:3px; color:var(--muted); text-transform:uppercase; } | |
| .badge { display:inline-block; font-size:13px; padding:4px 14px; border-radius:999px; border:1px solid #2c3a55; color:#b9c6e2; background:rgba(123,109,255,.08); margin:20px 0; } | |
| h1 { font-size:clamp(30px,5.5vw,48px); line-height:1.2; margin:0 0 16px; background:linear-gradient(90deg,var(--accent),var(--accent2)); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; } | |
| .sub { font-size:18px; color:var(--muted); max-width:720px; } | |
| .stats { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:14px; margin:34px 0 8px; } | |
| .stat { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:18px; text-align:center; } | |
| .stat b { display:block; font-size:24px; background:linear-gradient(90deg,var(--accent),var(--accent2)); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; } | |
| .stat span { font-size:13px; color:var(--muted); } | |
| h2 { font-size:26px; margin:56px 0 8px; } | |
| .section-note { color:var(--muted); margin-bottom:22px; } | |
| .grid { list-style:none; display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:14px; } | |
| .grid li { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:18px 20px; } | |
| .grid strong { display:block; color:#fff; margin-bottom:6px; font-size:16px; } | |
| .grid span { color:var(--muted); font-size:14.5px; } | |
| .steps { list-style:none; display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:8px; } | |
| .steps li { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:20px; } | |
| .steps em { display:block; font-style:normal; color:var(--accent2); font-size:13px; letter-spacing:1px; text-transform:uppercase; margin-bottom:6px; } | |
| .steps strong { display:block; font-size:16px; margin-bottom:6px; } | |
| .steps span { color:var(--muted); font-size:14.5px; } | |
| pre { background:var(--card2); border:1px solid var(--line); border-radius:12px; padding:16px 18px; overflow-x:auto; font-size:13.5px; line-height:1.6; color:#d7e1f5; } | |
| code { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; } | |
| details { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:14px 18px; margin-bottom:10px; } | |
| summary { cursor:pointer; font-weight:600; color:#fff; } | |
| details p { color:var(--muted); font-size:14.5px; margin-top:8px; } | |
| .cta { display:inline-block; background:linear-gradient(90deg,var(--accent),var(--accent2)); color:#fff; font-size:17px; font-weight:600; padding:14px 30px; border-radius:12px; text-decoration:none; margin:36px 0 8px; } | |
| .cta:hover { opacity:.9; } | |
| .cta.secondary { background:var(--card); border:1px solid var(--line); font-weight:500; margin-left:10px; } | |
| .links-label { font-size:12px; color:var(--muted); letter-spacing:1.5px; text-transform:uppercase; margin-top:36px; } | |
| .links { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-top:10px; } | |
| .chip { font-size:14px; padding:8px 18px; border-radius:999px; border:1px solid var(--line); color:var(--fg); text-decoration:none; background:var(--card); } | |
| .chip b { color:var(--accent2); } | |
| .chip:hover { border-color:var(--accent); color:#fff; } | |
| .note { font-size:13.5px; color:var(--muted); margin-top:24px; max-width:780px; } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="wrap"> | |
| <div class="logo">Lynote</div> | |
| <span class="badge">OPEN SOURCE Β· MIT Β· ZERO-DEPENDENCY CORE</span> | |
| <h1>AI Notes</h1> | |
| <p class="sub"> | |
| Source-grounded, bilingual, local-first AI note taker. Turn documents, web pages, | |
| recordings, videos and YouTube links into structured notes where every bullet cites | |
| the exact source chunk it came from β so you can verify, edit and reuse notes | |
| instead of trusting a black box. | |
| </p> | |
| <a class="cta" href="https://www.producthunt.com/products/lynote-ai?launch=lynote-3" target="_blank" rel="noopener"> | |
| Find us on Product Hunt β | |
| </a> | |
| <a class="cta secondary" href="https://github.com/lynote-ai/lynote-notes" target="_blank" rel="noopener"> | |
| View on GitHub | |
| </a> | |
| <a class="cta secondary" href="https://lynote.ai/ai-notes?utm_source=huggingface&utm_medium=space&utm_campaign=hf_launch&utm_content=oss_notes" target="_blank" rel="noopener"> | |
| Try Lynote AI Notes | |
| </a> | |
| <div class="links-label">Free Lynote tools Β· open source</div> | |
| <div class="links"> | |
| <a class="chip" href="https://www.producthunt.com/products/lynote-ai?launch=lynote-3" target="_blank" rel="noopener"><b>Product Hunt</b> β Lynote</a> | |
| <a class="chip" href="https://github.com/lynote-ai/lynote-notes" target="_blank" rel="noopener">GitHub β lynote-ai/lynote-notes</a> | |
| <a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-notes" target="_blank" rel="noopener">Free AI Note Taker β</a> | |
| <a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-humanizer" target="_blank" rel="noopener">Free AI Humanizer β</a> | |
| <a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-detector" target="_blank" rel="noopener">Free AI Detector β</a> | |
| <a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-image-detector" target="_blank" rel="noopener">Free AI Image Detector β</a> | |
| </div> | |
| <div class="stats"> | |
| <div class="stat"><b>58</b><span>Tests Passing</span></div> | |
| <div class="stat"><b>92%</b><span>Test Coverage</span></div> | |
| <div class="stat"><b>0</b><span>Core Dependencies</span></div> | |
| <div class="stat"><b>MIT</b><span>License</span></div> | |
| </div> | |
| <h2>Why Source-Grounded?</h2> | |
| <p class="section-note">AI note tools usually give you a summary you cannot check. Lynote Notes is built around traceability.</p> | |
| <ul class="grid"> | |
| <li><strong>Citations as a Contract</strong><span>Every bullet carries a source citation. Providers return chunk ids; the core resolves them and drops anything that does not exist β a hallucinated citation cannot leak into a note.</span></li> | |
| <li><strong>Offline by Default</strong><span>The default extractive provider needs no model and no network. Configure any OpenAI-compatible endpoint (Ollama, vLLM, OpenAI) for generative notes, with automatic fallback.</span></li> | |
| <li><strong>Bilingual by Design</strong><span>CJK unigrams + bigrams, sentence splitting on γοΌοΌοΌ β English and Chinese work out of the box.</span></li> | |
| <li><strong>Local-First Workspace</strong><span>One workspace is one SQLite file. No server, no account, inspectable with standard tools.</span></li> | |
| <li><strong>Media Timestamps</strong><span>Audio and video citations point to HH:MM:SS, not just "somewhere in the file".</span></li> | |
| <li><strong>Reuse Built In</strong><span>Export Markdown for reading or Anki TSV for memorising β straight from the same cited note.</span></li> | |
| </ul> | |
| <h2>Quickstart</h2> | |
| <p class="section-note">Python 3.9+, works offline.</p> | |
| <pre><code>git clone https://github.com/lynote-ai/lynote-notes.git | |
| cd lynote-notes | |
| pip install -e . | |
| lynote-notes add lecture.md | |
| lynote-notes add https://example.com/post | |
| lynote-notes note --title "Weekly reading" | |
| lynote-notes ask "What did we decide about pricing?" | |
| lynote-notes export --note note_xxx --format anki --out cards.tsv</code></pre> | |
| <h2>How It Works</h2> | |
| <p class="section-note">Five small stages, one traceable pipeline.</p> | |
| <ol class="steps"> | |
| <li><em>Step 1</em><strong>Ingest</strong><span>Text/Markdown, web pages, PDF, DOCX, YouTube captions, audio and video β optional backends stay behind extras.</span></li> | |
| <li><em>Step 2</em><strong>Chunk</strong><span>Paragraph-aware splitting with overlap; media keeps timestamps.</span></li> | |
| <li><em>Step 3</em><strong>Note</strong><span>A provider drafts sections from chunks; the core resolves every bullet to a real citation.</span></li> | |
| <li><em>Step 4</em><strong>Ask</strong><span>BM25-lite retrieval finds the evidence; answers cite the chunks they came from.</span></li> | |
| <li><em>Step 5</em><strong>Export</strong><span>Markdown for reading, Anki TSV for memorising.</span></li> | |
| </ol> | |
| <h2>Limitations</h2> | |
| <ul class="grid"> | |
| <li><strong>Extractive Default</strong><span>The default provider selects and organises sentences from your sources rather than rewriting them. Use an LLM provider for more fluent notes.</span></li> | |
| <li><strong>Lexical Retrieval</strong><span>BM25 matches words, not meanings. Paraphrased questions can miss relevant passages; embeddings are on the roadmap.</span></li> | |
| <li><strong>Transcription Quality</strong><span>Depends on the ASR model size and audio quality β check important details against the source.</span></li> | |
| <li><strong>No Live Capture</strong><span>No meeting bots by design: export the recording and upload it.</span></li> | |
| </ul> | |
| <h2>FAQ</h2> | |
| <details> | |
| <summary>How is this related to Lynote AI Notes?</summary> | |
| <p>This Space presents the open-source core (MIT, on GitHub). Lynote AI Notes is the hosted product at lynote.ai/ai-notes, which adds a workspace UI, more formats and managed AI. The CLI and library here work standalone.</p> | |
| </details> | |
| <details> | |
| <summary>Do I need an API key?</summary> | |
| <p>No. The default extractive provider runs offline. An OpenAI-compatible endpoint is optional for generative notes.</p> | |
| </details> | |
| <details> | |
| <summary>Does it work with Chinese content?</summary> | |
| <p>Yes β tokenization and sentence splitting are bilingual by design, and notes can be generated from mixed-language workspaces.</p> | |
| </details> | |
| <details> | |
| <summary>How do I verify a citation?</summary> | |
| <p>Every citation names the source, a locator ("chunk 4" or "00:12:30") and a snippet. Open the source at that locator and compare β that is the point of the design.</p> | |
| </details> | |
| <p class="note"> | |
| This Space is a static demo page for the open-source project. The interactive Gradio demo | |
| (paste text β cited note β ask questions) is kept ready in this repository and will be | |
| enabled once the account has PRO hosting. Full product: | |
| <a href="https://lynote.ai/ai-notes" style="color:var(--accent)">lynote.ai/ai-notes</a>. | |
| AI notes can miss context or nuance β always check important details against the cited source. | |
| </p> | |
| </div> | |
| </body> | |
| </html> | |