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 🙏

© 2025 – Pkg Stats / Ryan Hefner

piccadilly

v1.0.4

Published

Create delightfully silly animated AVIF files with random frame durations. Perfect for pre-AI video magic!

Downloads

35

Readme

Piccadilly Animator 😛😺

A delightfully silly Node.js CLI that creates random-duration animations from multiple frames using ffmpeg. Perfect for creating those pre-AI video marvels!

What It Does

Takes any number of images and creates an animated AVIF where each frame randomly plays for 0.1 to 2 seconds. The total duration is precisely controlled, making it perfect for later syncing with audio or just making the world smile!

piccadilly samples/lick-*

sample

Installation

# Install globally via npm
npm install -g piccadilly

# Or use with npx (no installation needed)
npx piccadilly -o my-silly-cat.avif samples/wink*.jpg

Requirements

  • Node.js (>= 14.0.0)
  • ffmpeg with libaom-av1 support (for AVIF encoding)

Installing ffmpeg

Piccadilly will check for ffmpeg and provide installation instructions if it's missing.

# Ubuntu/Debian
sudo apt install ffmpeg

# Fedora
sudo dnf install ffmpeg

# Arch
sudo pacman -S ffmpeg

# macOS
brew install ffmpeg

Quick Start

# Basic usage with default files (creates 15-second animation)
piccadilly

# Use multiple images with glob patterns
piccadilly -o my-silly-cat.avif samples/wink*.jpg

# Specify individual files
piccadilly frame1.png frame2.png frame3.png

# Custom duration and max frame time
piccadilly --duration 30 --max 3 image1.jpg image2.jpg image3.jpg

# All together now!
piccadilly -d 20 -m 2.5 -o cat-derp.avif pics/*.png

Usage

piccadilly [options] <files...>

Options:
  -d, --duration <seconds>   Total animation duration (default: 15)
  -m, --max <seconds>        Max duration per frame (default: 2)
  -o, --output <file>        Output filename (default: kitty-animation.avif)
  -h, --help                 Show this help

Arguments:
  <files...>                 Input image files (defaults to a.jpg b.jpg)

Examples:
  piccadilly -o my-silly-cat.avif samples/wink*.jpg
  piccadilly --duration 30 --max 3 frame1.png frame2.png frame3.png
  piccadilly image1.jpg image2.jpg

How It Works

  1. Random Sequence Generation: Creates a sequence of alternating frames with random durations that precisely total your target duration
  2. ffmpeg Concat: Uses ffmpeg's concat demuxer to stitch frames together with exact timing
  3. AVIF Output: Encodes as animated AVIF (like a modern, efficient GIF)

The Beauty of Pre-AI

You're absolutely right about the charm of pixel art! There's something magical about:

  • Constraints breeding creativity: Limited tools = infinite ingenuity
  • Intentional design: Every pixel placed with purpose
  • Timeless appeal: Rick Dangerous, Toki, Street Fighter - still beautiful!

This script embraces that philosophy: simple tools, creative use, memorable results.

Why AVIF?

  • Tiny file sizes: 50-60KB for 15 seconds
  • Modern browsers: Wide support
  • Animated: Works like GIF but way better compression
  • Quality: Better than GIF at any file size

Converting to Other Formats

To MP4 (for audio sync)

ffmpeg -i kitty-animation.avif -c:v libx264 -pix_fmt yuv420p kitty.mp4

To animated WebP

ffmpeg -i kitty-animation.avif -c:v libwebp -loop 0 kitty.webp

To GIF (if you must!)

ffmpeg -i kitty-animation.avif -vf "fps=10,scale=400:-1:flags=lanczos" \
  -loop 0 kitty.gif

Adding Audio Later

# Add audio track (must match duration)
ffmpeg -i kitty-animation.avif -i soundtrack.mp3 -c:v copy -c:a aac \
  -shortest kitty-with-sound.mp4

Tips

  1. Inline AVIF: Modern browsers support it directly
<img src="kitty-animation.avif" alt="Silly kitty">
  1. With Fallback:
<picture>
  <source srcset="kitty-animation.avif" type="image/avif">
  <source srcset="kitty-animation.webp" type="image/webp">
  <img src="kitty-animation.gif" alt="Silly kitty">
</picture>
  1. Lazy Loading:
<img src="kitty-animation.avif" loading="lazy" alt="Silly kitty">

Philosophy

Before the world of AI video generation, we have these wonderful, simple tools. Like the pixel art masters of the C64 and Amiga era, we can create memorable, delightful moments with constraints and creativity.

Sometimes the tongue sticking out for 0.258 seconds followed by normal face for 1.624 seconds creates a funnier, more memorable moment than any AI could predict!