kipn.ai
Shared workflow report

πŸ’₯ Viral TikTok Video Machine: Auto-Create UGC with VEED Avatars -vide

Analyzed

Executive Summary
n8n
Production RiskHigh

Fragile expression β€” likely to fail when production data shape differs from test data β€” These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Cost ExposureCritical

Full dataset flows into a single AI or write node β€” For AI nodes, every record in the dataset becomes part of one prompt β€” token cost and failure risk scale directly with record count. A dataset that grows from 100 to 10,000 records causes a 100Γ— increase in cost for this one call.

Observability Gap

Side-effect node has no audit trail β€” If this action is disputed, replayed, or causes a data inconsistency, there is no structured record of what was sent, when, and with what data. Debugging requires cross-referencing n8n execution history with the external system's own logs.

53/ 100
Overall
Risk: HighCost: Critical
Reliability
0
Security
100
Cost Risk
77
Observability
52
AI Governance
100
Naming
100
Complexity
92
Nodes
35
Edges
35
External calls
10
LLM nodes
3
AI via HTTP
0
Loops
0
Error handlers
0
Unreachable
0
Max depth
19
Workflow Graph
Graph
35 nodes Β· 35 edges
100%
click a node to highlight its upstream & downstream paths
Controls Matrix
● Presentβ—‘ Partial● Missing
CheckDescriptionStatus
Failure Alerting

Failures silent β€” only visible in execution log

Missing
Retry on Failure

Transient failures cause permanent stops

Present
Request Timeouts

Slow providers can block execution indefinitely

Missing
Duplicate Prevention

Retry on write events creates duplicate records

Missing
Empty Response Handling

Zero-result lookups break downstream logic

Present
AI Output Limits

Output cost and parsing risk unbounded

Present
AI Output Format

Free-form output will break downstream parsers

2 of 3 AI nodes lack structured output

Partial
Activity Logging

Side effects unlogged

Missing
Write Deduplication

Webhook replays may create duplicate records

Present

Run this analysis on your own workflows

Break Points
1Fragile expressionRisk HighConfidence 90%1 node affected
Affected Nodes:
  • ElevenLabs Voice Synthesis
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `headerParameters.parameters[0].value`, change {{ $('Workflow Configuration').first().json.elevenLabsApiKey }} to {{ $('Workflow Configuration')?.first()?.json?.elevenLabsApiKey }}.

2Fragile expressionRisk HighConfidence 90%1 node affected
Affected Nodes:
  • FAL.ai Video Generation
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `headerParameters.parameters[0].value`, change {{ $('Workflow Configuration').first().json.falApiKey }} to {{ $('Workflow Configuration')?.first()?.json?.falApiKey }}.

3Timeout cascadeRisk HighConfidence 80%10 nodes affected
Affected Nodes:
  • Get Photo File from Telegram
  • Build Public Image URL
  • Search Trends with Perplexity
What happens:

If any provider in the chain is slow or unresponsive, the entire chain hangs. The maximum possible hang time is 10 Γ— the provider's default response timeout, which may exceed n8n's execution time limit and block downstream runs from starting.

Recommended Fix:

Set a timeout on each node in the chain. Consider whether intermediate results can be persisted (e.g., to a database) so that a partial retry can resume from a checkpoint rather than re-running the entire chain.


5Fragile expressionRisk MediumConfidence 90%1 node affected
Affected Nodes:
  • Search Trends with Perplexity
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `model`, change {{ $('Workflow Configuration').first().json.perplexityModel }} to {{ $('Workflow Configuration')?.first()?.json?.perplexityModel }}.
  • In `messages.message[0].content`, change {{ "Find the top 3 current viral trends related to: " + $('Extract Photo and Theme').item.json.message.caption + ". Focus on trending topics, hashtags, and content styles that are performing well on TikTok right now. " + "Be specific and actionable. Limit your response strictly to 3 results only β€” no more." }} to {{ "Find the top 3 current viral trends related to: " + $('Extract Photo and Theme')?.item?.json?.message?.caption + ". Focus on trending topics, hashtags, and content styles that are performing well on TikTok right now. " + "Be specific and actionable. Limit your response strictly to 3 results only β€” no more." }}.

