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

@videocensor/sdk

v1.0.0

Published

Official Node.js SDK for VideoCensor content moderation API — profanity detection, hate speech, censoring for text, audio and video.

Downloads

11

Readme

@videocensor/sdk

Node.js SDK for VideoCensor content moderation API.

Installation

npm install @videocensor/sdk

Quick Start

import { VideoCensor } from '@videocensor/sdk';

const client = new VideoCensor({ apiKey: 'vc_live_...' });

// Analyze text
const result = await client.analyzeText('some text to check');
console.log(result.flaggedCount, result.categories);

// Censor text
const censored = await client.censorText('some text to censor');
console.log(censored.censored);

// Analyze media file
const job = await client.analyzeMedia('/path/to/video.mp4');
const completed = await client.waitForJob(job.id);
const analysis = await client.getJobResult(completed.id);

// Censor media from URL
const censorJob = await client.censorMediaUrl('https://youtube.com/watch?v=...');
const done = await client.waitForJob(censorJob.id);
await client.downloadJob(done.id, './censored.mp4');

Configuration

const client = new VideoCensor({
  apiKey: 'vc_live_...',     // Required. Use vc_test_ for sandbox.
  baseUrl: 'https://...',    // Optional. Default: https://videocensor.ru/api/v1
  timeout: 30_000,           // Optional. Request timeout in ms.
  maxRetries: 3,             // Optional. Retries on 429/5xx.
});

API

Text

| Method | Description | |--------|-------------| | analyzeText(text, options?) | Analyze text for flagged content | | censorText(text, options?) | Replace flagged words with *** |

Options: language, categories, preset, replacement (censor only).

Media

| Method | Description | |--------|-------------| | analyzeMedia(filePath, options?) | Upload and analyze media file | | censorMedia(filePath, options?) | Upload and censor media file | | analyzeMediaUrl(url, options?) | Analyze media from URL | | censorMediaUrl(url, options?) | Censor media from URL |

Options: language, mode, categories, preset, wayOfBlocking, censorStrength.

Jobs

| Method | Description | |--------|-------------| | listJobs(options?) | List jobs with pagination | | getJob(jobId) | Get job status | | getJobResult(jobId) | Get full analysis result | | cancelJob(jobId) | Cancel a job | | downloadJob(jobId, outputPath) | Download processed file | | getTranscript(jobId, format?) | Get transcription (srt/txt/json) | | waitForJob(jobId, timeoutMs?) | Poll until job completes |

Batch

| Method | Description | |--------|-------------| | createBatch(requests) | Submit batch of text operations | | getBatch(batchId) | Get batch status and results |

Webhooks

| Method | Description | |--------|-------------| | listWebhooks() | List webhook endpoints | | createWebhook(url, events?) | Create webhook endpoint | | deleteWebhook(webhookId) | Delete webhook endpoint |

Account

| Method | Description | |--------|-------------| | getAccount() | Get account info and usage |

Error Handling

import { VideoCensorError, RateLimitError, AuthenticationError } from '@videocensor/sdk';

try {
  await client.analyzeText('test');
} catch (err) {
  if (err instanceof RateLimitError) {
    console.log(`Retry after ${err.retryAfter}s`);
  }
  if (err instanceof AuthenticationError) {
    console.log('Invalid API key');
  }
}

Content Categories

profanity, hate_speech, extremism, drugs, sexual, insults

Requirements

Node.js >= 18

Versioning

This SDK follows SemVer:

  • MAJOR — breaking changes (removed endpoints/fields, type changes). Deprecation notice at least 3 months in advance.
  • MINOR — new endpoints or optional fields.
  • PATCH — bugfixes, retry/backoff improvements, docs.

See CHANGELOG.md for release notes.