docker run --pull always -p 9090:80 treineticprojects/demo_opensource:latestVideoRecorderJS is a modern, lightweight, and powerful JavaScript library for recording video, audio, and screen content directly in the browser.
- π₯ Camera Recording: Capture video from webcam with audio.
- π¨ Filters & Effects: Apply realtime filters (sepia, grayscale, blur) and watermarks.
- πΌ Canvas Processing: Internal pipeline ensures effects are baked into the recording.
- π» Screen Recording: Record screen, windows, or tabs (
getDisplayMedia). - π Audio Visualization: Built-in event hooks to easily visualize audio data.
- π Modern API: Promise-based, Event-driven, and ES Module ready.
- π¦ Lightweight: Zero dependencies.
Note: Version 3.1.0 introduces a Canvas-based processing pipeline. This enables real-time effects but is slightly more resource-intensive than raw stream recording.
npm install videorecorderjs
# or
yarn add videorecorderjsimport VideoRecorderJS from 'videorecorderjs';
const recorder = new VideoRecorderJS({
videoTagId: 'my-video-element', // Changed from videotagid
videoWidth: 1280,
videoHeight: 720,
log: true
});
// ... listeners ...
// Start Camera (Async/Await recommended)
try {
await recorder.startCamera();
} catch (error) {
console.error("Camera access failed:", error);
}
// Start Recording
try {
recorder.startRecording();
} catch (error) {
console.error("Recording failed to start:", error);
}You can apply CSS-style filters and text watermarks dynamically. These effects are rendered onto the recorded video string.
// Apply a filter (accepts standard Canvas 'filter' strings)
recorder.setFilter('grayscale(100%)');
recorder.setFilter('sepia(100%)');
recorder.setFilter('blur(5px)');
recorder.setFilter('none'); // Reset
// Add a Watermark (Top-Right, White text with background box)
recorder.setWatermark('Confidential - 2025');
recorder.setWatermark(null); // Removetry {
await recorder.startScreen();
// Filters work on Screen Share too!
recorder.setWatermark('Screen Capture');
recorder.startRecording();
} catch (error) {
console.error("Screen recording failed:", error);
}| Option | Type | Default | Description |
|---|---|---|---|
videoTagId |
string or HTMLElement |
Required | The ID or Element to attach the stream to. |
videoWidth |
number |
640 |
Ideal video width. |
videoHeight |
number |
480 |
Ideal video height. |
frameRate |
number |
30 |
Desired frame rate. |
webpQuality |
number |
1.0 |
Quality of WebP images (if used). |
mimeType |
string |
video/webm |
The MIME type for recording. |
log |
boolean |
false |
Enable console logging. |
VideoRecorderJS is a headless library. This means it provides the logic but leaves the UI entirely up to you. This gives you maximum freedom to style your application.
graph TD
A[Your Custom UI] -- Controls --> B[VideoRecorderJS Logic]
B -- Internal Canvas Pipeline --> C[Procesed Stream]
C -- Stream --> D[<video> Element]
D -- CSS Styling --> E[Your Desired Look]
Since you provide the <video> element, you can style it using standard CSS:
/* Example: Make the video look like a modern card */
#my-video-element {
width: 100%;
border-radius: 16px;
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
object-fit: contain; /* Recommended to prevent watermark cropping */
background: #000;
}You can overlay buttons, add custom controls, or build a complete studio interface around it (as seen in the screenshot above).
We are actively working on making VideoRecorderJS the de-facto standard. Here is what's coming next:
- Real-time video filters (grayscale, sepia, blur background).
- Watermarking support.
- Select specific audio input device (mic selection).
- Audio mixing (Mic + System Audio).
- Browser-based background removal using TensorFlow.js.
- Speech-to-Text transcription hooks.
Contributions are welcome! Please open an issue or submit a pull request.
MIT Β© Imal Hasaranga