6Fragile expressionRisk MediumConfidence 90%1 node affected
Affected Nodes:
  • Generate Script with GPT-4
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `messages.values[0].content`, change {{ $json.choices[0].message.content }} to {{ $json?.choices[0]?.message?.content }}.
  • In `messages.values[0].content`, change {{ $('Extract Photo and Theme').first().json.theme }} to {{ $('Extract Photo and Theme')?.first()?.json?.theme }}.

7Fragile expressionRisk MediumConfidence 90%1 node affected
Affected Nodes:
  • Generate Caption with GPT-4
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `messages.values[0].content`, change {{ $('Extract Photo and Theme').first().json.theme }} to {{ $('Extract Photo and Theme')?.first()?.json?.theme }}.

8Fragile expressionRisk MediumConfidence 90%1 node affected
Affected Nodes:
  • Save to Google Sheets
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `columns.value.IDEA`, change {{ $('Extract Photo and Theme').first().json.message.caption }} to {{ $('Extract Photo and Theme')?.first()?.json?.message?.caption }}.
  • In `columns.value.CAPTION`, change {{ $json.message.content }} to {{ $json?.message.content }}.
  • In `columns.value.URL AUDIO`, change {{ $('Upload Audio to Public URL').first().json.data.url }} to {{ $('Upload Audio to Public URL')?.first()?.json?.data?.url }}.
  • In `columns.value.URL IMAGE`, change {{ $('Build Public Image URL').first().json.data.url }} to {{ $('Build Public Image URL')?.first()?.json?.data?.url }}.
  • In `columns.value.URL VIDEO`, change {{ $('Download VEED Video').item.json.video.url }} to {{ $('Download VEED Video')?.item?.json?.video?.url }}.

9Missing timeoutRisk MediumConfidence 90%10 nodes affected
Affected Nodes:
  • Search Trends with Perplexity
  • Generate Script with GPT-4
  • ElevenLabs Voice Synthesis
What happens:

A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.

Recommended Fix:

Set a timeout under the node's Additional Options. A value of 10,000–30,000 ms (10–30 seconds) is a reasonable starting point for most APIs; adjust based on the provider's documented SLA.


10Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Youtube
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed β€” causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:
  • In `postContentText`, change {{ $('Save to Google Sheets').item.json.CAPTION }} to {{ $('Save to Google Sheets')?.item?.json?.CAPTION }}.
  • In `postContentMediaUrls`, change {{ $json.url }} to {{ $json?.url }}.
  • In `postCreateYoutubeOptionTitle`, change {{ $('Save to Google Sheets').item.json.IDEA }} to {{ $('Save to Google Sheets')?.item?.json?.IDEA }}.
Cost Hotspots

Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.

1Full dataset fed to one AI callMedium exposure20 pts2 nodes affected
Affected Nodes:
  • Download VEED Video
  • Get Photo File from Telegram
What happens:

token cost scales with record count

Recommended Fix:

Add a limit to the fetch node, or distribute records across calls using a loop with batching. If the AI node genuinely needs to reason about all records together, summarize or aggregate the data before passing it to reduce token exposure.

Raw Findings (46)
#Issue titleIssue descriptionAffected nodes
1ReliabilityAI output drives downstream logic without a structured format

Node "Generate Script with GPT-4" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured.

Generate Script with GPT-4High75%
2ReliabilityAI output drives downstream logic without a structured format

Node "Generate Caption with GPT-4" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured.

Generate Caption with GPT-4High75%
3ReliabilityExternal call with no timeout configured

Node "Search Trends with Perplexity" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive.

Search Trends with Perplexity, Generate Script with GPT-4, ElevenLabs Voice Synthesis, FAL.ai Video Generation, Generate Caption with GPT-4, Get Photo File from Telegram, Upload Audio to Public URL, Build Public Image URL, Download VEED Video, Send a videoHigh90%
4ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Search Trends with Perplexity" contains expression(s) with risky patterns that assume fields are always present.

