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

@arach/vif

v0.1.1

Published

Declarative screen capture for macOS - agentic asset generation

Downloads

192

Readme

Vif

Declarative Screen Capture — Agentic asset generation for macOS.

Vif OG

Screen capture built for AI agents and LLMs. Declarative storyboards, CLI-native, everything is a file.

Features

  • Agent-First: Designed for LLM tool use with predictable, parseable output
  • Declarative Storyboards: Define video sequences in YAML
  • Window Discovery: Find windows by app name with precise window IDs
  • Screenshot Capture: Capture windows, regions, or fullscreen
  • Video Recording: Record screen with optional audio
  • Video Processing: Convert, optimize, and create GIFs (requires ffmpeg)
  • Take Management: Iterate on captures with automatic versioning

Installation

pnpm install @arach/vif

Or globally:

pnpm install -g @arach/vif

Quick Start

# Check system capabilities
vif check

# Screenshot fullscreen
vif shot screenshot.png

# Screenshot an app window
vif shot --app Safari safari.png

# Record video (Ctrl+C to stop)
vif record demo.mp4

# Render a storyboard
vif render storyboard.yaml

Storyboards

Define video sequences declaratively in YAML:

name: product-demo
output: demo.mp4
audio:
  file: music.mp3
  volume: 0.7
  fadeOut: 2
sequence:
  - source: intro.mp4
    duration: 3
  - source: features.mp4
    transition: crossfade

Then render:

vif render storyboard.yaml

CLI Usage

# List all visible windows
vif windows

# Screenshot fullscreen
vif shot screenshot.png

# Screenshot an app window
vif shot --app Safari safari.png

# Screenshot by window ID
vif shot --window 12345 window.png

# Record video (Ctrl+C to stop)
vif record demo.mp4

# Record for specific duration
vif record --duration 10 demo.mp4

# Convert video to GIF
vif gif demo.mp4 demo.gif --width 600 --fps 15

# Optimize video for web
vif optimize raw.mov web-ready.mp4 --width 1280

# Take management
vif take screenshot --name hero-shot
vif take list

Library Usage

import {
  getWindows,
  screenshot,
  screenshotApp,
  startRecording,
  recordVideo,
  convertVideo,
  videoToGif,
  activateApp
} from '@arach/vif';

// List windows
const windows = getWindows();
console.log(windows);

// Filter by app
const safariWindows = getWindows('Safari');

// Screenshot an app
screenshotApp('Safari', './safari.png');

// Screenshot by window ID
screenshot({
  output: './window.png',
  windowId: 12345,
  noShadow: true
});

// Record video for 10 seconds
await recordVideo({
  output: './demo.mp4',
  duration: 10,
  audio: false
});

// Start recording and stop manually
const recording = startRecording({ output: './demo.mp4' });
// ... do stuff ...
await recording.stop();

// Convert to GIF
videoToGif('./demo.mp4', './demo.gif', {
  width: 480,
  fps: 10
});

// Optimize for web
convertVideo({
  input: './raw.mov',
  output: './web.mp4',
  width: 1280,
  crf: 23,
  noAudio: true
});

Requirements

  • macOS (uses screencapture which is built-in)
  • Node.js 18+
  • Swift (for window discovery - comes with Xcode Command Line Tools)
  • ffmpeg (optional, for video processing): brew install ffmpeg

API Reference

Window Functions

  • getWindows(appName?) - Get all visible windows, optionally filtered by app
  • findWindow(appName) - Find first window matching app name
  • activateApp(appName) - Bring an app to the front

Screenshot Functions

  • screenshot(options) - Capture screenshot with full options
  • screenshotApp(appName, output, options?) - Screenshot an app window
  • screenshotFullscreen(output) - Capture entire screen
  • quickShot(prefix?) - Quick screenshot with auto filename

Video Functions

  • startRecording(options) - Start recording, returns handle to stop
  • recordVideo(options) - Record for specific duration

Processing Functions

  • convertVideo(options) - Convert/process video
  • optimizeForWeb(input, output, maxWidth?) - Optimize for web delivery
  • videoToGif(input, output, options?) - Create GIF from video
  • hasFFmpeg() - Check if ffmpeg is available

Built with Vif

  • Speakeasy - Text-to-speech library landing page

License

MIT