Socket
Book a DemoInstallSign in
Socket

@getexcited/chompers

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@getexcited/chompers

High-performance native Node.js addon for Windows screen recording and window enumeration

1.1.2
latest
Source
npmnpm
Version published
Maintainers
1
Created
Source

@getexcited/chompers

High-performance native Node.js addon for Windows screen recording and window enumeration, built with Rust and napi-rs.

Features

🎥 Screen Recording

  • High-performance recording using Windows Desktop Duplication API
  • No yellow border during capture (unlike WGC API)
  • Hardware-accelerated encoding (H.264, HEVC)
  • Audio capture from desktop and microphone
  • Replay buffer functionality (similar to ShadowPlay)
  • Process-specific recording target specific applications
  • Configurable quality settings and output formats

🪟 Window Management

  • Window enumeration with detailed metadata
  • Multi-monitor support with monitor information
  • Process information including executable paths and arguments
  • Focus detection and window state tracking
  • Game detection capabilities

Installation

npm install @getexcited/chompers
# or
yarn add @getexcited/chompers

Quick Start

Screen Recording

import {
  Recorder,
  RecorderConfig,
  AudioSource,
  VideoEncoderType,
} from "@getexcited/chompers";

// Basic recording configuration
const config: RecorderConfig = {
  fpsNumerator: 30,
  fpsDenominator: 1,
  outputWidth: 1920,
  outputHeight: 1080,
  captureAudio: true,
  captureMicrophone: false,
  audioSource: AudioSource.Desktop,
  videoEncoderType: VideoEncoderType.H264,
  captureCursor: true,
  outputPath: "recording.mp4",
  debugMode: false,
  enableReplayBuffer: false,
};

// Create recorder and target a specific process
const recorder = new Recorder(config).withProcessName("notepad");

// Start recording
recorder.startRecording();

// Record for 10 seconds
setTimeout(() => {
  recorder.stopRecording();
  console.log("Recording completed!");
}, 10000);

Replay Buffer

import {
  Recorder,
  RecorderConfigBuilder,
  AudioSource,
} from "@getexcited/chompers";

// Create recorder with replay buffer
const config = new RecorderConfigBuilder()
  .fps(30, 1)
  .outputDimensions(1920, 1080)
  .captureAudio(true)
  .audioSource(AudioSource.Desktop)
  .enableReplayBuffer(true)
  .replayBufferSeconds(30) // Keep last 30 seconds
  .outputPath("main_recording.mp4")
  .build();

const recorder = new Recorder(config).withProcessName("game.exe");

// Start recording with buffer
recorder.startRecording();

// Save replay when something interesting happens
recorder.saveReplay("highlight.mp4");

// Continue recording or stop
recorder.stopRecording();

Window Enumeration

import { getAllWindows } from "@getexcited/chompers";

// Get all windows with detailed information
const windows = getAllWindows();

windows.forEach((window) => {
  console.log(`Title: ${window.title}`);
  console.log(`Process: ${window.executable}`);
  console.log(`PID: ${window.pid}`);
  console.log(`Focused: ${window.focused}`);
  console.log(
    `Monitor: ${window.monitorDimensions.width}x${window.monitorDimensions.height}`
  );
  console.log("---");
});

API Reference

Recording Classes

Recorder

Main recording class for capturing screen content.

class Recorder {
  constructor(config: RecorderConfig);
  withProcessName(processName: string): Recorder;
  startRecording(): void;
  stopRecording(): void;
  saveReplay(path: string): void;
}

RecorderConfigBuilder

Fluent builder for creating recorder configurations.

class RecorderConfigBuilder {
  fps(numerator: number, denominator: number): this;
  inputDimensions(width: number, height: number): this;
  outputDimensions(width: number, height: number): this;
  captureAudio(capture: boolean): this;
  captureMicrophone(capture: boolean): this;
  audioSource(source: AudioSource): this;
  microphoneVolume(volume: number): this;
  systemVolume(volume: number): this;
  microphoneDevice(deviceName?: string): this;
  videoEncoder(encoderType: VideoEncoderType): this;
  videoEncoderName(name: string): this;
  captureCursor(capture: boolean): this;
  outputPath(path: string): this;
  debugMode(debug: boolean): this;
  enableReplayBuffer(enable: boolean): this;
  replayBufferSeconds(seconds: number): this;
  build(): RecorderConfig;
}

Configuration Types

RecorderConfig

