@extract.design/sdk
v0.1.0
Published
Official Node.js SDK for the extract.design API - Extract print-ready designs from product photos
Downloads
16
Maintainers
Readme
extract-design
Official Node.js SDK for the extract.design API.
Extract print-ready designs from product photos with AI. Perfect for POD automation, e-commerce tools, and Etsy/Shopify integrations.
Installation
npm install @extract.design/sdkQuick Start
import { ExtractDesign } from '@extract.design/sdk';
const client = new ExtractDesign({ apiKey: 'sk_live_...' });
// Extract and wait for result
const result = await client.extractAndWait({
imageUrl: 'https://example.com/product-mockup.jpg',
});
console.log(result.extractionUrl); // URL to transparent PNGUsage
Basic Extraction
import { ExtractDesign } from '@extract.design/sdk';
const client = new ExtractDesign({ apiKey: process.env.EXTRACT_DESIGN_API_KEY });
// Submit extraction
const { extractionId } = await client.extract({
imageUrl: 'https://example.com/mug-with-design.jpg',
});
// Check status
const status = await client.getExtraction(extractionId);
console.log(status.status); // 'pending' | 'processing' | 'completed' | 'failed'
// Wait for completion
const result = await client.waitForCompletion(extractionId);
console.log(result.extractionUrl);With Options
const result = await client.extractAndWait({
imageUrl: 'https://example.com/product.jpg',
scale: 4, // Upscale 4x
faceEnhance: true, // Enhance faces
preset: 'normal', // Processing preset
});Remix (Transform Design)
const result = await client.extractAndWait({
imageUrl: 'https://example.com/lemon-design-mug.jpg',
remixPrompt: 'Make it a watermelon',
});
console.log(result.extractionUrl); // Original extracted design
console.log(result.remixUrl); // Remixed designWith Webhook
// Pro, Premium, and Ultra plans only
const { extractionId } = await client.extract({
imageUrl: 'https://example.com/product.jpg',
webhookUrl: 'https://your-api.com/webhook',
metadata: { orderId: '12345' },
});
// Your webhook will receive:
// {
// "extraction_id": "...",
// "status": "completed",
// "extraction_url": "...",
// "metadata": { "orderId": "12345" }
// }Base64 Image
import { readFileSync } from 'fs';
const imageBuffer = readFileSync('./product.jpg');
const base64 = imageBuffer.toString('base64');
const result = await client.extractAndWait({
imageBase64: base64,
});Progress Callback
const result = await client.waitForCompletion(extractionId, {
timeout: 300000, // 5 minutes
interval: 3000, // Check every 3 seconds
onProgress: (status) => {
console.log(`Status: ${status.status}`);
if (status.estimatedSecondsRemaining) {
console.log(`ETA: ${status.estimatedSecondsRemaining}s`);
}
},
});Check Usage
const usage = await client.getUsage();
console.log(`Credits remaining: ${usage.credits.total}`);
console.log(`Plan: ${usage.plan}`);Verify API Key
try {
await client.verifyApiKey();
console.log('API key is valid');
} catch (error) {
console.log('Invalid API key');
}Error Handling
import {
ExtractDesign,
AuthenticationError,
InsufficientCreditsError,
ValidationError,
RateLimitError,
TimeoutError,
ExtractionFailedError,
} from '@extract.design/sdk';
try {
const result = await client.extractAndWait({
imageUrl: 'https://example.com/product.jpg',
});
} catch (error) {
if (error instanceof AuthenticationError) {
console.log('Invalid API key');
} else if (error instanceof InsufficientCreditsError) {
console.log('Not enough credits');
} else if (error instanceof ValidationError) {
console.log('Invalid request:', error.errorMessage);
} else if (error instanceof RateLimitError) {
console.log(`Rate limited. Retry after ${error.retryAfter}s`);
} else if (error instanceof TimeoutError) {
console.log(`Extraction ${error.extractionId} timed out`);
} else if (error instanceof ExtractionFailedError) {
console.log(`Extraction failed: ${error.reason}`);
} else {
throw error;
}
}Configuration
const client = new ExtractDesign({
apiKey: 'sk_live_...',
baseUrl: 'https://extract.design', // Optional
timeout: 30000, // Request timeout in ms
});TypeScript
Full TypeScript support with exported types:
import type {
ExtractOptions,
ExtractResponse,
ExtractionResult,
ExtractionStatus,
UsageResponse,
Credits,
} from '@extract.design/sdk';API Reference
ExtractDesign
extract(options): Promise<ExtractResponse>
Submit an image for extraction.
getExtraction(id): Promise<ExtractionResult>
Get the status and result of an extraction.
waitForCompletion(id, options?): Promise<ExtractionResult>
Poll until extraction completes.
extractAndWait(options, waitOptions?): Promise<ExtractionResult>
Submit and wait for completion in one call.
getUsage(): Promise<UsageResponse>
Get account usage and credit balance.
verifyApiKey(): Promise<boolean>
Verify the API key is valid.
Links
License
MIT
