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

coffesld

v1.0.0

Published

Spoof Animation & Audio Extraction Library - 3D animations (X/Y/Z), audio extraction (WAV, MP3, etc), web viewer & CLI tools

Readme

⬡ CoffeSLD

Spoof Animation & Audio Extraction Library
by Infinityftee | Website: https://coffesld.infinityfreeapp.com


Features

  • 🎭 Spoof Animation — 3D animations with X, Y, Z axis control
  • 🌐 3D Engine — Three.js powered, full rotation/scale/position
  • 🎵 Audio Extraction — Extract WAV, MP3, FLAC, OGG, AAC, OPUS from ANY file
  • 💻 CLI Toolsspoofpublish & spoofeaudio commands
  • 🖥️ Web Viewer — Live 3D animation viewer (hosted on InfinityFree)
  • 📦 JSON Scripts — Save/load animations as portable .coffesld.json files

Installation

npm install coffesld
# or globally:
npm install -g coffesld

Requirements:

  • Node.js >= 16
  • ffmpeg (for audio extraction): sudo apt install ffmpeg / brew install ffmpeg

CLI Commands

spoofpublish — Animation Publisher

# List all presets
spoofpublish --list

# Run a preset animation
spoofpublish --preset spin
spoofpublish --preset bounce --duration 3000
spoofpublish --preset orbit --loop
spoofpublish --preset spoof --intensity 2.5

# 3D axis control
spoofpublish --preset float --x 50 --y -20 --z 100
spoofpublish --preset wave --rotX 30 --rotY 45 --rotZ 0

# Save animation script to file
spoofpublish --preset spin --output my_spin.json

# Create new animation script
spoofpublish --create myAnimation

# Load & run from JSON file
spoofpublish --file my_spin.coffesld.json

Available Presets: | Preset | Description | |--------|-------------| | spin | Rotate 360° on Y axis | | bounce | Bounce up and down | | float | Gentle floating motion | | shake | Side-to-side shake | | explode | Scale up and fade | | orbit | Orbit around center (X+Z axis) | | wave | Wave motion on Y+X | | flip3d | Full 3D flip | | spoof | Randomized noise animation |


spoofeaudio — Audio Extractor

# Basic extraction (to WAV)
spoofeaudio input.mp4

# Specify output format
spoofeaudio input.mp4 --format mp3
spoofeaudio input.mkv --format flac
spoofeaudio input.avi --format ogg
spoofeaudio input.mov --format aac
spoofeaudio input.webm --format opus

# Custom settings
spoofeaudio input.mp4 --format mp3 --bitrate 320k --sample-rate 48000
spoofeaudio input.mp4 --channels 1  # mono

# Output directory
spoofeaudio input.mp4 --output ./my_audio

# Trim/clip audio
spoofeaudio input.mp4 --start 10 --end 60

# Normalize audio levels
spoofeaudio input.mp4 --normalize

# Adjust volume
spoofeaudio input.mp4 --volume 1.5

# Get file info only
spoofeaudio input.mp4 --info

# Split audio at timestamps (seconds)
spoofeaudio input.mp4 --split 30,60,90,120

# Batch extract entire folder
spoofeaudio --batch ./videos --format mp3
spoofeaudio --batch ./music --format flac --normalize

# List supported formats
spoofeaudio --formats

Supported Input Formats:

  • Audio: wav, mp3, flac, ogg, m4a, aac, opus, wma, aiff
  • Video: mp4, mkv, avi, mov, webm, wmv, flv, ts

Supported Output Formats: | Format | Type | Description | |--------|------|-------------| | wav | Lossless | Best quality, large files | | mp3 | Lossy | Universal compatibility | | flac | Lossless | High quality, compressed | | ogg | Lossy | Open-source standard | | aac | Lossy | Mobile/Apple standard | | opus | Lossy | Best quality at low bitrate | | aiff | Lossless | Mac/Pro audio |


coffesld — Main CLI

