Workflow Examples
Discover powerful automation workflows using Canvelete (opens in a new tab) with n8n. These examples demonstrate real-world use cases and best practices for integrating design generation into your automation processes.
Quick Start Templates
1. Simple Image Generation
Use Case: Generate a social media post when new content is published.
{
"name": "Simple Social Media Generator",
"nodes": [
{
"parameters": {},
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "template_social_post",
"format": "png",
"dynamicData": "{\"title\":\"{{$json.title}}\",\"description\":\"{{$json.description}}\",\"author\":\"{{$json.author}}\"}"
},
"name": "Generate Social Post",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [460, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
}
],
"connections": {
"Manual Trigger": {
"main": [
[
{
"node": "Generate Social Post",
"type": "main",
"index": 0
}
]
]
}
}
}Input Data Example:
{
"title": "New Product Launch",
"description": "Introducing our latest innovation",
"author": "Marketing Team"
}2. Automated Certificate Generation
Use Case: Generate certificates for course completions automatically.
{
"name": "Certificate Generator",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "certificate-webhook",
"responseMode": "responseNode",
"options": {}
},
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"resource": "template",
"operation": "search",
"query": "certificate"
},
"name": "Find Certificate Template",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [460, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "={{$json.templates[0].id}}",
"format": "pdf",
"dynamicData": "{\"student_name\":\"{{$node['Webhook'].json.body.student_name}}\",\"course_name\":\"{{$node['Webhook'].json.body.course_name}}\",\"completion_date\":\"{{$node['Webhook'].json.body.completion_date}}\",\"instructor\":\"{{$node['Webhook'].json.body.instructor}}\"}"
},
"name": "Generate Certificate",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [680, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"fromEmail": "certificates@yourcompany.com",
"toEmail": "={{$node['Webhook'].json.body.student_email}}",
"subject": "Your Course Certificate - {{$node['Webhook'].json.body.course_name}}",
"text": "Congratulations! Please find your certificate attached.",
"attachments": "binary,certificate",
"options": {
"attachments": [
{
"name": "={{$node['Webhook'].json.body.student_name}}_Certificate.pdf",
"value": "={{$node['Generate Certificate'].json.url}}"
}
]
}
},
"name": "Send Certificate Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [900, 300]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "{\"success\": true, \"message\": \"Certificate generated and sent\", \"certificate_url\": \"{{$node['Generate Certificate'].json.url}}\"}"
},
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1120, 300]
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Find Certificate Template",
"type": "main",
"index": 0
}
]
]
},
"Find Certificate Template": {
"main": [
[
{
"node": "Generate Certificate",
"type": "main",
"index": 0
}
]
]
},
"Generate Certificate": {
"main": [
[
{
"node": "Send Certificate Email",
"type": "main",
"index": 0
}
]
]
},
"Send Certificate Email": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
}
}E-commerce Workflows
3. Product Image Generator
Use Case: Automatically generate product images when new items are added to inventory.
{
"name": "Product Image Generator",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 */6 * * *"
}
]
}
},
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"url": "https://your-ecommerce-api.com/products/new",
"options": {}
},
"name": "Get New Products",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [460, 300]
},
{
"parameters": {
"batchSize": 5,
"options": {}
},
"name": "Split In Batches",
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [680, 300]
},
{
"parameters": {
"resource": "template",
"operation": "search",
"query": "product-showcase"
},
"name": "Find Product Template",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [900, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "={{$json.templates[0].id}}",
"format": "png",
"width": 1200,
"height": 1200,
"quality": 95,
"dynamicData": "{\"product_name\":\"{{$node['Split In Batches'].json.name}}\",\"product_price\":\"{{$node['Split In Batches'].json.price}}\",\"product_image\":\"{{$node['Split In Batches'].json.image_url}}\",\"product_description\":\"{{$node['Split In Batches'].json.description}}\",\"brand_logo\":\"https://yourcompany.com/logo.png\"}"
},
"name": "Generate Product Image",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [1120, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"url": "https://your-ecommerce-api.com/products/{{$node['Split In Batches'].json.id}}/images",
"sendBody": true,
"bodyContentType": "json",
"jsonBody": "{\"marketing_image_url\": \"{{$json.url}}\", \"generated_at\": \"{{$now}}\"}",
"options": {}
},
"name": "Update Product Record",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [1340, 300]
},
{
"parameters": {
"options": {}
},
"name": "Wait",
"type": "n8n-nodes-base.wait",
"typeVersion": 1,
"position": [1560, 300]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Get New Products",
"type": "main",
"index": 0
}
]
]
},
"Get New Products": {
"main": [
[
{
"node": "Split In Batches",
"type": "main",
"index": 0
}
]
]
},
"Split In Batches": {
"main": [
[
{
"node": "Find Product Template",
"type": "main",
"index": 0
}
]
]
},
"Find Product Template": {
"main": [
[
{
"node": "Generate Product Image",
"type": "main",
"index": 0
}
]
]
},
"Generate Product Image": {
"main": [
[
{
"node": "Update Product Record",
"type": "main",
"index": 0
}
]
]
},
"Update Product Record": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Split In Batches",
"type": "main",
"index": 0
}
]
]
}
}
}4. Dynamic Pricing Graphics
Use Case: Generate promotional graphics when prices change.
{
"name": "Dynamic Pricing Graphics",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "price-change",
"responseMode": "responseNode",
"options": {}
},
"name": "Price Change Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "1",
"leftValue": "={{$json.body.discount_percentage}}",
"rightValue": 20,
"operator": {
"type": "number",
"operation": "gte"
}
}
],
"combinator": "and"
},
"options": {}
},
"name": "Check Discount Level",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [460, 300]
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "template_big_sale",
"format": "png",
"dynamicData": "{\"product_name\":\"{{$node['Price Change Webhook'].json.body.product_name}}\",\"original_price\":\"{{$node['Price Change Webhook'].json.body.original_price}}\",\"sale_price\":\"{{$node['Price Change Webhook'].json.body.sale_price}}\",\"discount_percentage\":\"{{$node['Price Change Webhook'].json.body.discount_percentage}}%\",\"product_image\":\"{{$node['Price Change Webhook'].json.body.product_image}}\"}"
},
"name": "Generate Big Sale Graphic",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [680, 200],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "template_regular_sale",
"format": "png",
"dynamicData": "{\"product_name\":\"{{$node['Price Change Webhook'].json.body.product_name}}\",\"original_price\":\"{{$node['Price Change Webhook'].json.body.original_price}}\",\"sale_price\":\"{{$node['Price Change Webhook'].json.body.sale_price}}\",\"discount_percentage\":\"{{$node['Price Change Webhook'].json.body.discount_percentage}}%\",\"product_image\":\"{{$node['Price Change Webhook'].json.body.product_image}}\"}"
},
"name": "Generate Regular Sale Graphic",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [680, 400],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"options": {}
},
"name": "Merge",
"type": "n8n-nodes-base.merge",
"typeVersion": 2,
"position": [900, 300]
},
{
"parameters": {
"authentication": "oAuth2",
"text": "🔥 SALE ALERT! {{$node['Price Change Webhook'].json.body.product_name}} is now {{$node['Price Change Webhook'].json.body.discount_percentage}}% off! Get it before it's gone! 🛒",
"additionalFields": {
"media_ids": [
"={{$json.media_id}}"
]
}
},
"name": "Post to Twitter",
"type": "n8n-nodes-base.twitter",
"typeVersion": 2,
"position": [1120, 300]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "{\"success\": true, \"message\": \"Sale graphic generated and posted\"}"
},
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1340, 300]
}
],
"connections": {
"Price Change Webhook": {
"main": [
[
{
"node": "Check Discount Level",
"type": "main",
"index": 0
}
]
]
},
"Check Discount Level": {
"main": [
[
{
"node": "Generate Big Sale Graphic",
"type": "main",
"index": 0
}
],
[
{
"node": "Generate Regular Sale Graphic",
"type": "main",
"index": 0
}
]
]
},
"Generate Big Sale Graphic": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Generate Regular Sale Graphic": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Post to Twitter",
"type": "main",
"index": 0
}
]
]
},
"Post to Twitter": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
}
}Content Marketing Workflows
5. Blog Post Social Graphics
Use Case: Generate social media graphics for new blog posts automatically.
{
"name": "Blog Post Social Graphics",
"nodes": [
{
"parameters": {
"feedUrl": "https://yourblog.com/rss.xml",
"options": {}
},
"name": "RSS Feed Trigger",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"jsCode": "// Extract and clean blog post data\nconst item = $input.first();\n\n// Clean HTML from description\nconst cleanDescription = item.json.contentSnippet\n .replace(/<[^>]*>/g, '')\n .substring(0, 150) + '...';\n\n// Extract featured image from content\nconst imageMatch = item.json.content.match(/<img[^>]+src=\"([^\"]+)\"/i);\nconst featuredImage = imageMatch ? imageMatch[1] : 'https://yourblog.com/default-image.jpg';\n\n// Format publish date\nconst publishDate = new Date(item.json.pubDate).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n});\n\nreturn {\n title: item.json.title,\n description: cleanDescription,\n url: item.json.link,\n author: item.json.creator || 'Blog Team',\n publishDate: publishDate,\n featuredImage: featuredImage,\n categories: item.json.categories || []\n};"
},
"name": "Process Blog Data",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [460, 300]
},
{
"parameters": {
"resource": "template",
"operation": "search",
"query": "blog-post-social"
},
"name": "Find Blog Template",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [680, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "={{$json.templates[0].id}}",
"format": "png",
"width": 1200,
"height": 630,
"dynamicData": "{\"blog_title\":\"{{$node['Process Blog Data'].json.title}}\",\"blog_description\":\"{{$node['Process Blog Data'].json.description}}\",\"author\":\"{{$node['Process Blog Data'].json.author}}\",\"publish_date\":\"{{$node['Process Blog Data'].json.publishDate}}\",\"featured_image\":\"{{$node['Process Blog Data'].json.featuredImage}}\",\"blog_url_qr\":\"{{$node['Process Blog Data'].json.url}}\"}"
},
"name": "Generate Social Graphic",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [900, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"authentication": "oAuth2",
"text": "📝 New blog post: {{$node['Process Blog Data'].json.title}}\n\n{{$node['Process Blog Data'].json.description}}\n\nRead more: {{$node['Process Blog Data'].json.url}}\n\n#blog #content #{{$node['Process Blog Data'].json.categories[0]}}",
"additionalFields": {
"media_ids": [
"={{$json.media_id}}"
]
}
},
"name": "Post to Twitter",
"type": "n8n-nodes-base.twitter",
"typeVersion": 2,
"position": [1120, 200]
},
{
"parameters": {
"authentication": "oAuth2",
"text": "📝 New blog post: {{$node['Process Blog Data'].json.title}}\n\n{{$node['Process Blog Data'].json.description}}\n\nRead more: {{$node['Process Blog Data'].json.url}}",
"additionalFields": {
"media_urls": [
"={{$node['Generate Social Graphic'].json.url}}"
]
}
},
"name": "Post to LinkedIn",
"type": "n8n-nodes-base.linkedIn",
"typeVersion": 1,
"position": [1120, 400]
}
],
"connections": {
"RSS Feed Trigger": {
"main": [
[
{
"node": "Process Blog Data",
"type": "main",
"index": 0
}
]
]
},
"Process Blog Data": {
"main": [
[
{
"node": "Find Blog Template",
"type": "main",
"index": 0
}
]
]
},
"Find Blog Template": {
"main": [
[
{
"node": "Generate Social Graphic",
"type": "main",
"index": 0
}
]
]
},
"Generate Social Graphic": {
"main": [
[
{
"node": "Post to Twitter",
"type": "main",
"index": 0
},
{
"node": "Post to LinkedIn",
"type": "main",
"index": 0
}
]
]
}
}
}Advanced Workflows
6. Multi-Language Report Generation
Use Case: Generate reports in multiple languages with localized graphics.
{
"name": "Multi-Language Report Generator",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 1 * *"
}
]
}
},
"name": "Monthly Schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1,
"position": [240, 300]
},
{
"parameters": {
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"url": "https://your-analytics-api.com/monthly-report",
"options": {}
},
"name": "Get Analytics Data",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [460, 300]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "1",
"name": "languages",
"value": "[\"en\", \"es\", \"fr\", \"de\", \"ja\"]",
"type": "array"
}
]
},
"options": {}
},
"name": "Set Languages",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [680, 300]
},
{
"parameters": {
"fieldToSplitOut": "languages",
"options": {}
},
"name": "Split Languages",
"type": "n8n-nodes-base.itemLists",
"typeVersion": 3,
"position": [900, 300]
},
{
"parameters": {
"resource": "template",
"operation": "search",
"query": "monthly-report-{{$json.languages}}"
},
"name": "Find Localized Template",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [1120, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"resource": "render",
"operation": "create",
"templateId": "={{$json.templates[0].id}}",
"format": "pdf",
"dynamicData": "{\"report_month\":\"{{$now.toFormat('MMMM yyyy')}}\",\"total_users\":\"{{$node['Get Analytics Data'].json.total_users}}\",\"revenue\":\"{{$node['Get Analytics Data'].json.revenue}}\",\"growth_rate\":\"{{$node['Get Analytics Data'].json.growth_rate}}%\",\"top_countries\":\"{{$node['Get Analytics Data'].json.top_countries}}\",\"language\":\"{{$node['Split Languages'].json.languages}}\"}"
},
"name": "Generate Localized Report",
"type": "n8n-nodes-canvelete.canvelete",
"typeVersion": 1,
"position": [1340, 300],
"credentials": {
"canveleteOAuth2Api": {
"id": "1",
"name": "Canvelete OAuth2 account"
}
}
},
{
"parameters": {
"operation": "upload",
"fileId": {
"__rl": true,
"value": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
"mode": "list",
"cachedResultName": "Monthly Reports"
},
"name": "Monthly_Report_{{$node['Split Languages'].json.languages}}_{{$now.toFormat('yyyy-MM')}}.pdf",
"options": {}
},
"name": "Upload to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [1560, 300]
}
],
"connections": {
"Monthly Schedule": {
"main": [
[
{
"node": "Get Analytics Data",
"type": "main",
"index": 0
}
]
]
},
"Get Analytics Data": {
"main": [
[
{
"node": "Set Languages",
"type": "main",
"index": 0
}
]
]
},
"Set Languages": {
"main": [
[
{
"node": "Split Languages",
"type": "main",
"index": 0
}
]
]
},
"Split Languages": {
"main": [
[
{
"node": "Find Localized Template",
"type": "main",
"index": 0
}
]
]
},
"Find Localized Template": {
"main": [
[
{
"node": "Generate Localized Report",
"type": "main",
"index": 0
}
]
]
},
"Generate Localized Report": {
"main": [
[
{
"node": "Upload to Google Drive",
"type": "main",
"index": 0
}
]
]
}
}
}Best Practices and Tips
Workflow Design Principles
-
Modular Design
- Break complex workflows into smaller, reusable components
- Use sub-workflows for common operations
- Implement proper error boundaries
-
Performance Optimization
- Use appropriate batch sizes (5-10 items for Canvelete operations)
- Implement delays between API calls to respect rate limits
- Cache frequently used data (templates, designs)
-
Error Handling
- Always enable "Continue on Fail" for non-critical operations
- Implement retry logic for transient errors
- Log errors for debugging and monitoring
-
Security
- Use OAuth2 credentials instead of API keys when possible
- Validate input data before processing
- Implement proper access controls
Dynamic Data Best Practices
-
Data Validation
// Validate required fields if (!$json.title || !$json.description) { throw new Error('Missing required fields: title, description'); } // Sanitize data const cleanTitle = $json.title.replace(/[<>]/g, ''); const cleanDescription = $json.description.substring(0, 200); -
Image URL Handling
// Ensure image URLs are accessible const imageUrl = $json.image_url || 'https://yoursite.com/default-image.jpg'; // Handle relative URLs const fullImageUrl = imageUrl.startsWith('http') ? imageUrl : `https://yoursite.com${imageUrl}`; -
Date Formatting
// Format dates consistently const formattedDate = new Date($json.date).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });
Monitoring and Debugging
-
Logging Strategy
- Log all API requests and responses
- Track processing times and success rates
- Monitor rate limit usage
-
Testing Workflows
- Use manual triggers for testing
- Test with various data scenarios
- Validate error handling paths
-
Performance Monitoring
- Track workflow execution times
- Monitor memory usage for large batches
- Set up alerts for failures
Community Templates
Template Library
The Canvelete community maintains a library of workflow templates:
- Social Media Automation: Auto-generate posts for multiple platforms
- E-commerce Graphics: Product images, sale banners, promotional materials
- Content Marketing: Blog graphics, newsletter headers, infographics
- Event Management: Tickets, badges, promotional materials
- Reporting: Automated report generation with charts and branding
Contributing Workflows
To contribute your workflows to the community:
-
Document Your Workflow
- Provide clear description and use case
- Include setup instructions
- Add example data and expected outputs
-
Share in Community
- Post in n8n Community Forum
- Share in Canvelete Community
- Create GitHub repository with examples
-
Best Practices
- Remove sensitive credentials and data
- Use generic placeholder values
- Include error handling examples
Support and Resources
Getting Help
- n8n Community: community.n8n.io (opens in a new tab)
- Canvelete Support: canvelete.com/support (opens in a new tab)
- Documentation: docs.canvelete.com (opens in a new tab)
Workflow Debugging
- Enable debug mode in n8n
- Check execution logs for errors
- Test individual nodes with sample data
- Verify credential permissions and scopes
Performance Optimization
- Monitor API usage and rate limits
- Implement appropriate delays and batching
- Use caching for frequently accessed data
- Optimize image sizes and formats
This comprehensive collection of workflow examples provides a solid foundation for building powerful automation solutions with Canvelete and n8n.