Search Trends with PerplexityHigh90%
5ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Generate Script with GPT-4" contains expression(s) with risky patterns that assume fields are always present.

Generate Script with GPT-4High90%
6ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "ElevenLabs Voice Synthesis" contains expression(s) with risky patterns that assume fields are always present.

ElevenLabs Voice SynthesisHigh90%
7ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "FAL.ai Video Generation" contains expression(s) with risky patterns that assume fields are always present.

FAL.ai Video GenerationHigh90%
8ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Generate Caption with GPT-4" contains expression(s) with risky patterns that assume fields are always present.

Generate Caption with GPT-4High90%
9Cost RiskFull dataset flows into a single AI or write node

Node "Download VEED Video" fetches all records without a limit and passes the full dataset directly to "Generate Caption with GPT-4" (within 4 hops). No loop or batch distribution was found between them.

Download VEED Video, Generate Caption with GPT-4High80%
10ReliabilityNo error handler or failure notification path

Workflow has 13 high-risk nodes (external calls or writes) with no configured error workflow and no inline notification path. If a production execution fails, the failure only appears in execution history.

Workflow Configuration, Extract Photo and Theme, Search Trends with Perplexity, Generate Script with GPT-4, ElevenLabs Voice Synthesis, FAL.ai Video Generation, Generate Caption with GPT-4, Get Photo File from Telegram, Upload Audio to Public URL, Convert .mpga to .mp3, Build Public Image URL, Download VEED Video, Send a videoHigh85%
11ReliabilitySequential external chain with no timeouts β€” cascade hang risk

Nodes Get Photo File from Telegram, Build Public Image URL, Search Trends with Perplexity, Generate Script with GPT-4, ElevenLabs Voice Synthesis, Upload Audio to Public URL, FAL.ai Video Generation, Download VEED Video, Generate Caption with GPT-4, Send a video form a sequential chain of 10 external calls with no timeout configured on any node.

Get Photo File from Telegram, Build Public Image URL, Search Trends with Perplexity, Generate Script with GPT-4, ElevenLabs Voice Synthesis, Upload Audio to Public URL, FAL.ai Video Generation, Download VEED Video, Generate Caption with GPT-4, Send a videoHigh80%
12ReliabilityAPI response may be paginated β€” only first page processed

Node "Get Photo File from Telegram" fetches data without returnAll: true or visible pagination handling (no cursor/offset parameter updating per page).

Get Photo File from TelegramMedium60%
13ReliabilityAPI response may be paginated β€” only first page processed

Node "Download VEED Video" fetches data without returnAll: true or visible pagination handling (no cursor/offset parameter updating per page).

Download VEED VideoMedium60%
14ComplexityFinding: complexity nodes

Workflow contains 35 active nodes (threshold: >30 medium, >60 high, >100 critical).

β€”Medium100%
15ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Extract Photo and Theme" contains expression(s) with risky patterns that assume fields are always present.

Extract Photo and ThemeMedium85%
16ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Save to Google Sheets" contains expression(s) with risky patterns that assume fields are always present.

Save to Google SheetsMedium90%
17ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Get Photo File from Telegram" contains expression(s) with risky patterns that assume fields are always present.

Get Photo File from TelegramMedium75%
18ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Download VEED Video" contains expression(s) with risky patterns that assume fields are always present.

Download VEED VideoMedium90%
19ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Send a video" contains expression(s) with risky patterns that assume fields are always present.

Send a videoMedium75%
20ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Youtube" contains expression(s) with risky patterns that assume fields are always present.

YoutubeMedium85%
21ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Tiktok" contains expression(s) with risky patterns that assume fields are always present.

TiktokMedium85%
22ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Linkedin" contains expression(s) with risky patterns that assume fields are always present.

LinkedinMedium85%
23ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Facebook" contains expression(s) with risky patterns that assume fields are always present.

FacebookMedium85%
24ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Instagram" contains expression(s) with risky patterns that assume fields are always present.

InstagramMedium85%
25ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Threads" contains expression(s) with risky patterns that assume fields are always present.

