What this is
A catalogue of Chinese fountain pens — 21 brands, 390 models — with the colourways each ships in, photos, mined specifications, street prices, a score built from what owners say, and a join onto the collection that already exists in pypen.
Where the catalogue comes from
Fifteen specialist pen retailers publish structured product feeds. Those were swept for every brand, giving 1698 listings, 1312 distinct colourways and 1921 photographs. Model numbers are mined from the titles rather than hand-listed — Jinhao alone has eighty-odd — with a frequency floor and a versioned override file, because "#6 nib" and "0.5mm" otherwise read as model numbers.
Shop feeds are a survivorship sample: they carry what is still stocked, not what people own. So the roster is completed from Fountain Pen Companion, a collection tracker whose popularity page lists how many of its users own each model. 169 models here have live listings; the rest are roster only — an owner count and nothing else. No price, no photo, no invented colourway.
Where the specs come from
Chinese-pen listings are copy-pasted from the same factory spec sheets, so the same phrasings recur across stores. Every listing for a model is parsed for length, weight, diameter, nib size and filling system, and the modal value wins — which cancels out individual stores' typos. Implausible values (a 155 mm "diameter") are dropped rather than shown.
Where the opinions come from
Two sources, kept separate and both shown on every model page:
- Reviews read by hand — named blog and forum reviews, cited with links on each pen's page. These produce the "reviews read" number.
- Reddit sentiment — 12081 comments across 1159 threads from r/fountainpens and neighbouring subreddits, scored with a fountain-pen-specific lexicon. A general sentiment model doesn't know that "wet" is praise for a nib, that "nail" is a description rather than an insult, or that "baby bottom" is a defect. Opinions are weighted by log(1 + upvotes), so a view 200 people agreed with counts for more than one nobody saw — but not 200 times more.
Model attribution is deliberately conservative: short tokens like "A1" or "M2" only count when the brand is named in the same document or in the thread title, because r/fountainpens is full of other makers' M-somethings.
How the score is built
Where both signals exist and there is real discussion, the score is 55% reviews-read and 45% community sentiment. With little discussion the reviews dominate (75/25). With no reviews reads, community sentiment stands alone — but only when at least three documents actually expressed an opinion. Otherwise the model is shown honestly as not scored: 53 of 390 models cleared that bar.
The confidence label on each pen says which case applied. Sentiment is mapped to a 0–10 scale as 5.6 + 3.4×index, so a pen nobody has a strong view about lands just below the middle rather than at zero.
Your collection
The Mine view reads a snapshot of pypen and matches its pens onto catalogue models by brand and model number, tolerating the naming drift in both directions ("100 Centennial" against "100"). Where a pen matches nothing, it says so rather than guessing — usually a cheap model that has fallen out of circulation entirely.
Known limits
- Prices are converted to USD at August 2026 rates and move constantly.
- Colourway names are retailer-supplied, and the swatch colours are read from those names — a chip is an inference, not a photograph of the ink.
- Photos are mirrored locally, so they survive a listing being pulled — but they still show the retailer's lighting, not the pen's true colour.
- A lexicon is not a language model — sarcasm and comparisons ("better than the X") are read flatly.
- Nib QC across these brands is inconsistent enough that any individual pen may not match its score.
- Owner counts come from one tracker's userbase, which skews Western and enthusiast — useful as a relative signal, not a sales figure.
- Models whose names are ordinary words (Opus 88 "Flow", Nahvalur "Original") are deliberately left unscored: the lexicon cannot tell the pen from the sentence.
Rebuilding
tools/scrape_catalogs.py → build_catalog.py →
extract_specs.py → harvest_reddit.py →
score_models.py → build_dataset.py, then restart
the service. Each step writes to data/ and is safe to re-run.
Dataset built 2026-10-29 18:22:36 UTC.