{"adoption": {"forks": 352, "observed_at": "2026-08-28T04:09:01.285636+00:00", "stars": 4841}, "canonical_url": "https://ross.abutalabs.com/products/noteshrink", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Convert scans of handwritten notes to beautiful, compact PDFs", "domain": ["image-processing", "pdf", "files", "education", "developer-tools"], "enriched": true, "function": ["image-processing", "pdf", "compression", "cli"], "health_score": 20, "homepage": "https://mzucker.github.io/2016/09/20/noteshrink.html", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["mzucker/noteshrink"], "name": "mzucker/noteshrink", "platform": ["python", "cli", "windows", "cross-platform"], "pushed_at": "2024-03-20T22:27:57+00:00", "repo": "mzucker/noteshrink", "stars": 4841, "tags": ["handwritten-notes", "scan-cleanup", "document-scanning", "color-quantization", "image-compression", "pdf-generation", "note-taking", "command-line", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["compress scans of handwritten notes into small pdfs", "clean up messy backgrounds on scanned notebook pages", "reduce the file size of scanned documents before sharing", "convert photos of whiteboard or lecture notes into readable pdfs", "remove gray or colored scanner background from page images", "batch process scanned page images into one pdf"], "what_it_is": "A Python command-line script that cleans up scans and photos of handwritten notes by separating background from ink, quantizing colors, and dramatically reducing file size before bundling pages into a compact PDF. It relies on NumPy, SciPy, Pillow, and ImageMagick and is invoked as a simple batch command over input images.", "when_to_avoid": ["You need OCR or searchable/selectable text in the output PDF - it only embeds cleaned images", "You prefer a GUI - it is a command-line script with many tunable numeric flags", "Your source material is dense printed or photographic content, where its palette-quantization approach is tuned for handwriting and may degrade detail", "You expect active maintenance or modern Python packaging - the project is largely dormant since its 2016 debut"], "when_to_choose": ["You have scans or photos of handwritten notes with off-white backgrounds you want cleaned, contrast-enhanced, and shrunk", "You want a lightweight scriptable CLI to batch-convert scanned images into small PDFs for posting online", "File size matters more than searchable text, e.g. sharing lecture notes with a class"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/noteshrink", "repo": "mzucker/noteshrink", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.285636+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:18:28.062071+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "715ee5d737f4531349fe6eadad356c6b28921b3dcb40e85a343e1cc4aa28d11f", "fetched_at": "2026-08-28T04:09:01.285636+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mzucker/noteshrink"}, {"content_hash": "414301a4113bc1d713db530e319ea5c4affff94c9ed230f9dc524ba7c22e730a", "fetched_at": "2026-08-29T09:01:11.069576+00:00", "kind": "homepage", "missing": false, "url": "https://mzucker.github.io/2016/09/20/noteshrink.html"}, {"content_hash": "c2b8651c324bc17311fa07c37cc5af9950caab153426bb06f2d98d723b40c302", "fetched_at": "2026-08-29T09:01:11.079233+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/noteshrink/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3648, "days_push": 896, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}