npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

random-img-api

v0.1.2

Published

Serve random images from local directory

Downloads

25

Readme

random-img-api

A small HTTP API that serves a random local image from a category directory. Built with Node.js, TypeScript, and Hono.

Features

  • Serves a random image from images/<category>
  • Validates category names to reduce path traversal risk
  • Verifies files are actual supported images before returning them
  • Supports CLI flags and environment variables for runtime config
  • Emits simple console logs for startup, requests, and shutdown

Requirements

  • Node.js 22+
  • pnpm 10+ recommended

Installation

pnpm install

Directory Layout

Images are loaded from the configured image root directory. By default that is ./images.

Example:

images/
  cats/
    cat-1.jpg
    cat-2.png
  dogs/
    dog-1.webp

Development

Start the server directly from TypeScript:

pnpm dev

With custom options:

pnpm dev -- --host 0.0.0.0 --port 8080 --images-dir ./images

Build

pnpm build

After building, run the compiled binary:

node dist/index.mjs

API

GET /random-image/:category

Returns one random image from the matching category directory.

Example:

curl -o random.jpg http://127.0.0.1:3000/random-image/cats

Possible responses:

  • 200 with image content
  • 400 Invalid category
  • 404 Category not found
  • 404 No images available
  • 404 No valid images available
  • 500 Internal server error

CLI Options

--host <host>         Host to bind to
--port <port>         Port to listen on
--images-dir <path>   Root directory containing image categories
--help, -h            Show help

Defaults:

  • host: 127.0.0.1
  • port: 3000
  • images-dir: <project>/images

Environment Variables

CLI flags can also be provided through environment variables:

  • HOST
  • PORT
  • IMAGES_DIR

CLI flags take precedence over environment variables.

Security Notes

  • Category names only allow letters, numbers, _, and -
  • Category paths are resolved and checked to stay inside the configured image root
  • Only regular files are considered
  • Returned responses include X-Content-Type-Options: nosniff
  • Images are inspected before being served instead of trusting file extensions alone

License

MIT