JavaScript / Node.js

Take screenshots using JavaScript with our official SDK or plain HTTP requests.

Installation

npm install lambdashot --save

Quick Start

import { LambdaShot } from 'lambdashot';
import fs from 'fs';

const client = new LambdaShot('YOUR_ACCESS_KEY', 'YOUR_SECRET_KEY');

// Take a screenshot
const screenshot = await client.take({
  url: 'https://example.com',
  format: 'png',
  viewport_width: 1920,
  viewport_height: 1080,
});

// Save to file
fs.writeFileSync('screenshot.png', Buffer.from(await screenshot.arrayBuffer()));

Generate URL

Generate a signed URL without fetching the screenshot:

const url = client.generateSignedUrl({
  url: 'https://example.com',
  format: 'png',
  block_ads: true,
});

console.log(url);
// https://api.lambdashot.com/take?url=...&signature=...

Options

const screenshot = await client.take({
  url: 'https://example.com',

  // Output
  format: 'png',              // png, jpeg, webp, pdf
  image_quality: 90,          // 0-100

  // Viewport
  viewport_width: 1920,
  viewport_height: 1080,
  viewport_device: 'iphone_15_pro',
  device_scale_factor: 2,

  // Full page
  full_page: true,
  full_page_scroll: true,

  // Blocking
  block_ads: true,
  block_cookie_banners: true,
  block_trackers: true,

  // Customization
  dark_mode: true,
  delay: 2,
  wait_for_selector: '.content-loaded',
});

Without SDK (fetch)

const params = new URLSearchParams({
  access_key: 'YOUR_ACCESS_KEY',
  url: 'https://example.com',
  format: 'png',
  viewport_width: '1920',
});

const response = await fetch(`https://api.lambdashot.com/take?${params}`);
const buffer = await response.arrayBuffer();

fs.writeFileSync('screenshot.png', Buffer.from(buffer));

Video Recording

const video = await client.animate({
  url: 'https://example.com',
  scenario: 'scroll',
  duration: 10,
  format: 'mp4',
});

fs.writeFileSync('video.mp4', Buffer.from(await video.arrayBuffer()));

Async with Webhooks

const result = await client.take({
  url: 'https://example.com',
  async: true,
  store: true,
  storage_path: 'screenshots/example.png',
  webhook_url: 'https://yoursite.com/webhook',
});

// Returns immediately, screenshot delivered via webhook

Error Handling

try {
  const screenshot = await client.take({ url: 'https://example.com' });
} catch (error) {
  if (error.code === 'timeout_error') {
    console.log('Screenshot timed out, retrying...');
  } else if (error.code === 'access_key_invalid') {
    console.log('Check your API key');
  } else {
    console.log('Error:', error.message);
  }
}

TypeScript

The SDK includes full TypeScript definitions:

import { LambdaShot, TakeOptions, AnimateOptions } from 'lambdashot';

const options: TakeOptions = {
  url: 'https://example.com',
  format: 'png',
  viewport_width: 1920,
};

const client = new LambdaShot(
  process.env.LAMBDASHOT_ACCESS_KEY!,
  process.env.LAMBDASHOT_SECRET_KEY!
);

const screenshot = await client.take(options);