This workflow corresponds to n8n.io template #14757 — we link there as the canonical source.
This workflow follows the Form → Form Trigger recipe pattern — see all workflows that pair these two integrations.
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": "AxGstKa35NnYs0Ni",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "RenderIO MP4 to GIF",
"tags": [
{
"id": "Zkn4MatBRsM3Cbvi",
"name": "managed-as-code",
"createdAt": "2026-04-05T12:17:54.478Z",
"updatedAt": "2026-04-05T12:17:54.478Z"
}
],
"nodes": [
{
"id": "0fefabf0-9bfe-4c75-a662-76157007ed8a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
-224
],
"parameters": {
"width": 480,
"height": 704,
"content": "## RenderIO MP4 to GIF\n\n### How it works\n\n1. Triggers workflow upon form submission to input video URL.\n2. Converts the MP4 video to a GIF using [RenderIO](https://renderio.dev).\n3. Waits for an initial period before checking conversion status.\n4. Continuously checks if the conversion has completed.\n5. Provides a download link when conversion is complete.\n\n### Setup steps\n\n- [ ] Set up input form to submit MP4 URL\n- [ ] Configure RenderIO credentials for media conversion\n- [ ] Set conditional logic for completion status checks\n\n### Customization\n\nThe wait durations and conditions can be adjusted based on needs."
},
"typeVersion": 1
},
{
"id": "4cdd1e05-b12b-4d4a-86bc-3f1c2d04143d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1408,
-120
],
"parameters": {
"color": 7,
"width": 416,
"height": 304,
"content": "## Start and process video\n\nInitiate workflow and convert video from MP4 to GIF."
},
"typeVersion": 1
},
{
"id": "7a36fe77-3a1a-4c97-9bbf-a1dc9c749e11",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1856,
-120
],
"parameters": {
"color": 7,
"width": 416,
"height": 304,
"content": "## Initial wait and status check\n\nWait after processing and check if the conversion is complete."
},
"typeVersion": 1
},
{
"id": "246e1d33-f0cd-496b-ada0-e3ea3863ff5f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
-240
],
"parameters": {
"color": 7,
"width": 416,
"height": 352,
"content": "## Completion and download\n\nConditional check for completion and provide a download link."
},
"typeVersion": 1
},
{
"id": "6a00553e-fac1-45de-960a-b8b9174a5999",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2480,
112
],
"parameters": {
"color": 7,
"height": 320,
"content": "## Retry wait loop\n\nHandles waiting and retrying the status check if not complete."
},
"typeVersion": 1
},
{
"id": "a0afa978-9a06-4f4d-87c6-4c218491b8ea",
"name": "When Video Submitted",
"type": "n8n-nodes-base.formTrigger",
"position": [
1456,
24
],
"parameters": {
"options": {
"buttonLabel": "Convert"
},
"formTitle": "Convert MP4 to GIF",
"formFields": {
"values": [
{
"fieldLabel": "Video URL",
"placeholder": "https://media.renderio.dev/sample.avi",
"defaultValue": "https://media.renderio.dev/sample.avi",
"requiredField": true
}
]
},
"responseMode": "lastNode",
"formDescription": "Enter a video URL to convert it to GIF using RenderIO"
},
"executeOnce": true,
"typeVersion": 2.3,
"alwaysOutputData": false
},
{
"id": "fa4dc2cd-f80a-40ef-9719-fe8d4ef9a6a3",
"name": "Render MP4 to GIF",
"type": "n8n-nodes-renderio.renderio",
"position": [
1680,
24
],
"parameters": {
"inputFiles": {
"fileValues": [
{
"value": "={{ $json[\"Video URL\"] }}"
}
]
},
"outputFiles": {
"fileValues": [
{
"key": "out_gif",
"value": "output.gif"
}
]
},
"ffmpegCommand": "-i {{in_video}} {{out_gif}}"
},
"credentials": {
"renderioApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "da539484-4bc3-459c-b27c-8c83ee322b41",
"name": "Wait 10 Seconds Initial",
"type": "n8n-nodes-base.wait",
"position": [
1904,
24
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "f7b6a4e4-0ad3-457d-9d9e-026b740601fd",
"name": "Check Conversion Status",
"type": "n8n-nodes-renderio.renderio",
"position": [
2128,
24
],
"parameters": {
"commandId": "={{ $('Render MP4 to GIF').item.json.command_id }}",
"operation": "get"
},
"credentials": {
"renderioApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "884ca494-f5fc-4120-8744-f4e65bf96038",
"name": "If Conversion Complete",
"type": "n8n-nodes-base.if",
"position": [
2352,
-64
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "status-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "SUCCESS"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "42ddee9a-2f66-4a58-a258-56bfc75b707b",
"name": "Display Download Link",
"type": "n8n-nodes-base.form",
"position": [
2576,
-96
],
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "Conversion Complete!",
"completionMessage": "=Your GIF file is ready!\n\n[Download GIF]({{ $json.output_files.out_gif.storage_url }})"
},
"typeVersion": 2.3
},
{
"id": "19de08d8-044a-4696-aa7f-94ca3d2c2402",
"name": "Wait 30 Seconds Retry",
"type": "n8n-nodes-base.wait",
"position": [
2544,
272
],
"parameters": {
"amount": 30
},
"typeVersion": 1.1
}
],
"active": true,
"settings": {
"binaryMode": "separate",
"callerPolicy": "workflowsFromSameOwner",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "852e763b-3322-4ab2-945c-fe81d16a98d0",
"connections": {
"Render MP4 to GIF": {
"main": [
[
{
"node": "Wait 10 Seconds Initial",
"type": "main",
"index": 0
}
]
]
},
"When Video Submitted": {
"main": [
[
{
"node": "Render MP4 to GIF",
"type": "main",
"index": 0
}
]
]
},
"Wait 30 Seconds Retry": {
"main": [
[
{
"node": "Check Conversion Status",
"type": "main",
"index": 0
}
]
]
},
"If Conversion Complete": {
"main": [
[
{
"node": "Display Download Link",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 30 Seconds Retry",
"type": "main",
"index": 0
}
]
]
},
"Check Conversion Status": {
"main": [
[
{
"node": "If Conversion Complete",
"type": "main",
"index": 0
}
]
]
},
"Wait 10 Seconds Initial": {
"main": [
[
{
"node": "Check Conversion Status",
"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.
renderioApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Anyone who needs to automate video-to-GIF conversion without installing FFmpeg locally. Ideal for content creators, social media managers, and developers building media pipelines. Works on both n8n Cloud and self-hosted instances.
Source: https://n8n.io/workflows/14757/ — 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.
RenderIO MP4 to GIF. Uses formTrigger, n8n-nodes-renderio, form. Event-driven trigger; 12 nodes.
This interactive tutorial teaches you how to build in n8n from scratch, using a live walkthrough with real-time examples. Rather than static documentation, this guided workflow explains key n8n concep
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Credentials Transfer. Uses form, httpRequest, executeCommand, readWriteFile. Event-driven trigger; 22 nodes.
Waitlist Form Stored In Googlesheet With Email Verification Step. Uses googleSheets, emailSend, form, stickyNote. Event-driven trigger; 19 nodes.