coffesld info       # Package info
coffesld animate    # Animation commands
coffesld audio      # Audio commands
coffesld web        # Start web viewer (port 3000)
coffesld web 8080   # Custom port

JavaScript API

const coffesld = require('coffesld');
const { SpoofAnimation, AudioExtractor } = coffesld;

// ── Animation ──────────────────────────────────────────

// Create animation
const anim = new SpoofAnimation({
  name: 'myAnim',
  duration: 2000,
  fps: 60,
  loop: true,
  mode: '3d'
});

// Axis control
anim.setX(100).setY(-50).setZ(200);
anim.setRotation(30, 45, 0);   // rotX, rotY, rotZ
anim.setScale(1.5, 1.5, 1.5);

// Load preset
anim.loadPreset('spin');        // or 'bounce', 'float', etc.

// Custom keyframes
anim.addKeyframe(0, { x: 0, y: 0, rotY: 0 }, 'easeOut')
    .addKeyframe(1000, { x: 100, y: -50, rotY: 180, z: 30 }, 'easeInOut')
    .addKeyframe(2000, { x: 0, y: 0, rotY: 360, z: 0 }, 'bounce');

// Events
anim.on('play', () => console.log('Playing!'));
anim.on('frame', (transform) => {
  console.log(`X:${transform.x} Y:${transform.y} Z:${transform.z}`);
});
anim.on('complete', () => console.log('Done!'));

// Playback
anim.play();
anim.pause();
anim.stop();

// Export/Import
const json = anim.toJSON();
const loaded = SpoofAnimation.fromJSON(json);

// ── Audio Extraction ───────────────────────────────────

const extractor = new AudioExtractor();

// Extract audio
const result = await extractor.extract('video.mp4', {
  format: 'wav',         // wav | mp3 | flac | ogg | aac | opus
  output: './audio',     // output directory
  bitrate: '320k',
  sampleRate: 44100,
  channels: 2,           // 1=mono, 2=stereo
  startTime: 10,         // start at 10s
  endTime: 60,           // end at 60s
  normalize: true,       // normalize levels
  volume: 1.2            // 20% louder
});

console.log(result.output); // path to extracted file

// Batch extract
const results = await extractor.extractBatch([
  'video1.mp4', 'video2.mkv', 'audio.mp3'
], { format: 'flac', output: './extracted' });

// Get audio info
const info = await extractor.getInfo('audio.mp3');
console.log(info.duration, info.bitrate, info.sampleRate);

// Split audio
await extractor.splitAudio('long.mp3', [30, 60, 90], { format: 'wav' });

Web Viewer (InfinityFree)

The web viewer is hosted at: https://coffesld.infinityfreeapp.com

Local Development

# Start local server
coffesld web
# Open http://localhost:3000

Deploy to InfinityFree

  1. Create free account at https://infinityfree.com
  2. Create new hosting → note your domain (e.g. coffesld.infinityfreeapp.com)
  3. Upload contents of /public/ to public_html/ via FTP or File Manager
  4. Done! Visit your InfinityFree URL

InfinityFree FTP settings:

  • Host: ftpupload.net
  • Upload: public/index.html, public/.htaccess, public/index.php

Animation Script Format (.coffesld.json)

{
  "name": "myAnimation",
  "fps": 60,
  "duration": 2000,
  "loop": true,
  "mode": "3d",
  "intensity": 1.0,
  "keyframes": [
    {
      "time": 0,
      "props": { "x": 0, "y": 0, "z": 0, "rotY": 0 },
      "easing": "easeInOut"
    },
    {
      "time": 1000,
      "props": { "x": 100, "y": -50, "z": 30, "rotY": 180 },
      "easing": "easeInOut"
    },
    {
      "time": 2000,
      "props": { "x": 0, "y": 0, "z": 0, "rotY": 360 },
      "easing": "bounce"
    }
  ]
}

Easing options: linear, easeIn, easeOut, easeInOut, bounce, elastic

Props: x, y, z, rotX, rotY, rotZ, scaleX, scaleY, scaleZ, opacity


License

MIT © Infinityftee