ThreadsMedium85%
26ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Bluesky" contains expression(s) with risky patterns that assume fields are always present.

BlueskyMedium85%
27ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Pinterest" contains expression(s) with risky patterns that assume fields are always present.

PinterestMedium85%
28ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Twitter (X)" contains expression(s) with risky patterns that assume fields are always present.

Twitter (X)Medium85%
29Cost RiskFull dataset flows into a single AI or write node

Node "Get Photo File from Telegram" fetches all records without a limit and passes the full dataset directly to "Build Public Image URL" (within 1 hops). No loop or batch distribution was found between them.

Get Photo File from Telegram, Build Public Image URLMedium80%
30ReliabilityIrreversible write chain with no compensation path

Nodes Get Photo File from Telegram, Build Public Image URL perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated.

Get Photo File from Telegram, Build Public Image URLMedium75%
31ReliabilityIrreversible write chain with no compensation path

Nodes Build Public Image URL, ElevenLabs Voice Synthesis perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated.

Build Public Image URL, ElevenLabs Voice SynthesisMedium75%
32ReliabilityIrreversible write chain with no compensation path

Nodes ElevenLabs Voice Synthesis, Upload Audio to Public URL perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated.

ElevenLabs Voice Synthesis, Upload Audio to Public URLMedium75%
33ReliabilityIrreversible write chain with no compensation path

Nodes Upload Audio to Public URL, FAL.ai Video Generation perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated.

Upload Audio to Public URL, FAL.ai Video GenerationMedium75%
34ReliabilityIrreversible write chain with no compensation path

Nodes FAL.ai Video Generation, Send a video perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated.

FAL.ai Video Generation, Send a videoMedium75%
35ObservabilitySide-effect node has no audit trail

Node "ElevenLabs Voice Synthesis" performs a write node: "elevenlabs voice synthesis" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream.

ElevenLabs Voice SynthesisMedium70%
36ObservabilitySide-effect node has no audit trail

Node "FAL.ai Video Generation" performs a write node: "fal.ai video generation" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream.

FAL.ai Video GenerationMedium70%
37ObservabilitySide-effect node has no audit trail

Node "Get Photo File from Telegram" performs a write node: "get photo file from telegram" (sideeffect: external_write) operation with no logging or audit trail detected downstream.

Get Photo File from TelegramMedium70%
38ObservabilitySide-effect node has no audit trail

Node "Upload Audio to Public URL" performs a write node: "upload audio to public url" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream.

Upload Audio to Public URLMedium70%
39ObservabilitySide-effect node has no audit trail

Node "Build Public Image URL" performs a write node: "build public image url" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream.

Build Public Image URLMedium70%
40ObservabilitySide-effect node has no audit trail

Node "Send a video" performs a write node: "send a video" (sideeffect: external_write) operation with no logging or audit trail detected downstream.

Send a videoMedium70%
41ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Upload Video to BLOTATO" contains expression(s) with risky patterns that assume fields are always present.

Upload Video to BLOTATOLow85%
42ReliabilityFragile expression β€” likely to fail when production data shape differs from test data

Node "Update Status to "DONE"" contains expression(s) with risky patterns that assume fields are always present.

Update Status to "DONE"Low85%
43ReliabilityFinding: external without retry

Node "Search Trends with Perplexity" (n8n-nodes-base.perplexity) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Search Trends with PerplexityInfo70%
44ReliabilityFinding: external without retry

Node "Generate Script with GPT-4" (@n8n/n8n-nodes-langchain.openAi) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Generate Script with GPT-4Info70%
45ReliabilityFinding: external without retry

Node "Generate Caption with GPT-4" (@n8n/n8n-nodes-langchain.openAi) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Generate Caption with GPT-4Info70%
46ReliabilityFinding: external without retry

Node "Download VEED Video" (n8n-nodes-base.httpRequest) is a read-only external call with no retry configured.. sideEffect: read_only, role: external_read. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Download VEED VideoInfo70%

Catch workflow risks before they catch you