Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
Euspell은 205,000어휘와 품사 구분, 브라우저·리더·오피스 연동을 제공하는 체계적 영어 맞춤법 도구입니다
Euspell is a systematic, tooling-first reform of English spelling: a 205000-entry lexicon, part-of-speech disambiguation, and browser, reader, and office integrations.
플러그인PLSQL · JavaScriptGitHub @ossiak온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Spelling reform implemented as a browser extension including PDF viewer
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Convert English text into euspell — a reformed, more regular spelling —
everywhere you read and write, entirely on your device. No account, no
server, no telemetry: the lexicon ships inside each product and your text never
leaves it. (One exception, and only while you use it: dictation hands the
microphone to the browser's own speech recognition, which on Chrome transcribes
in the cloud. See docs/dictation.md.)README 전문 보기 ↗Convert English text into euspell — a reformed, more regular spelling — everywhere you read and write, entirely on your device. No account, no server, no telemetry: the lexicon ships inside each product and your text never leaves it. (One exception, and only while you use it: dictation hands the microphone to the browser's own speech recognition, which on Chrome transcribes in the cloud. See docs/dictation.md.)
The flagship is a browser extension (Chrome, Firefox, and Safari) that rewrites web pages and PDFs in place, but the same conversion engine drives a family of integrations: a bundled PDF viewer, a LibreOffice extension, a Microsoft Word add-in, a Google Docs script, an Apple Pages converter, downloadable dictionaries for other spell-checkers, and the sibling Eupub EPUB/PDF reader. One engine, many surfaces — none of them re-implement the reform.
Installing it: the browser extension is covered by docs/installing.md; the four word-processor tools by docs/installing-addins.md.
| Surface | Where | Built by |
|---|---|---|
| Browser extension (web pages) | src/content/ | npm run build, then load unpacked |
| PDF viewer (in-browser) | src/pdf/ | same build (dist/pdf-viewer.js) |
| Firefox build | — | npm run build:firefox → build/firefox/ |
| Safari build (macOS) | safari/ | npm run build:safari → Xcode host app |
| LibreOffice extension | libreoffice/ | npm run gen:lo → dict/euspell-libreoffice.oxt |
| Microsoft Word add-in | word-addin/ | npm run gen:word (Office.js taskpane) |
| Google Docs | apps-script/ | the Apps Script port |
| Apple Pages (macOS) | pages/ | npm run gen:pages (JXA, reuses the Apps Script engine) |
| Dictionary exports | dict/ | Hunspell .aff/.dic, .oxt, Word .dic, Harper, TTS .pls |
| Eupub reader (sibling) | ../Eupub | the mobile engine build |
Euspell is not a find-and-replace. Each word is looked up in a large English lexicon; most words are unchanged, and the reformed minority each carry their new spelling plus part-of-speech tags. The tags matter because English is full of homographs whose spelling should reform differently by sense:
records is NN2|VVZ — the noun ("the records") and the verb ("she recordz")
take different euspellings, chosen based on the surrounding words using SVM.wind, bow, read, lead, bass, beloved, … each split by meaning.Each entry also carries a three-digit encoding saying how many spellings the word has and what kind of ambiguity, if any, has to be resolved to choose between them — see docs/encoding.md for the full scheme.
So the engine (src/content/converter.js + dom-walker.js) walks a document's
text nodes, tokenizes and tags them (src/content/tagger.js), and resolves the
ambiguous cases with two layers of disambiguation in src/disambig/: a
part-of-speech SVM/rule set (pos.js, vvz-svm.js) and per-word semantic rules
(semantic/), trained against the corpora under disambig/. Only text node
values change — never structure — so links, layout, selection, and search
survive the rewrite.
npm install
npm run build # compiles the lexicon, copies PDF.js, bundles the extension → dist/
Then load it unpacked:
chrome://extensions → enable Developer mode → Load unpacked → pick this folder (it reads manifest.json and dist/).npm run build:firefox, then npm run run:firefox (web-ext) or load build/firefox/ via about:debugging.npm run build:safari, then open safari/Euspell.xcodeproj in Xcode and Run. See safari/README.md for enabling it in Safari.dist/ is generated (git-ignored); rebuild after changing anything under src/
or the lexicon data.
The same lexicon feeds a set of generators (build/), each producing a drop-in
artifact for another tool:
npm run gen:lo # LibreOffice extension (.oxt)
npm run gen:word # Word Office.js add-in (engine + data + icons)
npm run gen:oxt # Hunspell dictionary packaged as .oxt
npm run gen:harper # Harper grammar-checker metadata
npm run gen:pls # TTS pronunciation lexicon (.pls)
npm run gen:pos # part-of-speech lexicon (for external grammar checkers)
Outputs land in dict/. A custom Word dictionary (dict/euspell-word.dic, the
reformed spellings, so Word stops flagging them) comes from npm run gen:word-dict.
| Path | Role |
|---|---|
src/content/ | the conversion engine — converter, DOM walker, tagger, lexicon |
src/disambig/ | homograph disambiguation (POS rules + per-word semantic rules) |
src/pdf/ | the PDF viewer (renders to canvas, reforms the text layer) |
src/popup/, src/options/, src/background/, src/onboarding/ | extension UI + service worker |
src/dictation/ | speech-to-euspell dictation |
data/, dict/, disambig/ | lexicon source, generated dictionaries, training corpora |
build/ | generators for every integration above |
safari/ | the macOS Safari web-extension host app (Xcode project) |
apps-script/, libreoffice/, word-addin/ | the non-browser ports |
tests/ | unit + pipeline tests |
npm test # node --test over tests/**/*.test.js
GPL-3.0-or-later. Copyright (C) 2026 Kamran Ossia. The full licence text is in LICENSE — verbatim, so that a copy travels with every distribution rather than only being pointed at.
The lexicon data is licensed separately. The files under data/*.csv are
Creative Commons Attribution-ShareAlike 4.0 International
(CC BY-SA 4.0), not GPL. The
reform is meant to be reusable by anyone building on it, including outside a
GPL project; the code that applies it is not.
All conversion runs locally — no page text, no telemetry, and no network requests leave the device.
Dictation is the single exception, and worth stating plainly because the claim above is otherwise absolute: it calls the browser's Web Speech API, and Chrome implements that by streaming the audio to Google's speech service. The extension never receives the audio and never sees the transcript before the browser returns it; the euspell conversion still happens locally. Nothing is captured unless you start dictation.