by WeblineIndia
Automate Video Upload → Auto-Thumbnail → Google Drive This workflow accepts a video via HTTP upload, verifies it’s a valid video, extracts a thumbnail frame at the 5-second mark using FFmpeg (auto-installs a static build if missing), uploads the image to a specified Google Drive folder and returns a structured JSON response containing the new file’s details. Who’s it for Marketing / Social teams** who need ready-to-publish thumbnails from raw uploads. Developers** who want an API-first thumbnail microservice without standing up extra infrastructure. Agencies / Creators** standardizing assets in a shared Drive. How it works Accept Video Upload (Webhook) Receives multipart/form-data with file in field media at /mediaUpload. Response is deferred until the final node. Validate Upload is Video (IF) Checks {{$binary.media.mimeType}} contains video/. Non-video payloads can be rejected with HTTP 400. Persist Upload to /tmp (Write Binary File) Writes the uploaded file to /tmp/<originalFilename or input.mp4> for stable processing. Extract Thumbnail with FFmpeg (Execute Command) Uses system ffmpeg if available; otherwise downloads a static binary to /tmp/ffmpeg. Runs: ffmpeg -y -ss 5 -i -frames:v 1 -q:v 2 /tmp/thumbnail.jpg Load Thumbnail from Disk (Read Binary File) Reads /tmp/thumbnail.jpg into the item’s binary as thumbnail. Upload Thumbnail to Drive (Google Drive) Uploads to your target folder. File name is <original>-thumb.jpg. Return API Response (Respond to Webhook) Sends JSON to the client including Drive file id, name, links, size, and checksums (if available). How to set up Import the workflow JSON into n8n. Google Drive Create (or choose) a destination folder; copy its Folder ID. Add Google Drive OAuth2 credentials in n8n and select them in the Drive node. Set the folder in the Drive “Upload” node. Webhook The endpoint is POST /webhook/mediaUpload. Test: curl -X POST https://YOUR-N8N-URL/webhook/mediaUpload \ -F "media=@/path/to/video.mp4" FFmpeg Nothing to install manually: the Execute Command node auto-installs a static ffmpeg if it’s not present. (Optional) If running n8n in Docker and you want permanence, use an image that includes ffmpeg. Response body The Respond node returns JSON with file metadata. You can customize the fields as needed. (Optional) Non-video branch On the IF node’s false output, add a Respond node with HTTP 400 and a helpful message. Requirements n8n instance with Execute Command node enabled (self-hosted/container/VM). Outbound network** access (to fetch static FFmpeg if not installed). Google Drive OAuth2** credential with permission to the destination folder. Adequate temp space in /tmp for the uploaded video and generated thumbnail. How to customize Timestamp**: change -ss 5 to another second, or parameterize it via query/body (e.g., timestamp=15). Multiple thumbnails**: duplicate the FFmpeg + Read steps with -ss 5, -ss 15, -ss 30, suffix names -thumb-5.jpg, etc. File naming**: include the upload time or Drive file ID: {{ base + '-' + $now + '-thumb.jpg' }}. Public sharing: add a **Drive → Permission: Create node (Role: reader, Type: anyone) and return webViewLink. Output target: replace the Drive node with **S3 Upload or Zoho WorkDrive (HTTP Request) if needed. Validation**: enforce max file size/MIME whitelist in a small Function node before writing to disk. Logging**: append a row to Google Sheets/Notion with sourceFile, thumbId, size, duration, status. Add-ons Slack / Teams notification** with the uploaded thumbnail link. Image optimization** (e.g., convert to WebP or resize variants). Retry & alerts** via error trigger workflow. Audit log** to a database (e.g., Postgres) for observability. Use Case Examples CMS ingestion**: Editors upload videos; workflow returns a thumbnail URL to store alongside the article. Social scheduling**: Upload longform to generate a quick hero image for a post. Client portals**: Clients drop raw footage; you keep thumbnails uniform in one Drive folder. Common troubleshooting | Issue | Possible Cause | Solution | | ----------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | | ffmpeg: not found | System lacks ffmpeg and static build couldn’t download | Ensure outbound HTTPS allowed; keep the auto-installer lines intact; or use a Docker image that includes ffmpeg. | | Webhook returns 400 “not a video” | Wrong field name or non-video MIME | Send file in media field; ensure it’s video/*. | | Drive upload fails (403 / insufficient permissions) | OAuth scope or account lacks folder access | Reconnect Drive credential; verify the destination Folder ID and sharing/ownership. | | Response missing webViewLink / webContentLink | Drive node not returning link fields | Enable link fields in the Drive node or build URLs using the returned id. | | 413 Payload Too Large at reverse proxy | Proxy limits on upload size | Increase body size limits in your proxy (e.g., Nginx client_max_body_size). | | Disk full / ENOSPC | Large uploads filling /tmp | Increase temp storage; keep Cleanup step; consider size caps and early rejection. | | Corrupt thumbnail or black frame | Timestamp lands on a black frame | Change -ss or use -ss before -i vs. after; try different seconds (e.g., 1–3s). | | Slow extraction | Large or remote files; cold FFmpeg download | Warm the container; host near upload source; keep static ffmpeg cached in image. | | Duplicate outputs | Repeat requests with same video/name | Add a de-dup check (query Drive for existing <base>-thumb.jpg before upload). | Need Help? Want this wired to S3 or Zoho WorkDrive or to generate multiple timestamps and public links out of the box? We're happy to help.
by CustomJS
> ⚠️ Notice: > This workflow uses the HTML to Docx node from customjs.space, which requires a self-hosted n8n instance and a CustomJS API key. Landingpage → NDA Word Document (Docx) → Email Workflow This workflow demonstrates how to: Serve a landing page for requesting an NDA. Receive form submissions from users. Generate a Word Document (Docx) version of the NDA populated with the submitted data. Send the completed NDA via email to a recipient. Workflow Overview 1. Landingpage Endpoint Node:** Landingpage Endpoint (Webhook) Hosts the landing page and passes the URL dynamically to the HTML node. 2. Set Form Endpoint Node:** Set Form Endpoint Stores the landing page webhook URL into a variable FormEndpoint for the HTML form to submit to. 3. HTML for Landingpage Node:** HTML for Landingpage Renders a user-friendly landing page with a form for users to fill in their personal details: First Name Last Name Address House No. Postal Code City Country Includes success and error messages after submission. Submits data as JSON to the FormData Endpoint. 4. Respond to Webhook Node:** Respond to Webhook Returns the landing page HTML to the visitor when accessing the landing page URL. 5. FormData Endpoint Node:** FormData Endpoint (Webhook) Receives the submitted form data from the landing page. Passes data to the NDA (HTML Version) node. 6. NDA (HTML Version) Node:** NDA (HTML Version) Generates a personalized NDA document in HTML using the submitted form data: Populates recipient details (name, address, city, country, etc.) NDA clauses include: Definition of Confidential Information Obligations of the Recipient Exclusions Duration Return or Destruction of information Governing Law (England & Wales) 7. HTML to Docx Node:** HTML to Docx Converts the HTML NDA to a Word Document (Docx) using the CustomJS PDF/Docx Toolkit. Requires a CustomJS API key (Coding Service credential). 8. Send Email Node:** Send email Sends the generated NDA Docx as an email attachment. Email configuration: From: test@test.de To: test@testmail.com Subject: NDA Body Text: Hello, Here is the requested NDA form. Best Henrik Uses SMTP credentials for sending emails. Notes Sticky Notes** provide internal documentation and guidance for the workflow: Sticky Note1 – Landingpage server info Sticky Note – FormData endpoint info Dynamic Form Submission**: The form posts JSON to the FormData Endpoint. Automation Flow**: Landingpage → Form Submission → NDA HTML → Docx → Email Requirements Self-hosted n8n instance CustomJS API key SMTP credentials Optional: Tailwind CSS CDN for landing page styling Customization Tips Landing Page Styling**: Adjust the HTML for Landingpage node for branding, colors, or additional fields. NDA Content**: Edit the NDA (HTML Version) node to change NDA clauses or layout. Email Settings**: Change Send email node to modify sender, recipient, or message content. Field Mapping**: Ensure all form input names match the NDA template placeholders.
by Florian Standhartinger
Generate PDF invoices from webhook data with PDFMint Who's it for Anyone whose shop, billing system or internal tool can POST JSON and needs a finished PDF invoice back in the same request — without running a headless browser, and without a template editor to log into. How it works Receive invoice data accepts a POST with the customer, the line items and the currency. Set your company details is the one node you edit: company name, address, VAT rate, payment terms and footer note. Check the request is complete rejects a request that has no customer or no line items before a PDF is rendered, so a broken payload gets a readable 422 instead of an invoice that says "undefined". Calculate line totals and VAT does the arithmetic in one place: per-line amounts, subtotal, VAT at your rate, grand total, and the due date derived from your payment terms. The HTML stays a layout, not a calculator. Render the invoice as PDF builds the document with PDFMint. The layout is plain HTML and CSS inside the node, so you change the design by editing markup. Did the render succeed? checks the render result. On success Return the PDF answers the original request with the file; if PDFMint could not be reached or refused the job, Explain what went wrong and Return the error as JSON answer with an error status (422 for a bad payload, 500 when the render itself fails) and the reason. The caller always gets an answer. How to set up Add a PDFMint credential (free plan: 10 documents a month, no card). Open Set your company details and put in your own company name, address, VAT rate and payment terms. Activate the workflow and POST to the production webhook URL. Requirements A PDFMint API key from pdf.mintapis.com (free plan: 10 documents a month, no card). This template uses a community node — it installs on n8n Cloud and on self-hosted n8n. How to customize Edit the HTML in Render the invoice as PDF for your own branding — line items are looped in one expression, so any number of rows works. Set vat_percent to 0 if you do not charge VAT. Swap Return the PDF for a Gmail, Drive or S3 node to deliver the invoice instead of returning it.
by Sabrina Ramonov 🍄
Description This automation publishes to 9 social platforms daily! Manage your content in a simple Google Sheet. When you set a post's status to "Ready to Post" in your Google Sheet, this workflow grabs your image/video from your Google Drive, posts your content to 9 social platforms, then updates the Google Sheet post status to "Posted". Overview 1. Trigger: Check Every 3 Hours Check Google Sheet for posts with Status ""Ready to Post"" Return 1 post that is ready to go 2. Upload Media to Blotato Fetch image/video from Google Drive Upload image/video to Blotato 3. Publish to Social Media via Blotato Connect your Blotato account Choose your social accounts Either post immediately or schedule for later Includes support for images, videos, slideshows, carousels, and threads Setup Sign up for Blotato Generate Blotato API Key by going to Settings > API > Generate API Key (paid feature only) Ensure you have "Verified Community Nodes" enabled in your n8n Admin Panel. Install "Blotato" community node. Create credential for Blotato. Connect your Google Drive to n8n: https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service Copy this sample Google Sheet. Do NOT change the column names, unless you know what you're doing: https://docs.google.com/spreadsheets/d/1v5S7F9p2apfWRSEHvx8Q6ZX8e-d1lZ4FLlDFyc0-ZA4/edit Make your Google Drive folder containing images/videos PUBLIC (i.e. Anyone with the link) Complete the 3 setup steps shown in BROWN sticky notes in this template Troubleshooting Checklist your Google Drive is public column names in your Google Sheet match the original example file size < 60MB; for large files, Google Drive does not work, use Amazon S3 instead 📄 Documentation Full Tutorial Troubleshooting Check your Blotato API Dashboard to see every request, response, and error. Click on a request to see the details. Need Help? In the Blotato web app, click the orange button on the bottom right corner. This opens the Support messenger where I help answer technical questions
by Blurit
This n8n template demonstrates how to use Blurit to anonymize faces and/or license plates in images or videos directly within your workflow. Use cases include: automatically anonymizing dashcam videos, securing photos before sharing them publicly, or ensuring compliance with privacy regulations like GDPR. How it works The workflow starts with a Form Trigger where you can upload your image or video file. An HTTP Request node authenticates with the BlurIt API using your Client ID and Secret. The file is then uploaded to BlurIt via an HTTP Request to create a new anonymization task. A polling loop checks the task status until it succeeds. Once complete, the anonymized media is retrieved and saved using a Write Binary File node. How to use Replace the placeholder credentials in the Set Auth Config node with your BlurIt Client ID and Secret (found in your BlurIt Developer Dashboard). Execute the workflow, open the provided form link, and upload an image or video. The anonymized file will be written to your chosen output directory (or you can adapt the workflow to upload to cloud storage). Requirements A BlurIt account and valid API credentials (Client ID & Secret). A running instance of n8n (cloud or self-hosted). (Optional) Access to a shared folder or cloud storage service if you want to automate file delivery. Need Help? Contact us at support@blurit.io, or visit the BlurIt Documentation. Happy Coding!
by Viktor Klepikovskyi
Nested Loops with Sub-workflows Template Description This template provides a practical solution for a common n8n challenge: creating nested loops. While a powerful feature, n8n's standard Loop nodes don't work as expected in a nested structure. This template demonstrates the reliable workaround using a main workflow that calls a separate sub-workflow for each iteration. Purpose The template is designed to help you handle scenarios where you need to iterate through one list of data for every item in another list. This is a crucial pattern for combining or processing related data, ensuring your workflows are both clean and modular. Instructions for Setup This template contains both the main workflow and the sub-workflow on a single canvas. Copy the sub-workflow part of this template (starting with the Execute Sub-workflow Trigger node) and paste it into a new, empty canvas. In the Execute Sub-workflow node in the main workflow on this canvas, update the Sub-workflow field to link to the new workflow you just created. Run the main workflow to see the solution in action. For a detailed walkthrough of this solution, check out the full blog post
by amudhan
This workflow uses Strapi as a CMS and then cross posts new blog posts to Medium and Dev.to.
by amudhan
This workflow uses n8n to extract the names of all the posts from the Hackernoon homepage.
by Navneet Singh Arora
AI Resume Job Title Extractor with Google Gemini Overview This n8n template demonstrates how to use Google Gemini AI to analyze a PDF resume and extract the candidate's current or most relevant job title as a clean search string. It’s a powerful utility for anyone building automated talent pipelines, lead enrichment tools, or profile categorization systems. 🚀 How it works File Input: The workflow begins by reading a resume (PDF) from a local storage directory via the Read/Write Files from Disk node. Parsing: The Extract from File node handles the heavy lifting of converting the PDF binary into indexed plain text. AI Analysis: The extracted text is sent to Google Gemini. A specialized prompt instructs the model to identify the professional role and output only a single, clean search string (avoiding any conversational filler). Data Structuring: The Set (Return) node captures the AI's output and raw text, making it ready for downstream use or for return to a parent "caller" workflow. 🎮 How to use File Path: Update the File Selector in the "Read/Write Files from Disk" node to point to your resume (e.g., /home/node/.n8n-files/My-Resume.pdf). API Credentials: Set up your Google Gemini (PaLM) API credentials in the Gemini node. Modular Use: This workflow is configured with an Execute Workflow Trigger, meaning you can call it as a "sub-workflow" from larger automation stacks to instantly enrich data with professional titles. ⚙️ Requirements Google Gemini API Key n8n Environment: Designed for self-hosted instances with local file access (can be adapted for Google Drive or S3 by swapping the first node). 🎯 Use Cases Job Matching: Automatically generate search queries for job boards based on a user's resume. CRM Enrichment: Keep your candidate lists up-to-date with current professional titles. Talent Discovery: Categorize thousands of profiles instantly without manual review.
by System Admin
Tagged with: , , , ,
by Terence Hielscher
How it works Every morning, this n8n workflow automatically monitors all new Austrian public procurement notices from official EU sources. easybits.tech extracts structured data from each tender PDF: title, contracting authority, federal state, contract value, submission deadline, CPV code and contact email — same JSON schema every time, regardless of document layout or language. Relevant opportunities arrive as formatted Slack alerts within minutes of publication. Austria's public sector awards over €50 billion in contracts annually across construction, IT, consulting and healthcare. Finding relevant tenders manually means checking multiple portals and reading through PDFs every day. This workflow eliminates that entirely. What makes this different Extraction runs on the actual tender PDF via easybits.tech — not just portal metadata. Every Slack alert includes title, contracting authority, federal state, contract value, deadline, CPV code, contact email and a direct PDF link. The contract value filter is fully adjustable. Change the €100k minimum in the filter node and all future alerts update automatically. Extend this workflow This workflow is the data foundation for a full AI tender intelligence system: Vector database** (Qdrant, Pinecone, Supabase) — store all extracted tenders as searchable vectors for semantic retrieval Q&A bot via Slack slash command** — ask "Which IT tenders are open in Vienna over €500k?" and get AI-generated answers with citations from the original PDFs Any messaging platform** — replace Slack with Telegram, WhatsApp, Microsoft Teams, Discord or Email in one node swap Automatic application drafting** — use extracted tender fields to pre-fill bid templates and submission documents automatically For advisory on extending this workflow contact easybits.tech Set up steps Create a free easybits.tech account and add your API key as a credential in n8n Replace the Slack Webhook URL in the Send Slack Alert node with your own Adjust the €100k contract value threshold in the Filter: Min. €100k Value node to match your needs Activate the workflow — it runs automatically every morning at 7am Prerequisites easybits.tech account (free tier available) — for PDF data extraction Slack workspace with incoming webhooks enabled n8n instance running as a service Works for any EU country — contact easybits.tech for setup support. Setup time: approximately 15 minutes
by amudhan
Companion workflow for blogpost