interface RecorderConfig {
  fpsNumerator: number; // Frame rate numerator
  fpsDenominator: number; // Frame rate denominator
  inputWidth?: number; // Input resolution width (auto-detected if not set)
  inputHeight?: number; // Input resolution height (auto-detected if not set)
  outputWidth: number; // Output resolution width
  outputHeight: number; // Output resolution height
  captureAudio: boolean; // Enable system audio capture
  captureMicrophone: boolean; // Enable microphone capture
  audioSource: AudioSource; // Desktop or ActiveWindow
  microphoneVolume?: number; // Microphone volume (0.0-1.0)
  systemVolume?: number; // System audio volume (0.0-1.0)
  microphoneDevice?: string; // Specific microphone device name
  videoEncoderType?: VideoEncoderType; // H264 or HEVC
  videoEncoderName?: string; // Specific encoder name
  captureCursor: boolean; // Include cursor in recording
  outputPath: string; // Output file path
  debugMode: boolean; // Enable debug logging
  enableReplayBuffer: boolean; // Enable replay buffer feature
  replayBufferSeconds?: number; // Replay buffer duration in seconds
}

WindowInfo

interface WindowInfo {
  className: string; // Window class name
  executable: string; // Executable name
  title: string; // Window title
  pid: number; // Process ID
  productName?: string; // Product name from executable
  hwnd: number; // Window handle
  fullExe: string; // Full executable path
  monitorDimensions: MonitorDimensions; // Monitor information
  intersectsMultiple: boolean; // Spans multiple monitors
  focused: boolean; // Currently focused window
  arguments: Array<string>; // Process arguments
}

Enums

AudioSource

enum AudioSource {
  Desktop = "Desktop", // Capture all system audio
  ActiveWindow = "ActiveWindow", // Capture audio from target window only
}

VideoEncoderType

enum VideoEncoderType {
  H264 = "H264", // H.264/AVC encoding
  HEVC = "HEVC", // H.265/HEVC encoding
}

Utility Functions

Audio Device Management

// Enumerate available audio input devices
function enumerateAudioInputDevices(): AudioInputDevice[];

// Get preferred video encoder by type
function getPreferredVideoEncoderByType(
  encoderType: VideoEncoderType
): VideoEncoder | null;

// Enumerate available video encoders
function enumerateVideoEncoders(): VideoEncoder[];

Window Management

// Get all windows with detailed information
function getAllWindows(): WindowInfo[];

Examples

The examples/ directory contains comprehensive TypeScript examples:

  • basic_recording.ts - Basic screen recording setup
  • replay_buffer.ts - Replay buffer functionality
  • select_audio_device.ts - Audio device enumeration and selection
  • select_video_encoder.ts - Video encoder enumeration and selection

Run examples with:

# Show available examples
yarn examples

# Run specific examples
yarn example:basic
yarn example:replay
yarn example:audio
yarn example:encoder

System Requirements

  • Operating System: Windows 10/11 (x64)
  • Node.js: 16.0.0 or higher
  • Hardware: GPU with hardware encoding support (recommended)
  • Drivers: Up-to-date GPU drivers for optimal performance

Performance Considerations

Optimal Settings

  • Resolution: 1920x1080 or lower for best performance
  • Frame Rate: 30 FPS provides good quality/performance balance
  • Encoder: H.264 for compatibility, HEVC for better compression
  • Audio: Disable microphone if not needed

Hardware Acceleration

The library automatically uses hardware-accelerated encoding when available:

  • NVIDIA: NVENC (H.264/HEVC)
  • AMD: VCE (H.264/HEVC)
  • Intel: Quick Sync Video (H.264/HEVC)

Troubleshooting

Common Issues

  • Recording fails to start

    • Ensure target process exists
    • Check output path permissions
    • Verify sufficient disk space
  • No audio captured

    • Check Windows audio permissions
    • Verify target application produces audio
    • Try different audio sources
  • Poor performance

    • Lower output resolution
    • Reduce frame rate
    • Update GPU drivers
    • Close unnecessary applications
  • No video encoders found

    • Update GPU drivers
    • Install Windows Media Feature Pack
    • Try different encoder types

Debug Mode

Enable debug logging for troubleshooting:

const config: RecorderConfig = {
  // ... other options
  debugMode: true,
};

Building from Source

# Clone the repository
git clone https://github.com/GetExcitedApp/chompers.git
cd chompers

# Install dependencies
yarn install

# Build the native addon
yarn build

# Run tests
yarn test

Contributing

Contributions are welcome! Please read our contributing guidelines and submit pull requests to the main repository.

License

This project is licensed under the GPL-3.0-only License. See the LICENSE file for details.

Acknowledgments

  • Built with napi-rs for Node.js native addon development
  • Uses windows-record for core recording functionality
  • Powered by Windows Desktop Duplication API for efficient screen capture

Note: This library is Windows-only and requires Windows 10 or later. For cross-platform solutions, consider other recording libraries.

Keywords

windows

FAQs

Package last updated on 28 May 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.