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 →
{
"name": "CWF-420 Visual Asset Planner Canonical",
"description": "Plans B-roll and visual asset requirements per script section.",
"nodes": [
{
"parameters": {},
"id": "trigger",
"name": "Trigger",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1,
"position": [
200,
300
]
},
{
"parameters": {
"jsCode": "const plan = {instance_id: 'VISUAL-' + Date.now(), artifact_family: 'visual_asset_plan_packet', schema_version: '1.0.0', producer_workflow: 'CWF-420', dossier_ref: $json.dossier_id, created_at: new Date().toISOString(), status: 'CREATED', payload: {visual_assets_planned: true, broll_sequences: [{section: 'intro', visual_style: 'cinematic', duration_seconds: 15}, {section: 'main', visual_style: 'supporting', duration_seconds: 45}, {section: 'conclusion', visual_style: 'resolution', duration_seconds: 10}], overlay_elements: ['text_highlights', 'graphics', 'transitions'], visual_grammar_applied: true}};\nreturn [{ json: { ...$json, cwf420_result: { status: 'COMPLETED', visual_asset_plan_packet: plan } } }];"
},
"id": "builder",
"name": "Builder",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
420,
300
]
},
{
"parameters": {
"jsCode": "try {\n const SkillLoader = require('../../../engine/skill_loader/skill_loader.js');\n const loader = new SkillLoader();\n\n if (!loader.skills_registry || Object.keys(loader.skills_registry).length === 0) {\n const initResult = await loader.initialize();\n if (initResult.status !== 'initialized') {\n throw new Error('Failed to initialize SkillLoader');\n }\n }\n\n const workflowId = 'CWF-420';\n const defaultSkillMap = {\"CWF-310\":\"M-001\",\"CWF-320\":\"M-001\",\"CWF-330\":\"M-001\",\"CWF-340\":\"M-001\",\"CWF-410\":\"M-001\",\"CWF-420\":\"M-001\",\"CWF-430\":\"M-001\",\"CWF-440\":\"M-001\",\"CWF-510\":\"M-001\",\"CWF-520\":\"M-001\",\"CWF-530\":\"M-001\"};\n const skillId = $json.skill_id || defaultSkillMap[workflowId] || 'M-001';\n const dossierId = $json.dossier_context?.dossier_id || $json.dossier_id || 'DOSSIER-UNSPECIFIED';\n\n const contextPacket = {\n dossier_id: dossierId,\n workflow_id: workflowId,\n ...(typeof $json.user_context === 'object' ? $json.user_context : {}),\n ...(typeof $json.route_context === 'object' ? $json.route_context : {})\n };\n\n const dossierState = typeof $json.dossier === 'object' ? $json.dossier : {};\n const result = await loader.executeSkill(skillId, contextPacket, dossierState);\n\n return [{\n json: {\n ...$json,\n phase8_runtime_probe: {\n workflow_id: workflowId,\n skill_id: skillId,\n status: result.status,\n had_error: result.status !== 'SUCCESS',\n error_message: result.status === 'SUCCESS' ? '' : String(result.error || ''),\n timestamp: new Date().toISOString()\n },\n runtime_packet: result.status === 'SUCCESS' ? (result.output || null) : null,\n skill_execution_result: result.status === 'SUCCESS' ? result : null,\n runtime: {\n had_error: result.status !== 'SUCCESS',\n error_message: result.status === 'SUCCESS' ? '' : String(result.error || '')\n }\n }\n }];\n} catch (error) {\n const message = String(error && error.message ? error.message : error);\n return [{\n json: {\n ...$json,\n phase8_runtime_probe: {\n workflow_id: 'CWF-420',\n skill_id: null,\n status: 'ERROR',\n had_error: true,\n error_message: message,\n timestamp: new Date().toISOString()\n },\n runtime_packet: null,\n skill_execution_result: null,\n runtime: { had_error: true, error_message: message }\n }\n }];\n}"
},
"id": "cwf_420_skill_runtime_probe_node",
"name": "Skill Runtime Probe Node",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
420,
300
]
}
],
"connections": {
"Trigger": {
"main": [
[
{
"node": "Skill Runtime Probe Node",
"type": "main",
"index": 0
}
]
]
},
"Builder": {
"main": [
[]
]
},
"Skill Runtime Probe Node": {
"main": [
[
{
"node": "Builder",
"type": "main",
"index": 0
}
]
]
}
},
"meta": {
"workflow_id": "CWF-420",
"phase": "phase4",
"vein": "media_vein",
"purpose": "Audio asset production (deferred).",
"implementation_depth": "phase_deferred_stub",
"owner_director": "narada",
"next_workflow": "CWF-430",
"canonical_file": "n8n/workflows/CWF-420.json",
"wf900_error_route": "WF-900"
},
"active": true
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
CWF-420 Visual Asset Planner Canonical. Uses executeWorkflowTrigger. Event-driven trigger; 3 nodes.
Source: https://github.com/justkalpane/Shadow-Creator-OS-Phase_01/blob/0447c2f91c0b7669a61f768fac60fa911acf2cc5/n8n/workflows/CWF-420.json — 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.
Reagendamiento. Uses executeWorkflowTrigger, redis, n8n-nodes-evolution-api, dataTable. Event-driven trigger; 73 nodes.
Agendamiento. Uses n8n-nodes-evolution-api, redis, dataTable, executeWorkflowTrigger. Event-driven trigger; 60 nodes.
Prevent concurrent workflow runs using Redis. Uses executeWorkflowTrigger, manualTrigger, stickyNote, executeWorkflow. Event-driven trigger; 43 nodes.
This workflow sets a small "lock" value in Redis so that only one copy of a long job can run at the same time. If another trigger fires while the job is still busy, the workflow sees the lock, stops e
Reputation Engine — Site Refresh. Uses httpRequest, executeWorkflowTrigger. Event-driven trigger; 35 nodes.