nothing-mediacapture
v1.0.0
Published
nothing-browser plugin — intercepts and saves WhatsApp Web media to disk at the network level via the C++ PiggyMediaCapture engine. Zero Node RAM usage.
Maintainers
Readme
nothing-mediacapture
Intercepts WhatsApp Web media downloads (video, audio, images) at the network level and writes them directly to disk via C++. The bytes never pass through the JS pipe — Node RAM stays flat regardless of file size.
Install
npm install nothing-mediacaptureUsage
const piggy = require('nothing-browser').default;
const mediacapture = require('nothing-mediacapture');
const fs = require('fs');
await piggy.launch({ mode: 'tab', binary: 'headless' });
await piggy.register('whatsapp', 'https://web.whatsapp.com', { single: true });
await piggy.extend(
mediacapture({ downloadDir: './wa-media/' })
);
piggy.whatsapp.on('media:done', (d) => {
console.log(`Saved: ${d.path} (${d.bytes} bytes, ${d.mime})`);
// Read the file in Node if needed:
// const buf = fs.readFileSync(d.path);
});
piggy.whatsapp.on('media:error', (d) => {
console.error(`Failed: ${d.url} — ${d.error}`);
});
await piggy.whatsapp.navigate();Options
| Option | Type | Default | Description |
|---|---|---|---|
| downloadDir | string | './wa-media/' | Directory where captured media is written |
| onDone | function | — | Called when C++ finishes writing a file to disk |
| onError | function | — | Called when a media download fails |
Events
| Event | Data | When |
|---|---|---|
| media:done | { tabId, url, mime, path, bytes } | File fully written to disk |
| media:error | { tabId, url, error } | Download failed |
API (site.media)
// Change download directory mid-session
await piggy.whatsapp.media.setDir('./wa-media-backup/');
// List all files captured this session
const files = await piggy.whatsapp.media.list();
// [{ url, mime, path, bytes, done }, ...]
// Clear the in-memory capture list (does NOT delete files from disk)
await piggy.whatsapp.media.clear();Notes
- To force a fresh QR scan: call
site.storage.clear()before navigating (requiresnothing-innerstorage) - This plugin was made upon request — report any issues found
- This plugin is tailored specifically for WhatsApp sessions. You can use it on other sites but there is no guarantee it will work, and that is not a bug. A general-purpose
nothing-storageplugin will be released in the future to solve that - Media bytes never touch Node RAM — C++ writes direct to disk.
media:donegives you the filepath; usefs.readFile()if you need the bytes in Node media.clear()clears the session list only — it does not delete files already written to disk- Captured MIME types:
video/*,audio/*,image/*,application/octet-stream
