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

aemdm

v0.6.0

Published

CLI for Adobe Dynamic Media with OpenAPI

Downloads

1,124

Readme

aemdm

aemdm is a small TypeScript CLI for Adobe Dynamic Media with OpenAPI.

It is designed as a practical operator tool for both humans and LLM-driven workflows:

  • Build Dynamic Media delivery URLs from a known asset ID.
  • Fetch asset metadata JSON.
  • Download transformed or original binaries.
  • Search activated assets with simple exact-match metadata filters.
  • Emit an LLM-oriented usage guide with --skill.
  • Persist a default bucket in a local profile config so repeated commands stay short.

Features

  • Build asset delivery URLs by asset ID.
  • Apply delivery modifiers such as format, size, width, height, quality, and max-quality.
  • Fetch asset metadata.
  • Download transformed or original binaries.
  • Search activated assets with a simple metadata filter DSL.
  • Pass through raw search JSON when you need the full API request body.
  • Emit asset IDs in pipe-friendly forms for follow-up CLI calls.

Install

Install globally from npm:

npm install -g aemdm

Or run directly with npx:

npx aemdm asset get urn:aaid:aem:1234 --bucket delivery-p123-e456.adobeaemcloud.com

Usage

URL by asset ID

npx aemdm asset get urn:aaid:aem:1234 \
  --bucket delivery-p123-e456.adobeaemcloud.com \
  --format webp \
  --size 1200x800 \
  --quality 75

Metadata

npx aemdm asset get urn:aaid:aem:1234 --metadata

If an IMS token is available, --metadata returns the full metadata document from the metadata endpoint. Without authentication, it returns a smaller public JSON object based on the asset response headers:

npx aemdm asset get urn:aaid:aem:1234 --metadata --ims-token "$AEMDM_IMS_TOKEN"

Original binary

npx aemdm asset get urn:aaid:aem:1234 \
  --original \
  --binary \
  --output ./asset.bin

Public assets can also be downloaded without passing a token:

npx aemdm asset get urn:aaid:aem:1234 --binary --output ./asset.bin

Search

npx aemdm search \
  --where x:y=z \
  --where repositoryMetadata.dc:format=image/jpeg,image/png

Search Output Modes

The default search output is a compact table for humans. For automation and piping, use one of these:

npx aemdm search --text "hero" --first-id
npx aemdm search --text "hero" --ids-only
npx aemdm search --text "hero" --json

These are useful when another command needs an asset ID:

aemdm search --where x:y=z --first-id
aemdm search --where x:y=z --ids-only | xargs -I {} aemdm asset get {}

If you want raw response automation with jq:

aemdm search --text "hero" --json | jq -r '.hits.results[0].assetId'

LLM Skill Output

Use --skill to print a concise guide that explains what the tool does, which commands to use, and how an LLM should choose between them.

The skill output now also includes explicit search guardrails for agents, including that full-text search uses --text and that aemdm search does not support a --query flag.

npx aemdm --skill

Example output areas:

  • tool purpose
  • core commands
  • asset and search examples
  • metadata filter DSL behavior
  • raw query examples
  • LLM usage guidance for when to use asset get, search, --first-url, --first-metadata, and --first-binary

Save a Default Bucket

You can save the bucket once and omit --bucket from later commands:

npx aemdm --bucket delivery-p123-e456.adobeaemcloud.com

After that, regular commands can use the saved profile bucket:

npx aemdm asset get urn:aaid:aem:1234
npx aemdm search --where x:y=z

First result helpers

npx aemdm search --text "hero banner" --first-url --format webp --width 800
npx aemdm search --text "hero banner" --first-metadata
npx aemdm search --text "hero banner" --first-binary --output ./hero.bin

Configuration

Resolution precedence is:

  1. explicit flags
  2. environment variables
  3. saved profile config

Profile config path:

  • $AEMDM_CONFIG_PATH, if set

  • otherwise $XDG_CONFIG_HOME/aemdm/config.json

  • otherwise $HOME/.config/aemdm/config.json

  • AEMDM_BUCKET

  • AEMDM_IMS_TOKEN

  • AEMDM_API_KEY (defaults to asset_search_service)

--skill Examples

These are especially useful when another tool or agent needs to understand how to call aemdm.

npx aemdm --skill
aemdm --skill

Typical LLM-oriented patterns:

aemdm --bucket delivery-p123-e456.adobeaemcloud.com
aemdm search --where x:y=z --first-id
aemdm search --text "hero" --ids-only
aemdm search --text "hero" --json
aemdm asset get urn:aaid:aem:1234 --format webp --size 1600x900 --quality 80
aemdm search --where x:y=z --first-url --format jpg --width 1200
aemdm search --raw-query @./query.json

Publishing

The repository includes a /release skill for Claude Code that automates the full release process:

/release patch   # 0.2.1 → 0.2.2
/release minor   # 0.2.1 → 0.3.0
/release major   # 0.2.1 → 1.0.0

The skill bumps the version across all files, builds, tests, commits, pushes, creates a git tag, and creates a GitHub release.

Publishing to npm is triggered automatically when a GitHub release is created. The workflow uses npm trusted publishing (OIDC) via the npm GitHub environment — no token secret is needed.

The workflow verifies that the release tag matches the version field in package.json, runs lint, build, and test, and then publishes the package with provenance.

References