Playground
The lab is two columns on one file
Open the playground. Drop a file or paste. Two strategies run in a worker. Click a chunk and the source underlines that Unicode range. Nothing is uploaded. The snippet on the left is already the pip you would run next.
What you actually do
- Drop
.txt,.md,.py,.json,.csv,.html, code, PDF, or Word. PDF.js and mammoth extract text in the tab. There is no lab strategy namedpdf_chunker. - The lab picks A and B from the extension. You can switch either side. Grey names are pip-only until a real JS port exists.
- Knobs match the Python kwargs. The snippet updates as you type.
- Click a chunk. Focus chips read
A 00/B 01, not hex colors. Find ranks chunks in both lists; that query also stays local. - Link copies A vs B and the knobs. It never puts your file in the URL.
Layout
Desktop is a three-column grid: toolbox, an 8px divider, then source on top of A | B. Drag the vertical divider to widen the source, or Tab to it and use ArrowLeft / ArrowRight (16px steps). Drag the horizontal divider under the editor to make the paste box taller, or Tab to it and use ArrowUp / ArrowDown. Width is lab-rail-w, height is lab-paper-h. Sidebar floor 196px, ceiling min(420px, 42% of the app). Source floor 160px. Below 960px the sidebar divider hides and the toolbox stacks under the stage; you can still drag the source taller.
Names that surprise people
recursive_characteris the RAG default: paragraphs, then lines, then spaces. It is not hierarchicalrecursive.recursiveis a parent/child tree (paragraph then sentence). The list is a tree. pipcompareis still how you run three or more.python_codein the tab is tree-sitter (indent fallback). pip uses stdlibast. Nested methods are separate chunks. Compare onsymbol_name/symbol_kind/line_start/line_end.token_basedloads cl100k_base once. Counts are not chars/4.semanticis grey until Transformers.js MiniLM loads from Hugging Face (~25 MB). Cuts will not match pip[ml].overlapping_windowpaints the shared range in amber.regex_customstarts the next chunk at the match (speaker turns, log lines).
Hard limits on purpose
- 150 MB. Python streams from disk; the tab will not pretend to.
- Two columns. N-way is pip compare.
- No eval of custom JS. A strategy you wrote is pip register_chunker.
- No analytics, no sendBeacon, no files in the share URL.
- Images, xlsx, pptx, OLE
.doc, layout PDFs, audio, and video stay pip-only. See Formats.