Doop
Doop: 오픈소스 멀티플레이어 디자인 캔버스 및 AI 에이전트용 MCP
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Digitize typefaces: turn scans of typewriter type samples into clean, installable monospaced fonts
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Digitize typefaces. Turn scans of typewriter type samples - dirty, skewed, at any resolution - into clean, installable monospaced fonts. Label where each character is; Digitype averages every impression, traces it, and rebuilds it.
Site: https://leonardchau.com/Digitype/ · Try it in your browser: https://leonardchau.com/Digitype/app/ · Docs: Preparing samples · User guide · How it works · Settings
git clone https://github.com/dairyking98/Digitype
cd Digitype
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python3 -m digitype label "path/to/your/scans"
On Windows, run.bat "D:\Scans\Type Samples" sets up .venv on first run. Then open
http://127.0.0.1:8770, draw a box around a line of text, type what it says, and press Regenerate.
Lower each letter into water a little at a time. The shoreline at each level is the letter thinned by that much. Where shore from two sides meets and goes under, it leaves a trail. The trail, plus the depth at which each point of it went under, is the letter's seed. A disc of radius = depth at every trail point gives the letter back exactly.
The seed is where the cleanup happens. Dirt barely moves the trail:
Then the seeds can be standardized across the whole alphabet (one stem width, true verticals, shared baseline and x-height, shared serifs) and grown back: faithfully, or modified (lighter/bolder, more or less contrast, monoline), and exported as a font.
| stage | module | status |
|---|---|---|
| glyph from a font (test input) | glyph.py | done |
| simulated worn impression / bad scan | raster.dirty | done |
| first cleanup: specks, pinholes (< a stroke), edge | raster.clean | done |
| sinking island: depth map + trail graph (nodes, branches) | island.sink | done |
| prune corner ridges / speck trails, merge split junctions | island.prune | done, tuning |
| seed: smoothed + simplified centerlines, linearized half-widths, nodes | seed.py | done (polylines; Bézier fit next) |
| grow back (discs + tapered capsules, junction fill) | grow.py | done |
| report PNG per letter | report.py | done |
| average several impressions of the same letter | regen.average | done |
| real scans: labelling tool, cells, baselines, averaging, .ttf export | project.py regen.py server.py web/ | done |
| standardize across the alphabet | planned | |
| terminal / serif styles (flat ends come back round today) | planned | |
| export a .ttf (fontTools) | regen.write_font | done |
https://leonardchau.com/Digitype/app/ runs the same labelling tool with nothing installed: Python
runs in the browser (Pyodide), and a service worker answers the page's /api/ requests with
digitype/webapi.py in place of the server. The project lives in the browser's storage (or a folder
picked on disk, Chrome/Edge); Download project / Open project (.zip) move it between computers.
No "Add from a path" (a web page can't read paths), and Regenerate is about 1.6x slower than native.
Build: python3 site/build.py (local test in site/dist/) or python3 site/build.py docs/app
(what GitHub Pages serves - rebuild it whenever digitype/ changes).
run.bat "D:\Scans\Type Samples" (Windows; first run sets up .venv)
.venv/bin/python3 -m digitype label path/to/samples [--project DIR] (anywhere)
Opens a local page (http://127.0.0.1:8770). Every image, multi-page TIFF frame and PDF page is a page; Upload PDF / images… copies files into the project from the browser. Drag a box round a glyph and type it; type a whole run (spaces included) to split a line into fixed-pitch cells at the project's pitch. The page warns when the text can't match the ink (a missing or extra space). Baselines are automatic: letters that sit on the line give it, g j p , ( ... borrow it. Adaptive (default) fits the baseline locally along each line, so skewed or wavy lines are followed; Straight fits one tilted line per run. Tilt correction turns each sample level by its line's tilt before averaging. Shift+drag the red line to set one by hand.
Font sets: a project can hold several typefaces (the Peli scans are a different Olympia face per page). Pick the set in the top bar, + New font starts another; boxes, pitch and font name are kept per set, other sets' boxes show dimmed, and Regenerate only uses the chosen set.
Regenerate averages every sample of each character (lined up on cell and baseline,
registered sub-pixel), then writes two fixed-pitch fonts to projects/<name>/out/<set>/:
-Average.ttf (the averaged ink, traced) and -Seed.ttf (sunk to a seed and regrown).
Results shows each glyph's average, trace and seed. Projects live in projects/ (not in git).
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python3 -m digitype demo path/to/font.ttf kyR8 --dirty --out out
Each letter gets report_XXXX.png (input -> sinking island -> seed -> grown back vs the
original, with IoU) and seed_XXXX_{clean,dirty}.json. examples/ has runs on Noto Sans Mono
and FreeMono.