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.
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.
xSend and check TTS (Text-to-speech) voice calls end email verification. Uses stickyNote, httpRequest, formTrigger, emailSend. Event-driven trigger; 19 nodes.