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

xenocept-plugin-aeor-eye-forge

v0.2.0

Published

VIP-only Xenocept eye plugin for designing custom iris textures with stackable procedural and image layers, saved-eye presets, blink controls, and specular customization.

Readme

xenocept-plugin-aeor-eye-forge

A stackable filter-pipeline iris-texture generator for the Xenocept eye. This is a VIP-only plugin for Xenocept users who want advanced eye customization, saved eye presets, image layers, and procedural iris generation.

What it does

Implements the eye-role plugin contract (role='eye', getEyeTexture(), getEyeBlinkConfig()) and lets you build your eye from a stack of filter layers — each with its own params + blend mode — composited together into a single 512×512 texture for the WebGL ray-traced <xenocept-eye-3d> component.

Filter types

| Filter | What it does | |--------------------|-----------------------------------------------------------------------| | Image | Uploaded image layer stored in the eye config and rendered into the pipeline | | Spots | N randomly-placed circles, configurable size range + color + seed | | Voronoi | N-site Voronoi diagram; per-cell color from a 2-color palette; optional cell-edge stroke | | Radial blur | Stretches the canvas outward from a center point (adjustment filter) | | L-tree | L-system fractal turtle-graphics (4 presets: branching, lightning, plant, snowflake) | | Pupil | Circle / ellipse / rectangle shape at a chosen position + rotation | | Glow / blur | Gaussian blur + hue/saturation/lightness shift on the underlay (adjustment) | | HSL | Hue / saturation / lightness adjustment on the underlay (adjustment) |

Blend modes

Every layer (and every group) picks a globalCompositeOperation from Canvas2D's native list: source-over, multiply, screen, overlay, darken, lighten, lighter (additive), difference, exclusion, color-dodge, color-burn, hard-light, soft-light, hue, saturation, color, luminosity.

Notes on the user-facing "subtract / divide / invert" concepts:

  • Add is lighter
  • Subtract is closest to difference (with a white underlayer it's invert)
  • Divide isn't native; achievable via difference + a properly-tinted layer

Layer groups

Layers can be grouped. Each group is its own sub-pipeline:

  1. The group's children render onto an isolated scratch canvas, in order
  2. Adjustment filters (blur, glow, HSL) inside the group operate on the group's own canvas, not the parent
  3. When the group is finished, the whole scratch canvas composites onto the parent as a single layer (with the group's blend mode + alpha)

The starter pipeline demonstrates this with a "Pupil + glow" group:

  1. Draw a fat pupil
  2. Glow-filter it (blur + lighten)
  3. Stamp a smaller, sharp pupil on top
  4. Composite the whole group onto the iris below as a single layer

Net effect: a black pupil with a soft purple bloom around it, contained inside the group — the blur doesn't smear the iris behind.

Architecture

  • index.mjs — single-file plugin. Registers EyeForgePlugin with static role = 'eye'. Implements getEyeTexture() and getEyeBlinkConfig(). renderConfigUI() builds the layer-list UI.
  • Each filter is one entry in the FILTERS registry with defaultParams(), a schema (drives the param UI), and a render(ctx, params, prng, size) function.
  • The renderPipeline(canvas, layers, size) function is recursive: a group node recurses into its children. A seeded mulberry32 PRNG per layer keeps generation deterministic across re-renders of the same config.
  • Config is stored as a single JSON blob in xenocept's per-plugin config store (/api/v1/plugins/npm/.../config). The Configure modal uses one hidden <input name="config_json"> to channel the whole nested structure through the host's form-collector save path.

Install

Install from Xenocept's plugin browser by searching for xenocept-plugin-aeor-eye-forge. The plugin can be installed by any Xenocept user, but its configuration UI is available only to VIP users.

Install (dev)

# Requires xenocept running with:
#   xenocept --dev-mode --unsafe-allow-unsigned-plugins

./dev-install.sh

Then in xenocept:

  1. Settings → Plugins → Eye Forge → Configure
  2. Build your composition (the preview canvas updates live)
  3. Save
  4. Hold "Hold to use as your eye" — page reloads, the brand eye is now yours

License

Proprietary. AEOR Development LLC, all rights reserved. Not for redistribution outside authorized Xenocept plugin channels.