This workflow corresponds to n8n.io template #13777 — we link there as the canonical source.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "UJlwNIKQJmyj1RVN",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Generate Styled Markdown Report with Image Upload",
"tags": [],
"nodes": [
{
"id": "07dcd84f-0a2d-41d5-a01e-0199d155a984",
"name": "Run Workflow",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-96,
-400
],
"parameters": {},
"typeVersion": 1
},
{
"id": "19d234f8-d76b-4cd6-88f5-ab9625516c43",
"name": "Company Settings",
"type": "n8n-nodes-base.set",
"position": [
144,
-400
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a2-var-company-name",
"name": "companyName",
"type": "string",
"value": "ACME Corp"
},
{
"id": "a2-var-company-logo-url",
"name": "companyLogoUrl",
"type": "string",
"value": "https://placehold.co/200x72/0f172a/ffffff.png?text=AC&font=montserrat"
},
{
"id": "a2-var-primary-color",
"name": "primaryColor",
"type": "string",
"value": "#1d4ed8"
},
{
"id": "a2-var-secondary-color",
"name": "secondaryColor",
"type": "string",
"value": "#16a34a"
},
{
"id": "a2-var-text-color",
"name": "textColor",
"type": "string",
"value": "#1f2937"
},
{
"id": "a2-var-font-family",
"name": "fontFamily",
"type": "string",
"value": "Arial"
},
{
"id": "a2-var-report-image-url",
"name": "reportImageUrl",
"type": "string",
"value": "https://placehold.co/1200x680/png?text=Q1+Operations+Dashboard&font=montserrat"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "cacabd17-48ae-46de-bbef-5de03342a029",
"name": "Download Report Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
384,
-400
],
"parameters": {
"url": "={{ $json.reportImageUrl }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "833d56ee-e751-4309-a5b5-5c094a337061",
"name": "Upload Temp Image",
"type": "n8n-nodes-autype.autype",
"position": [
624,
-400
],
"parameters": {
"resource": "file",
"operation": "uploadImage"
},
"credentials": {
"autypeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e0bf13f4-b951-472a-808d-aceabca602c8",
"name": "Render Markdown Report",
"type": "n8n-nodes-autype.autype",
"position": [
864,
-400
],
"parameters": {
"content": "={{ \n'---page{align=center}---\\n\\n'\n+ '.first().json.companyLogoUrl + '){width=240 align=center}\\n\\n'\n+ '# Business Quarter Report \u2014 Q1 2026\\n\\n'\n+ '**Prepared for:** Leadership Team \\n'\n+ '**Reporting period:** January \u2013 March 2026\\n\\n'\n+ '{width=520 align=center caption=\"Operations dashboard snapshot\"}\\n\\n'\n+ '---/page---\\n\\n'\n+ '## Executive Summary\\n\\n'\n+ 'Q1 delivered stable revenue growth, stronger retention, and improved delivery throughput. The team focused on enterprise expansion, onboarding optimization, and faster issue resolution.\\n\\n'\n+ '### Key outcomes\\n\\n'\n+ '- Revenue grew by **14.8 %** quarter-over-quarter\\n'\n+ '- Gross margin improved from **61 %** to **64 %**\\n'\n+ '- Churn dropped from **3.1 %** to **2.4 %**\\n'\n+ '- Net Revenue Retention reached **112 %**\\n\\n'\n+ '## Financial Overview\\n\\n'\n+ '| Metric | Q4 2025 | Q1 2026 | Change |\\n'\n+ '|--------|---------|---------|--------|\\n'\n+ '| Revenue | $2.44 M | $2.80 M | +14.8 % |\\n'\n+ '| Gross Margin | 61 % | 64 % | +3 pp |\\n'\n+ '| EBITDA | $0.52 M | $0.66 M | +26.9 % |\\n'\n+ '| New ARR | $0.38 M | $0.49 M | +28.9 % |\\n\\n'\n+ '## Revenue by Region\\n\\n'\n+ ':::chart{type=bar title=\"Regional Revenue (USD)\" caption=\"Regional performance Q1 2026\"}\\n'\n+ 'labels: North America, DACH, UKI, Nordics\\n'\n+ 'dataset: Q1 2026 | 1160000, 690000, 530000, 420000\\n'\n+ ':::\\n\\n'\n+ '---\\n\\n'\n+ '## Operational KPIs\\n\\n'\n+ ':::chart{type=line title=\"Monthly Pipeline Conversion\"}\\n'\n+ 'labels: Jan, Feb, Mar\\n'\n+ 'dataset: Conversion Rate (%) | 28, 31, 34\\n'\n+ ':::\\n'\n}}",
"operation": "renderMarkdown",
"downloadOutput": true,
"markdownAdditionalFields": {
"size": "A4",
"title": "={{ $('Company Settings').first().json.companyName + ' \u2014 Quarter Report Q1 2026' }}",
"defaults": "={{ JSON.stringify({ fontFamily: $('Company Settings').first().json.fontFamily, fontSize: 11, lineHeight: 1.45, color: $('Company Settings').first().json.textColor, chart: { colors: [$('Company Settings').first().json.primaryColor, $('Company Settings').first().json.secondaryColor, '#f59e0b'] }, styles: { h1: { fontSize: 26, fontWeight: 'bold', color: '#0f172a' }, h2: { fontSize: 17, fontWeight: 'bold', color: $('Company Settings').first().json.primaryColor }, h3: { fontSize: 13, fontWeight: 'bold', color: '#334155' }, table: { header: { backgroundColor: '#e2e8f0', color: '#0f172a', fontWeight: 'bold' }, rows: { alternateBackgroundColor: '#f8fafc' }, borders: { outer: { width: 1, color: '#cbd5e1', style: 'solid' }, inner: { width: 0.5, color: '#e2e8f0', style: 'solid' } }, cellPadding: { top: 6, right: 8, bottom: 6, left: 8 } } }, header: { left: { type: 'image', src: $('Company Settings').first().json.companyLogoUrl, width: 56, align: 'left' }, right: $('Company Settings').first().json.companyName, excludeFirstPage: true }, footer: { center: 'Page ${pageNumber} / ${totalPages}' } }) }}"
}
},
"credentials": {
"autypeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "ded5e98f-e6c8-406b-968f-bfa48a44a6fc",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-1200
],
"parameters": {
"width": 528,
"height": 980,
"content": "## Generate Styled Markdown Report with Image Upload\nThis workflow renders a business quarter report from **Extended Markdown** with full styling, charts, tables, and a temporarily uploaded image.\n\n### How it works\n1. **Company Settings** \u2014 Set company name, logo URL, brand colors, font, and a report image URL. Change these to match your brand.\n2. **Download Report Image** \u2014 Fetches the image from the URL as binary data.\n3. **Upload Temp Image** \u2014 Uploads the image to Autype as a temporary rendering image (expires after 24 h). Returns a `refPath` like `/temp-image/{id}`.\n4. **Render Markdown Report** \u2014 Sends the Extended Markdown content to Autype. The markdown references the uploaded image via its `refPath`. Styling defaults (fonts, colors, header with logo, footer with page numbers) are passed as JSON.\n\n### Setup\n1. Install **n8n-nodes-autype** via **Settings \u2192 Community Nodes** (self-hosted n8n only).\n2. Get your API key at [app.autype.com](https://app.autype.com) \u2192 [API Keys](https://docs.autype.com/getting-started/editor/settings#api-keys).\n3. Add an **Autype API** credential in n8n with your API key.\n4. Select your credential in the Autype node.\n\n### Customization\n- Change output format: set `outputType` to `docx` or `odt` in the Render node.\n- Edit the markdown content directly in the Render node's **Markdown Content** field.\n- Adjust defaults JSON for different fonts, colors, or header/footer layout.\n\n> \u26a0\ufe0f This workflow uses the Autype community node and requires **self-hosted n8n**."
},
"typeVersion": 1
},
{
"id": "f9d78259-32ae-4f18-8db7-08ab53461c74",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
-528
],
"parameters": {
"color": 7,
"width": 220,
"height": 312,
"content": "### 1. Company Settings\nBrand colors, font, logo URL, and report image URL. Easy to swap for different companies."
},
"typeVersion": 1
},
{
"id": "200d34dd-1d9f-4186-9fdb-7199311f958c",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
336,
-528
],
"parameters": {
"color": 7,
"width": 420,
"height": 312,
"content": "### 2. Mock Image Download & Image Upload\nDownload an image \u2192 upload to Autype as temp image \u2192 get `refPath` for use in markdown."
},
"typeVersion": 1
},
{
"id": "726c5f55-3bb5-4dae-a15d-2094c0be964f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
-528
],
"parameters": {
"color": 7,
"width": 308,
"height": 312,
"content": "### 3. Render\nMarkdown content + defaults JSON \u2192 Autype renders PDF/DOCX. The uploaded image `refPath` is used directly as the image `src`."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "34c818fa-339f-4fd9-ab2c-a238237eecc7",
"connections": {
"Run Workflow": {
"main": [
[
{
"node": "Company Settings",
"type": "main",
"index": 0
}
]
]
},
"Company Settings": {
"main": [
[
{
"node": "Download Report Image",
"type": "main",
"index": 0
}
]
]
},
"Upload Temp Image": {
"main": [
[
{
"node": "Render Markdown Report",
"type": "main",
"index": 0
}
]
]
},
"Download Report Image": {
"main": [
[
{
"node": "Upload Temp Image",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
autypeApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
⚠️ Important: This workflow uses the Autype community node and requires a self-hosted n8n instance.
Source: https://n8n.io/workflows/13777/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.
[](https://youtu.be/c7yCZhmMjtI)
This automation organizes your n8n workflows files into categorizes (Active, Template, Done, Archived) and uploads them directly to a categorized Google Drive folders. It is designed to help users man
Create Animated Stories using GPT-4o-mini, Midjourney, Kling and Creatomate API. Uses httpRequest. Event-driven trigger; 51 nodes.