{"slug": "pillow", "name": "Pillow", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 5, "warners": 0, "score": 3.702, "rising": -1.31, "first": "2025-12-23", "latest": "2026-09-15", "why": "Django, Pillow, Requests, BeautifulSoup, and pretty much every other library I use regularly", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 1, "compare": 0, "warn": 0}, "spark": [0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "Django, Pillow, Requests, BeautifulSoup, and pretty much every other library I use regularly", "kind": "", "icon": true, "domain": null, "github_repo": null, "official_url": "https://python-pillow.org", "pricing": "", "aliases": ["Pillow"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 757862112, "item_id": 47366382, "url": "https://news.ycombinator.com/item?id=47366382", "by": "dheera", "date": "2026-03-13", "version": null, "stance": "recommend", "quote": "Python's PIL package can read it just fine.", "excerpt": "Yes, Seek RevealPro gives raw temperature data in radiometric tiff files. They are tiff files with temperatures in Celsius as float32 values in the second page of each .tiff. GUI image editors can have trouble dealing with these multi-page float tiffs but Python's PIL package can read it just fine. Here's a basic script that converts them to greyscale uint8 with a fixed linear mapping, making them compatible with GUI", "context": "", "use_case": "Read TIFF images", "switched_from": "", "story": "Full Spectrum and Infrared Photography"}, {"id": 757844881, "item_id": 47365305, "url": "https://news.ycombinator.com/item?id=47365305", "by": "dgroshev", "date": "2026-03-13", "version": null, "stance": "recommend", "quote": "which are both mature and widely used", "excerpt": "Author here: the library just accepts RGB8 bitmaps, probably coming either from Rust's image crate [1] or Python's Pillow [2], which are both mature and widely used. Dealing with codecs is way out of scope. As for loading into memory at once: I suppose I could integrate with something like libvips and stream strips out of the decoded image without holding the entire bitmap, but that'd require substantially more glue ", "context": "", "use_case": "", "switched_from": "", "story": "Okmain: How to pick an OK main colour of an image"}, {"id": 757721601, "item_id": 47357600, "url": "https://news.ycombinator.com/item?id=47357600", "by": "mncharity", "date": "2026-03-12", "version": null, "stance": "recommend", "quote": "Numpy/pillow can unpack the .mat files into normal images", "excerpt": "> I would love to see e.g. a butterfly image with a slider that I could drag to choose the wavelength shown!! Here[1] are some 31-band hyperspectral images of butterflies. Numpy/pillow can unpack the .mat files into normal images. Then perhaps vibecode a slider, or just browse the band images? [1] http://www.ok.sc.e.titech.ac.jp/res/MSI/MSIdata31.html (includes 8 butterfly 31-band hyperspectral visible-light images).", "context": "", "use_case": "image file conversion", "switched_from": "", "story": "Full Spectrum and Infrared Photography"}, {"id": 741947345, "item_id": 46371709, "url": "https://news.ycombinator.com/item?id=46371709", "by": "kerkeslager", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "Django, Pillow, Requests, BeautifulSoup, and pretty much every other library I use regularly", "excerpt": "Well, I'll point out one thing: Your definition of \"core libraries\" is likely a lot broader than mine. I'm old, and I remember back in the day when Perl developers started learning the hard way that CPAN isn't the Perl standard library. JavaScript's culture has embraced pulling in libraries for every single little thing, which has resulted in stuff like the left pad debacle, but that very public failing is just the t", "context": "consults on cleaning up codebases", "use_case": "", "switched_from": "", "story": "Deprecate like you mean it"}]}], "caveats": [], "who": [{"by": "kerkeslager", "context": "consults on cleaning up codebases", "url": "https://news.ycombinator.com/item?id=46371709", "date": "2025-12-23"}], "tags": [], "use_cases": ["read tiff images", "image file conversion"], "compared": [{"slug": "numpy", "name": "NumPy", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47298448", "title": "Full Spectrum and Infrared Photography", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49711544", "title": "Show HN: An e-ink frame that hears birds and draws them as 1800s illustrations", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47309397", "title": "Okmain: How to pick an OK main colour of an image", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46232898", "title": "Deprecate like you mean it", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 1}, "2026-01": {}, "2026-02": {}, "2026-03": {"recommend": 3}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {"neutral": 1}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 795445281, "item_id": 49715330, "url": "https://news.ycombinator.com/item?id=49715330", "by": "arnemunthekaas", "date": "2026-09-15", "version": null, "stance": "neutral", "quote": "The collage is Pillow and numpy", "excerpt": "Author here: Fair, i could've been more explicit in my writing. Concretely: Every bird is a cutout from a real scanned 1800s plate (Gould, the von Wright brothers, Dresser...). The manifest (https://github.com/arnegiacomo/fugleramme/blob/main/assets/artwork/classic/manifest.json) links to each source, so you can compare them to the original scans. No bird has been prompt/diffusion generated, although I did use diffus", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: An e-ink frame that hears birds and draws them as 1800s illustrations"}, {"id": 757862112, "item_id": 47366382, "url": "https://news.ycombinator.com/item?id=47366382", "by": "dheera", "date": "2026-03-13", "version": null, "stance": "recommend", "quote": "Python's PIL package can read it just fine.", "excerpt": "Yes, Seek RevealPro gives raw temperature data in radiometric tiff files. They are tiff files with temperatures in Celsius as float32 values in the second page of each .tiff. GUI image editors can have trouble dealing with these multi-page float tiffs but Python's PIL package can read it just fine. Here's a basic script that converts them to greyscale uint8 with a fixed linear mapping, making them compatible with GUI", "context": "", "use_case": "Read TIFF images", "switched_from": "", "story": "Full Spectrum and Infrared Photography"}, {"id": 757844881, "item_id": 47365305, "url": "https://news.ycombinator.com/item?id=47365305", "by": "dgroshev", "date": "2026-03-13", "version": null, "stance": "recommend", "quote": "which are both mature and widely used", "excerpt": "Author here: the library just accepts RGB8 bitmaps, probably coming either from Rust's image crate [1] or Python's Pillow [2], which are both mature and widely used. Dealing with codecs is way out of scope. As for loading into memory at once: I suppose I could integrate with something like libvips and stream strips out of the decoded image without holding the entire bitmap, but that'd require substantially more glue ", "context": "", "use_case": "", "switched_from": "", "story": "Okmain: How to pick an OK main colour of an image"}, {"id": 757721601, "item_id": 47357600, "url": "https://news.ycombinator.com/item?id=47357600", "by": "mncharity", "date": "2026-03-12", "version": null, "stance": "recommend", "quote": "Numpy/pillow can unpack the .mat files into normal images", "excerpt": "> I would love to see e.g. a butterfly image with a slider that I could drag to choose the wavelength shown!! Here[1] are some 31-band hyperspectral images of butterflies. Numpy/pillow can unpack the .mat files into normal images. Then perhaps vibecode a slider, or just browse the band images? [1] http://www.ok.sc.e.titech.ac.jp/res/MSI/MSIdata31.html (includes 8 butterfly 31-band hyperspectral visible-light images).", "context": "", "use_case": "image file conversion", "switched_from": "", "story": "Full Spectrum and Infrared Photography"}, {"id": 741947345, "item_id": 46371709, "url": "https://news.ycombinator.com/item?id=46371709", "by": "kerkeslager", "date": "2025-12-23", "version": null, "stance": "recommend", "quote": "Django, Pillow, Requests, BeautifulSoup, and pretty much every other library I use regularly", "excerpt": "Well, I'll point out one thing: Your definition of \"core libraries\" is likely a lot broader than mine. I'm old, and I remember back in the day when Perl developers started learning the hard way that CPAN isn't the Perl standard library. JavaScript's culture has embraced pulling in libraries for every single little thing, which has resulted in stuff like the left pad debacle, but that very public failing is just the t", "context": "consults on cleaning up codebases", "use_case": "", "switched_from": "", "story": "Deprecate like you mean it"}]}