
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
bulktemplates
Advanced tools
Social media image generation API for AI agents, LLMs, and developers. Browse 80+ templates, render PNGs, and run batch jobs programmatically.
The official BulkTemplates SDK for Node.js — programmatic image generation API and MCP server in one package. Browse 80+ social media templates, render PNGs, and run batch jobs from your code or AI agent.
Use it as a JavaScript SDK — import it in your code and call the API directly:
import { BulkTemplates } from 'bulktemplates';
const bt = new BulkTemplates({ apiKey: 'bk_...' });
const png = await bt.images.image('quote-card', { quote: 'Ship it.' });
Or use it as an MCP server — connect it to Claude Desktop or Cursor so your AI agent can generate images without writing any code:
npx bulktemplates
npm install bulktemplates
import { BulkTemplates } from 'bulktemplates';
const bt = new BulkTemplates({ apiKey: 'bk_...' });
// Browse all templates (lightweight)
const list = await bt.templates.list({ summary: true });
// Filter by IDs
const picked = await bt.templates.list({ ids: 'quote-card,tweet-style' });
// Full template definition — shows field names needed for rendering
const tpl = await bt.templates.get('quote-card');
// Returns a Buffer containing the PNG
const png = await bt.images.image('quote-card', {
quote: 'Ship it.',
author: 'Ada Lovelace',
});
// Save to disk
import { writeFileSync } from 'fs';
writeFileSync('out.png', png);
// Override font
const png2 = await bt.images.image('quote-card', data, {
fontFamily: 'playfair-display',
});
// Start a batch (max 1,000 rows)
const job = await bt.batch.create('announcement', [
{ headline: 'Product launch', date: 'May 1' },
{ headline: 'Webinar', date: 'May 8' },
]);
// Poll until done
let status = await bt.batch.poll(job.id);
while (status.status !== 'done') {
await new Promise(r => setTimeout(r, 2000));
status = await bt.batch.poll(job.id);
}
console.log(status.files); // paths to rendered PNGs
const fonts = await bt.fonts.list();
// [{ id: 'inter', name: 'Inter' }, { id: 'playfair-display', name: 'Playfair Display' }, ...]
import { BulkTemplates, AuthenticationError, NotFoundError, RateLimitError } from 'bulktemplates';
try {
const png = await bt.images.image('quote-card', data);
} catch (err) {
if (err instanceof AuthenticationError) console.error('Bad API key');
if (err instanceof NotFoundError) console.error('Template not found');
if (err instanceof RateLimitError) console.error('Slow down');
}
Use with Claude Desktop, Cursor, or any MCP-compatible client. The server exposes 6 tools: list_templates, get_template, render_image, list_fonts, create_batch_job, poll_batch_job.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"bulktemplates": {
"command": "npx",
"args": ["-y", "bulktemplates"],
"env": {
"BULKTEMPLATES_API_KEY": "bk_YOUR_KEY_HERE"
}
}
}
}
{
"mcpServers": {
"bulktemplates": {
"command": "npx",
"args": ["-y", "bulktemplates"],
"env": {
"BULKTEMPLATES_API_KEY": "bk_YOUR_KEY_HERE"
}
}
}
}
BULKTEMPLATES_API_KEY=bk_... npx bulktemplates
BulkTemplates(config)| Option | Type | Required | Default |
|---|---|---|---|
apiKey | string | Yes | — |
baseUrl | string | No | https://bulktemplates.com |
| Resource | Method | Description |
|---|---|---|
bt.templates | list(opts?) | List templates. opts.summary for lightweight, opts.ids to filter |
bt.templates | get(id) | Full template definition with field names |
bt.images | image(templateId, data, opts?) | Render PNG → Buffer. opts.fontFamily to override font |
bt.batch | create(templateId, rows) | Start async batch job (max 1,000 rows) |
bt.batch | poll(id) | Check job status; files array available when status === 'done' |
bt.fonts | list() | All available font IDs |
| Class | HTTP status | When thrown |
|---|---|---|
BulkTemplatesError | any | Base class |
AuthenticationError | 401 | Invalid or missing API key |
NotFoundError | 404 | Template or job not found |
RateLimitError | 429 | Too many requests |
ValidationError | 422 | Bad request payload |
| Variable | Required | Default | Description |
|---|---|---|---|
BULKTEMPLATES_API_KEY | Yes | — | Your API key |
BULKTEMPLATES_API_BASE | No | https://bulktemplates.com | Override base URL |
80+ templates across social media, B2B, editorial, lifestyle, fitness, commerce, and events. Aspect ratios: 1:1 · 4:5 · 9:16 · 16:9 · 3:1
Example IDs: quote-card, tweet-style, event-card, testimonial, product-launch, podcast-episode, linkedin-banner, youtube-thumb, breaking-news-red, magazine-cover and many more.
MIT
FAQs
Social media image generation API for AI agents, LLMs, and developers. Browse 80+ templates, render PNGs, and run batch jobs programmatically.
We found that bulktemplates demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.