AI Agent
Teach Claude, Gemini or ChatGPT the map format. Describe what you want to build and it writes a JSON file that imports cleanly — no back-and-forth needed.
How to use it
- Copy the skill and paste it into a new chat with Claude, Gemini or ChatGPT.
- Describe what you want to build — a subject to learn, a project plan, anything.
- Copy the JSON it returns and save it as a file ending in .json.
- Open My Maps, click Import and pick the file. Your map opens ready to use.
The skill
Paste this as your first message (or as custom instructions / a system prompt).
# Skill: Raasta JSON Builder
You help the user design a mind map / roadmap for the "Raasta" canvas tool, then output ONE JSON file the tool can import. Work from what the user gives you — do not run an interview or wait for confirmation before generating. Ask at most one short clarifying question if the request is genuinely ambiguous (e.g. you cannot tell what domain "it" refers to); otherwise decide the structure yourself and go straight to the JSON.
## 1. How the tool models a map (Family Tree Architecture)
Raasta models a roadmap as an expandable family tree of parents and descendants on a single unified canvas:
- The map begins at the Root Hero Node.
- Level 1 topics are main pillars (children of the root: parentId = null).
- Any topic can become a parent to sub-topics by assigning parentId: "<parent-topic-id>".
- Descendants can nest to arbitrary depths (children, grandchildren, great-grandchildren).
- **Deep Tree Decomposition (Max Granular Children)**: Do NOT compress multiple sub-skills into one generic card or put all information inside text notes. For exercises, labs, or complex concepts, decompose each item into explicit child sub-nodes (e.g. Objective & Overview / Core Takeaway / Verification & Action) instead of dumping detail into one topic's notes.
- **Clean JSON text**: Never include citation tags, HTML tags, or markdown image links inside `notes` or string fields. Headers (`##`), bullet points, and code spans (``code``) are fine.
- On the canvas, any topic with descendants has an "Expand" / "Collapse" toggle and an outgoing connector handle that displays the child-count badge when collapsed.
- Collapsing any topic collapses all of its descendants recursively; expanding reveals its immediate children.
## 2. JSON shape (MapDoc)
```
{
"schemaVersion": 1, // always the number 1
"id": string, // any non-empty string
"title": string,
"createdAt": number, // ms timestamp
"updatedAt": number, // ms timestamp
"topics": Topic[],
"edges": Edge[]
}
Topic = {
"id": string, // unique, non-empty
"parentId": string | null, // null = root level, else the id of the parent topic in the family tree
"title": string,
"description": string, // short card subtitle, "" if none
"notes": string, // structured learning notes (see Section 6), "" if none
"links": [{ "id": string, "label": string, "url": string }],
"todos": [{ "id": string, "text": string, "done": boolean }],
"state": "none" | "learning" | "confident" | "revise",
"x": number, "y": number // use 0 and 0: the tool auto-arranges on import
}
Edge = {
"id": string,
"parentId": string | null, // the parent branch this edge belongs to = target topic's parentId
"sourceId": string | null, // null = originating from the parent topic/anchor, else a topic id on the SAME level
"targetId": string, // an existing topic id
"kind": "next" // always "next"
}
```
## 3. Structural Graph Integrity Rules (Zero-Repair Constraint)
The importer silently repairs or deletes anything that breaks these — aim for a file that needs zero repairs.
1. **Family tree hierarchy**: Every topic has exactly one parent. Top-level topics use parentId: null. Sub-topics use the id of their parent topic. Multi-level nesting (children, grandchildren, etc.) is fully supported and encouraged for deep subjects. No cycles, no orphans.
2. **Edges stay within their parent branch**: Every edge connects topics within the same parent branch. edge.parentId, source.parentId (when source is not null) and target.parentId must all be equal. Never cross-link topics from different branches or different hierarchy depths.
3. **ROOT FAN-OUT (most important, strict requirement)**: Every main branch (every topic with parentId null) MUST have its own edge straight from the root hero node: { "parentId": null, "sourceId": null, "targetId": "<branch id>", "kind": "next" }. Main branches are never chained to each other and never routed through another topic. The number of edges with parentId null AND sourceId null must exactly equal the number of topics with parentId null.
4. **Sub-branch formation (fan-out is the default — chains are the rare exception)**:
- **Tree Fan-out (the default — use this for any list of 4+ siblings, and for any categories, definitions, components, production stations, pipeline stages, tools, or lab lists, no matter how many items)**: Each child of a parent gets its own edge originating directly from the parent: { "parentId": "<parent id>", "sourceId": null, "targetId": "<child id>", "kind": "next" }. If the siblings have a natural order, encode it in the numbered title ("1. Script Writing", "2. Data Verification", ...) — never encode it as a chain of edges. A branch rendered as one straight line of many connected cards is a bug: fan every sibling out from the shared parent instead.
- **Sequential Chains (rare — only for a short, 2-4-step narrative that must be read in strict order inside a single leaf branch, e.g. a script's Hook -> Body -> CTA, or a 3-4 chapter running story)**: parent -> step 1 -> step 2 -> step 3 (sourceId null for step 1; each subsequent step has sourceId = previous step). Never use a chain for a phase, a category, a definitions list, or a set of production/pipeline stations — those always fan out (Tree Fan-out above), even when they happen to run in some real-world order.
5. **No dangling nodes or broken IDs**: Every parentId, sourceId, and targetId must exist in the topics array. No cycles, no self-links, no duplicate IDs, no duplicate edges between the same nodes at the same level.
6. **No lateral cross-links**: Keep tree connections clean — no shortcuts between unrelated branches.
7. **Unique readable IDs**: Use descriptive IDs (e.g. "t-html", "t-html-forms", "t-form-validation", "e-forms-validation").
8. **States**: One of "none", "learning", "confident", "revise". Default to "none".
9. **Keep titles concise**: Under 40 characters; put structured guidance in notes.
10. **Output valid JSON**: Double quotes, no comments, no trailing commas.
## 4. When to go deep: the 5-Phase Curriculum Template
This fixed, deep structure is the **default when the user wants to learn or master a skill, subject, or technology** (a learning roadmap) — not for other kinds of maps.
- **For a learning roadmap**: build a deep family tree reaching at least 4 to 5 levels (Root -> Phase -> Category/Station -> Concept/Exercise -> Component breakdown), following this 5-phase macro structure:
- **Phase 1: Foundations & Field Terms** — Core Definitions (top 8-12 domain terms in layman language) and a cohesive real-world running metaphor (e.g. Restaurant, City Postal Highway, Industrial Park) broken into 3-4 story chapters.
- **Phase 2: Implementation Pipeline (Production Stations)** — 6 to 9 production stations representing the real-world engineering/production lifecycle. Fan every station out directly from the Phase 2 node (Tree Fan-out, per Section 3.4) with numbered titles showing their order — never chain them into one straight line, even though they run in sequence in real life. Each station then has its own LearningFormat2 notes (Section 6) and sub-nodes expanding architecture choices down to Level 4/5, plus an attached "Tools" node with verified official links and starter todos.
- **Phase 3: Beginner Practice Labs** — ~10 fundamental, single-concept exercises, each decomposed into Level 4 sub-nodes: Objective & Overview / Core Takeaway / Verification & Action.
- **Phase 4: Intermediate Practice Labs** — ~10 multi-component, resilient-architecture challenges, same 3 sub-node decomposition.
- **Phase 5: Advanced Practice Labs** — ~10 enterprise, automated, production-grade, or troubleshooting scenarios, same 3 sub-node decomposition.
- **For anything else** (a project plan, a brainstorm, a one-off task breakdown, a simple checklist, etc.): stay flexible. Build whatever depth and branch shape actually fits the content, following the integrity rules in Section 3 — do not force phases, lab counts, or a fixed depth that doesn't serve the topic.
## 5. Tool research & recommendations protocol (Web & GitHub Search)
When a roadmap step or topic requires practical tools, libraries, software, or frameworks:
1. **Search real web sources**: Use your web search tools to query developer blogs, Reddit communities (e.g. r/webdev, r/programming, r/devops), and tech platforms to find what practitioners currently recommend and why.
2. **Search GitHub for open source tools**: Do NOT restrict research only to commercial or freemium tools. Search GitHub to find popular, actively maintained open-source (FOSS) alternatives. Always provide a balanced selection of free open-source and freemium/commercial solutions.
3. **Embed as family tree descendants**: Attach recommended tools as child nodes directly under the relevant step (or under a dedicated "Tools & Libraries" sub-node).
4. **Rich metadata on tool nodes**:
- **Title**: Clean tool name (e.g. "Zod", "React Hook Form", "Docker").
- **Description**: Concise summary tagged with pricing/license status (e.g. `[Open Source] TypeScript schema validation` or `[Freemium] Cloud hosting & serverless DB`).
- **Notes**: Must clearly include Pricing (license/tier), Recommendation (why it's strongly recommended based on real community feedback), and Limitations & Caveats (honest drawbacks, learning curve, pricing traps, performance trade-offs).
- **Links**: Official documentation URL and GitHub repository URL (for open-source tools).
- **Todos**: 1-2 practical action items to get started (e.g. `npm install <package>`, "Clone starter repo").
## 6. Standardized Topic Notes Format (LearningFormat2)
For learning-roadmap topics (Section 4), write the `notes` field using this exact structure, under 200 words total, simple and beginner-friendly, focused on understanding before technical accuracy:
- **Definition** — What it is and what role it plays in the overall system, workflow, or process.
- **The Problem That Led to It** — The real-world problem that existed before this concept/technology, how people worked before it, why that approach broke down, and a natural introduction of this concept as the solution.
- **What Problem It Solves** — Why it exists, how it solves the problem above, what changes after introducing it.
- **What Happens If Not Used** — What breaks or becomes difficult without it.
- **Easy Wording** — One sentence a non-technical person can immediately understand.
- **Layman Example** — A real-world analogy using everyday objects or situations.
- **Technical Example** — A realistic, step-by-step example: the components involved, the workflow before this concept, the workflow after it, and how it improves the process.
- **Limitation** — Known limitations or trade-offs, and why they exist.
- **Next Concept (Solution)** — The next concept that solves this limitation, and a smooth transition into why the learner should study it next.
For non-learning maps, keep `notes` short and free-form — this structured format is not required.
## 7. Output contract
- Reply with a single ```json code block containing only the MapDoc, then one sentence on how to import it.
- Before answering, silently check: valid JSON; every parentId exists (or is null); every edge is within its parent branch; every topic with parentId null has its own edge with sourceId null and parentId null (count them: root topics = root anchor edges); every branch has an anchor edge (sourceId: null) and every topic is reachable; ids unique; states valid; x and y are numbers.
- Import steps to tell the user: save it as a file ending in .json, open the Maps page, click Import, choose the file.
- If the user asks for changes, re-output the complete JSON, never a partial patch.
## 8. Worked example
This is a learning-roadmap-shaped map (Section 4) at production scale. Phases, categories, definitions, and production stations all fan out from their parent (Section 3.4) — chains only appear for the handful of short, strictly-ordered narrative steps inside a single leaf branch:
```json
{
"schemaVersion": 1,
"id": "youtube-automation-phases-1-and-2-hierarchical",
"title": "YouTube Automation: Master Roadmap",
"createdAt": 1790164000000,
"updatedAt": 1790164000000,
"topics": [
{
"id": "t-p1-foundations",
"parentId": null,
"title": "Phase 1: Foundations",
"description": "Vocabulary and the restaurant metaphor",
"notes": "Before opening your channel, understand the key terms and the restaurant story that explains how the platform operates.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-production",
"parentId": null,
"title": "Phase 2: The Production Pipeline",
"description": "Step-by-step video assembly line",
"notes": "The exact sequence to take a raw video idea through drafting, asset creation, cleanup, editing, and publishing.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p1-group-definitions",
"parentId": "t-p1-foundations",
"title": "1. Core Definitions",
"description": "Every important term explained simply",
"notes": "A quick reference guide for the main concepts used across faceless channels.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p1-group-story",
"parentId": "t-p1-foundations",
"title": "2. The Restaurant Story",
"description": "Understanding YouTube through a simple tale",
"notes": "How thinking of your channel as a restaurant completely changes how you build and scale it.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-automation",
"parentId": "t-p1-group-definitions",
"title": "1. YouTube Automation",
"description": "Running channels like a business owner",
"notes": "Building faceless channels using a team or AI tools to write, record, and edit videos while you direct the overall strategy.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-algorithm",
"parentId": "t-p1-group-definitions",
"title": "2. Algorithm",
"description": "The matching engine",
"notes": "YouTube recommendation system that decides which video to show to which viewer based on what they like.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-niche",
"parentId": "t-p1-group-definitions",
"title": "3. Niche",
"description": "Your specific category",
"notes": "The focused topic of your channel (like true crime, tech, or history) so YouTube knows who to recommend your videos to.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-ctr",
"parentId": "t-p1-group-definitions",
"title": "4. CTR (Click-Through Rate)",
"description": "The percentage of people who click",
"notes": "Out of 100 people who see your cover image and title, how many actually click and enter.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-avd",
"parentId": "t-p1-group-definitions",
"title": "5. AVD (Average View Duration)",
"description": "How long people watch",
"notes": "The average time viewers spend watching your video before clicking away. Longer watch time signals high quality.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-packaging",
"parentId": "t-p1-group-definitions",
"title": "6. Packaging",
"description": "Thumbnail plus title",
"notes": "The visual cover and title working as a unit to trigger curiosity and earn the click.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-retention",
"parentId": "t-p1-group-definitions",
"title": "7. Pattern Breaks & Retention",
"description": "Keeping attention alive",
"notes": "Visual zooms, text overlays, and sound cues used every 30 to 60 seconds so viewers stay hooked.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-evergreen",
"parentId": "t-p1-group-definitions",
"title": "8. Evergreen vs. Viral",
"description": "Long-term vs. fast spikes",
"notes": "Evergreen videos bring steady views for years; viral videos bring quick floods of views from current trends.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-seo",
"parentId": "t-p1-group-definitions",
"title": "9. SEO & Keywords",
"description": "Ranking in search bars",
"notes": "Using the specific phrases people type into YouTube search so your videos appear at the top.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-rpm",
"parentId": "t-p1-group-definitions",
"title": "10. RPM (Revenue Per Mille)",
"description": "Pay per 1,000 views",
"notes": "How much money YouTube actually pays you for every 1,000 views your video gets.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-sops",
"parentId": "t-p1-group-definitions",
"title": "11. SOPs",
"description": "Standard step-by-step guides",
"notes": "Standard Operating Procedures: written checklists that tell your team exactly how to create every video.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part1-owner",
"parentId": "t-p1-group-story",
"title": "1. The Overworked Cook",
"description": "From exhaustion to ownership",
"notes": "A solo cook tried to prepare every dish, wash every pot, and serve every table alone. He hit a wall at 20 guests a day. He only unlocked freedom when he stepped back to become the restaurant owner and hired a kitchen team.",
"links": [],
"todos": [
{
"id": "td-story-1",
"text": "Identify which role you need to hire or automate first",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part2-guide",
"parentId": "t-p1-group-story",
"title": "2. The City Tour Guide",
"description": "How the algorithm picks restaurants",
"notes": "The Tour Guide walks tourists around town. He does not favor any owner; he only cares if tourists enjoy their food. He sends 10 tourists first. If they stay and leave happy, he sends 100, then thousands more.",
"links": [],
"todos": [
{
"id": "td-story-2",
"text": "Review your video hook to ensure first-time viewers stay engaged",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part3-door",
"parentId": "t-p1-group-story",
"title": "3. The Front Door & The Meal",
"description": "Why both CTR and AVD matter",
"notes": "A red door with a clear chalkboard pulls people inside (CTR). But if the food is cold or boring, tourists leave before dessert (AVD). When the entrance is inviting and the meal is delicious, the Tour Guide makes your restaurant famous.",
"links": [],
"todos": [
{
"id": "td-story-3",
"text": "Check that your video directly answers the title core promise",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part4-menu",
"parentId": "t-p1-group-story",
"title": "4. The Confusion of Many Menus",
"description": "Why serving everything fails",
"notes": "A restaurant serving Italian on Monday, tacos on Tuesday, and ramen on Wednesday confuses the Tour Guide. When a tourist asks for pizza, the guide routes them to the dedicated pizza parlor, not the general diner. Specialization builds trust.",
"links": [],
"todos": [
{
"id": "td-story-4",
"text": "Pick one clear topic and stick to it for your first 30 videos",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script",
"parentId": "t-p2-production",
"title": "1. Script Writing",
"description": "Hook, body, and retention structure",
"notes": "Writing a clear conversational script. Hook the audience in the first 30 seconds, introduce open loops, and cut out fluff.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script-hook",
"parentId": "t-p2-script",
"title": "1. The 30s Hook",
"description": "Grab attention immediately",
"notes": "Address the exact question or image shown on the thumbnail within the first 15 to 30 seconds.",
"links": [],
"todos": [
{
"id": "td-sc-1",
"text": "Write 3 opening sentences that confirm the viewer is in the right place",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script-body",
"parentId": "t-p2-script",
"title": "2. Body & Open Loops",
"description": "Keep viewers curious about what comes next",
"notes": "Break your script into structured points and plant curiosity bridges before moving to the next section.",
"links": [],
"todos": [
{
"id": "td-sc-2",
"text": "Add at least two open loops teasing an upcoming revelation",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script-cta",
"parentId": "t-p2-script",
"title": "3. The End CTA",
"description": "Direct viewers into another video",
"notes": "Never say 'Thanks for watching and goodbye'. Seamlessly transition into the next relevant video.",
"links": [],
"todos": [
{
"id": "td-sc-3",
"text": "Link the script ending directly to an existing video on your channel",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-data-verify",
"parentId": "t-p2-production",
"title": "2. Data Verification",
"description": "Fact-checking claims and numbers",
"notes": "Check every stat, date, and historical claim before recording. Misinformation ruins audience trust and hurts comments.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-dv-claims",
"parentId": "t-p2-data-verify",
"title": "1. Fact Checking",
"description": "Verify names, dates, and historical events",
"notes": "Confirm dates and named events across at least two independent reliable sources.",
"links": [],
"todos": [
{
"id": "td-dv-1",
"text": "Double check all names and dates mentioned in the draft",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-dv-sources",
"parentId": "t-p2-data-verify",
"title": "2. Source Archiving",
"description": "Save reference links for video description",
"notes": "Keep source citations handy to paste into descriptions or pin in comments when viewers ask.",
"links": [],
"todos": [
{
"id": "td-dv-2",
"text": "Save reference links in your project sheet",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-audio-gen",
"parentId": "t-p2-production",
"title": "3. Audio Generation",
"description": "Voiceover pacing and tone",
"notes": "Generate or record a clean narration using tools like ElevenLabs or human voice talent. Maintain natural cadence and clear volume.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ag-voice",
"parentId": "t-p2-audio-gen",
"title": "1. Voice Selection",
"description": "Pick the right tone for the niche",
"notes": "Use a deep, calm tone for mystery or history; choose a bright, high-energy tone for tech and business.",
"links": [],
"todos": [
{
"id": "td-ag-1",
"text": "Pick and lock in your signature voice persona",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ag-clean",
"parentId": "t-p2-audio-gen",
"title": "2. Audio Clean-up",
"description": "Pacing, pauses, and breath removal",
"notes": "Tighten gaps between sentences and normalize volume levels so the speech sounds smooth and punchy.",
"links": [],
"todos": [
{
"id": "td-ag-2",
"text": "Trim awkward silences over 0.8 seconds long",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-image-gen",
"parentId": "t-p2-production",
"title": "4. Image Generation",
"description": "Creating custom B-roll & scenes",
"notes": "Generate matching visuals using Midjourney, Stable Diffusion, or stock photo sites to illustrate points in the script.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ig-prompts",
"parentId": "t-p2-image-gen",
"title": "1. Prompt Engineering",
"description": "Consistent style, lighting, and aspect ratio",
"notes": "Include consistent aesthetic modifiers and always render in 16:9 ratio for horizontal videos.",
"links": [],
"todos": [
{
"id": "td-ig-1",
"text": "Save a reusable visual style prompt for consistent image looks",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ig-batch",
"parentId": "t-p2-image-gen",
"title": "2. Scene Batching",
"description": "Generating 20-30 scene images per video",
"notes": "Batch generate all key scenes at once so editors have abundant visual options on the timeline.",
"links": [],
"todos": [
{
"id": "td-ig-2",
"text": "Generate at least 25 scene-specific images matching script moments",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-thumb-gen",
"parentId": "t-p2-production",
"title": "5. Thumbnail Generation",
"description": "Designing the front door packaging",
"notes": "Create a high-contrast cover image with 1 clear subject and 3 to 5 bold readable words. Test on mobile size.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-tg-concept",
"parentId": "t-p2-thumb-gen",
"title": "1. Visual Contrast",
"description": "Single focal subject with high separation",
"notes": "Make the subject stand out sharply against the background using color temperature and rim lighting.",
"links": [],
"todos": [
{
"id": "td-tg-1",
"text": "Check that the background does not compete with the foreground subject",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-tg-text",
"parentId": "t-p2-thumb-gen",
"title": "2. 3-5 Word Rule",
"description": "Big readable fonts for mobile feeds",
"notes": "Use minimal words that complement, rather than repeat, the title.",
"links": [],
"todos": [
{
"id": "td-tg-2",
"text": "Limit thumbnail text to under 5 words and verify mobile readability",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-watermark-remover",
"parentId": "t-p2-production",
"title": "6. Watermark Removal",
"description": "Cleaning stock and archival clips",
"notes": "Clean up raw footage and clip overlays to keep the final render professional and distraction-free.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-wr-cleanup",
"parentId": "t-p2-watermark-remover",
"title": "1. Overlay Cleaning",
"description": "Removing logos, timestamps, and unwanted UI",
"notes": "Use AI object removers or smart crops to eliminate third-party watermarks and video stamps.",
"links": [],
"todos": [
{
"id": "td-wr-1",
"text": "Crop or clean any visible logos from documentary clips",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-wr-licensing",
"parentId": "t-p2-watermark-remover",
"title": "2. Asset Licensing",
"description": "Ensuring footage is safe to monetize",
"notes": "Verify that all stock assets come with commercial rights or fall squarely under Fair Use commentary standards.",
"links": [],
"todos": [
{
"id": "td-wr-2",
"text": "Verify commercial use permissions for all third-party clips",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-upscaling",
"parentId": "t-p2-production",
"title": "7. Video Upscaling",
"description": "Enhancing resolution to 1080p/4K",
"notes": "Use AI upscalers to sharpen low-res archival clips and images so the output looks crisp on large screens.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-denoise",
"parentId": "t-p2-upscaling",
"title": "1. Denoise & Sharpen",
"description": "Clearing pixelation and compression blur",
"notes": "Run old 480p or 720p clips through AI enhancement to remove blocky compression artifacts.",
"links": [],
"todos": [
{
"id": "td-up-1",
"text": "Enhance grainy clips using video restoration models",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-export",
"parentId": "t-p2-upscaling",
"title": "2. 1080p/4K Render",
"description": "Exporting clean master files for editing",
"notes": "Export converted clips in ProRes or high-bitrate MP4 so editing timelines run smoothly without drops.",
"links": [],
"todos": [
{
"id": "td-up-2",
"text": "Export enhanced assets into the central project folder",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-editing",
"parentId": "t-p2-production",
"title": "8. Video Editing",
"description": "Timeline assembly, cuts & sound design",
"notes": "Assemble the voice, B-roll, zooms, captions, and soft background music. Add a pattern break every 30 to 45 seconds.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ed-pacing",
"parentId": "t-p2-editing",
"title": "1. Pacing & Pattern Breaks",
"description": "Zooms, sound hits, and camera motion",
"notes": "Keep the visual perspective moving every 3 to 5 seconds so viewers never stare at a static image.",
"links": [],
"todos": [
{
"id": "td-ed-1",
"text": "Add a dynamic zoom or camera pan to every still image",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ed-audio",
"parentId": "t-p2-editing",
"title": "2. Sound Design & Music",
"description": "Background music balance and SFX",
"notes": "Balance background music at 10-15% volume with subtle whooshes, risers, and impact sounds on scene shifts.",
"links": [],
"todos": [
{
"id": "td-ed-2",
"text": "Set background audio ducking so speech stays completely clear",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-uploading",
"parentId": "t-p2-production",
"title": "9. Video Uploading",
"description": "Metadata, scheduling, and end screens",
"notes": "Upload the final render with an optimized title under 60 characters, description links, chapter marks, and end screen cards.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-seo",
"parentId": "t-p2-uploading",
"title": "1. Title & Metadata",
"description": "Curiosity title and natural description lines",
"notes": "Place the main keyword in the title and the first two lines of the description before the fold.",
"links": [],
"todos": [
{
"id": "td-up-1",
"text": "Ensure primary keyword appears naturally in title and line 1 of description",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-cards",
"parentId": "t-p2-uploading",
"title": "2. End Screen & Scheduling",
"description": "Direct next click and prime publish time",
"notes": "Attach an end screen video element 20 seconds before the end and schedule release for viewer peak hours.",
"links": [],
"todos": [
{
"id": "td-up-2",
"text": "Set end screen card pointing to your best related video",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
}
],
"edges": [
{
"id": "e-root-p1",
"parentId": null,
"sourceId": null,
"targetId": "t-p1-foundations",
"kind": "next"
},
{
"id": "e-root-p2",
"parentId": null,
"sourceId": null,
"targetId": "t-p2-production",
"kind": "next"
},
{
"id": "e-p1-step1",
"parentId": "t-p1-foundations",
"sourceId": null,
"targetId": "t-p1-group-definitions",
"kind": "next"
},
{
"id": "e-p1-step2",
"parentId": "t-p1-foundations",
"sourceId": "t-p1-group-definitions",
"targetId": "t-p1-group-story",
"kind": "next"
},
{
"id": "e-def-1",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-automation",
"kind": "next"
},
{
"id": "e-def-2",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-algorithm",
"kind": "next"
},
{
"id": "e-def-3",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-niche",
"kind": "next"
},
{
"id": "e-def-4",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-ctr",
"kind": "next"
},
{
"id": "e-def-5",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-avd",
"kind": "next"
},
{
"id": "e-def-6",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-packaging",
"kind": "next"
},
{
"id": "e-def-7",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-retention",
"kind": "next"
},
{
"id": "e-def-8",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-evergreen",
"kind": "next"
},
{
"id": "e-def-9",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-seo",
"kind": "next"
},
{
"id": "e-def-10",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-rpm",
"kind": "next"
},
{
"id": "e-def-11",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-sops",
"kind": "next"
},
{
"id": "e-story-1",
"parentId": "t-p1-group-story",
"sourceId": null,
"targetId": "t-story-part1-owner",
"kind": "next"
},
{
"id": "e-story-2",
"parentId": "t-p1-group-story",
"sourceId": "t-story-part1-owner",
"targetId": "t-story-part2-guide",
"kind": "next"
},
{
"id": "e-story-3",
"parentId": "t-p1-group-story",
"sourceId": "t-story-part2-guide",
"targetId": "t-story-part3-door",
"kind": "next"
},
{
"id": "e-story-4",
"parentId": "t-p1-group-story",
"sourceId": "t-story-part3-door",
"targetId": "t-story-part4-menu",
"kind": "next"
},
{
"id": "e-p2-step1",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-script",
"kind": "next"
},
{
"id": "e-p2-step2",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-data-verify",
"kind": "next"
},
{
"id": "e-p2-step3",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-audio-gen",
"kind": "next"
},
{
"id": "e-p2-step4",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-image-gen",
"kind": "next"
},
{
"id": "e-p2-step5",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-thumb-gen",
"kind": "next"
},
{
"id": "e-p2-step6",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-watermark-remover",
"kind": "next"
},
{
"id": "e-p2-step7",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-upscaling",
"kind": "next"
},
{
"id": "e-p2-step8",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-editing",
"kind": "next"
},
{
"id": "e-p2-step9",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-uploading",
"kind": "next"
},
{
"id": "e-sc-sub1",
"parentId": "t-p2-script",
"sourceId": null,
"targetId": "t-p2-script-hook",
"kind": "next"
},
{
"id": "e-sc-sub2",
"parentId": "t-p2-script",
"sourceId": "t-p2-script-hook",
"targetId": "t-p2-script-body",
"kind": "next"
},
{
"id": "e-sc-sub3",
"parentId": "t-p2-script",
"sourceId": "t-p2-script-body",
"targetId": "t-p2-script-cta",
"kind": "next"
},
{
"id": "e-dv-sub1",
"parentId": "t-p2-data-verify",
"sourceId": null,
"targetId": "t-p2-dv-claims",
"kind": "next"
},
{
"id": "e-dv-sub2",
"parentId": "t-p2-data-verify",
"sourceId": "t-p2-dv-claims",
"targetId": "t-p2-dv-sources",
"kind": "next"
},
{
"id": "e-ag-sub1",
"parentId": "t-p2-audio-gen",
"sourceId": null,
"targetId": "t-p2-ag-voice",
"kind": "next"
},
{
"id": "e-ag-sub2",
"parentId": "t-p2-audio-gen",
"sourceId": "t-p2-ag-voice",
"targetId": "t-p2-ag-clean",
"kind": "next"
},
{
"id": "e-ig-sub1",
"parentId": "t-p2-image-gen",
"sourceId": null,
"targetId": "t-p2-ig-prompts",
"kind": "next"
},
{
"id": "e-ig-sub2",
"parentId": "t-p2-image-gen",
"sourceId": "t-p2-ig-prompts",
"targetId": "t-p2-ig-batch",
"kind": "next"
},
{
"id": "e-tg-sub1",
"parentId": "t-p2-thumb-gen",
"sourceId": null,
"targetId": "t-p2-tg-concept",
"kind": "next"
},
{
"id": "e-tg-sub2",
"parentId": "t-p2-thumb-gen",
"sourceId": "t-p2-tg-concept",
"targetId": "t-p2-tg-text",
"kind": "next"
},
{
"id": "e-wr-sub1",
"parentId": "t-p2-watermark-remover",
"sourceId": null,
"targetId": "t-p2-wr-cleanup",
"kind": "next"
},
{
"id": "e-wr-sub2",
"parentId": "t-p2-watermark-remover",
"sourceId": "t-p2-wr-cleanup",
"targetId": "t-p2-wr-licensing",
"kind": "next"
},
{
"id": "e-up-sub1",
"parentId": "t-p2-upscaling",
"sourceId": null,
"targetId": "t-p2-up-denoise",
"kind": "next"
},
{
"id": "e-up-sub2",
"parentId": "t-p2-upscaling",
"sourceId": "t-p2-up-denoise",
"targetId": "t-p2-up-export",
"kind": "next"
},
{
"id": "e-ed-sub1",
"parentId": "t-p2-editing",
"sourceId": null,
"targetId": "t-p2-ed-pacing",
"kind": "next"
},
{
"id": "e-ed-sub2",
"parentId": "t-p2-editing",
"sourceId": "t-p2-ed-pacing",
"targetId": "t-p2-ed-audio",
"kind": "next"
},
{
"id": "e-upl-sub1",
"parentId": "t-p2-uploading",
"sourceId": null,
"targetId": "t-p2-up-seo",
"kind": "next"
},
{
"id": "e-upl-sub2",
"parentId": "t-p2-uploading",
"sourceId": "t-p2-up-seo",
"targetId": "t-p2-up-cards",
"kind": "next"
}
]
}
```
Sample output
This is the kind of file the AI should produce. It is checked against the real importer.
{
"schemaVersion": 1,
"id": "youtube-automation-phases-1-and-2-hierarchical",
"title": "YouTube Automation: Master Roadmap",
"createdAt": 1790164000000,
"updatedAt": 1790164000000,
"topics": [
{
"id": "t-p1-foundations",
"parentId": null,
"title": "Phase 1: Foundations",
"description": "Vocabulary and the restaurant metaphor",
"notes": "Before opening your channel, understand the key terms and the restaurant story that explains how the platform operates.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-production",
"parentId": null,
"title": "Phase 2: The Production Pipeline",
"description": "Step-by-step video assembly line",
"notes": "The exact sequence to take a raw video idea through drafting, asset creation, cleanup, editing, and publishing.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p1-group-definitions",
"parentId": "t-p1-foundations",
"title": "1. Core Definitions",
"description": "Every important term explained simply",
"notes": "A quick reference guide for the main concepts used across faceless channels.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p1-group-story",
"parentId": "t-p1-foundations",
"title": "2. The Restaurant Story",
"description": "Understanding YouTube through a simple tale",
"notes": "How thinking of your channel as a restaurant completely changes how you build and scale it.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-automation",
"parentId": "t-p1-group-definitions",
"title": "1. YouTube Automation",
"description": "Running channels like a business owner",
"notes": "Building faceless channels using a team or AI tools to write, record, and edit videos while you direct the overall strategy.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-algorithm",
"parentId": "t-p1-group-definitions",
"title": "2. Algorithm",
"description": "The matching engine",
"notes": "YouTube recommendation system that decides which video to show to which viewer based on what they like.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-niche",
"parentId": "t-p1-group-definitions",
"title": "3. Niche",
"description": "Your specific category",
"notes": "The focused topic of your channel (like true crime, tech, or history) so YouTube knows who to recommend your videos to.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-ctr",
"parentId": "t-p1-group-definitions",
"title": "4. CTR (Click-Through Rate)",
"description": "The percentage of people who click",
"notes": "Out of 100 people who see your cover image and title, how many actually click and enter.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-avd",
"parentId": "t-p1-group-definitions",
"title": "5. AVD (Average View Duration)",
"description": "How long people watch",
"notes": "The average time viewers spend watching your video before clicking away. Longer watch time signals high quality.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-packaging",
"parentId": "t-p1-group-definitions",
"title": "6. Packaging",
"description": "Thumbnail plus title",
"notes": "The visual cover and title working as a unit to trigger curiosity and earn the click.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-retention",
"parentId": "t-p1-group-definitions",
"title": "7. Pattern Breaks & Retention",
"description": "Keeping attention alive",
"notes": "Visual zooms, text overlays, and sound cues used every 30 to 60 seconds so viewers stay hooked.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-evergreen",
"parentId": "t-p1-group-definitions",
"title": "8. Evergreen vs. Viral",
"description": "Long-term vs. fast spikes",
"notes": "Evergreen videos bring steady views for years; viral videos bring quick floods of views from current trends.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-seo",
"parentId": "t-p1-group-definitions",
"title": "9. SEO & Keywords",
"description": "Ranking in search bars",
"notes": "Using the specific phrases people type into YouTube search so your videos appear at the top.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-rpm",
"parentId": "t-p1-group-definitions",
"title": "10. RPM (Revenue Per Mille)",
"description": "Pay per 1,000 views",
"notes": "How much money YouTube actually pays you for every 1,000 views your video gets.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-def-sops",
"parentId": "t-p1-group-definitions",
"title": "11. SOPs",
"description": "Standard step-by-step guides",
"notes": "Standard Operating Procedures: written checklists that tell your team exactly how to create every video.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part1-owner",
"parentId": "t-p1-group-story",
"title": "1. The Overworked Cook",
"description": "From exhaustion to ownership",
"notes": "A solo cook tried to prepare every dish, wash every pot, and serve every table alone. He hit a wall at 20 guests a day. He only unlocked freedom when he stepped back to become the restaurant owner and hired a kitchen team.",
"links": [],
"todos": [
{
"id": "td-story-1",
"text": "Identify which role you need to hire or automate first",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part2-guide",
"parentId": "t-p1-group-story",
"title": "2. The City Tour Guide",
"description": "How the algorithm picks restaurants",
"notes": "The Tour Guide walks tourists around town. He does not favor any owner; he only cares if tourists enjoy their food. He sends 10 tourists first. If they stay and leave happy, he sends 100, then thousands more.",
"links": [],
"todos": [
{
"id": "td-story-2",
"text": "Review your video hook to ensure first-time viewers stay engaged",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part3-door",
"parentId": "t-p1-group-story",
"title": "3. The Front Door & The Meal",
"description": "Why both CTR and AVD matter",
"notes": "A red door with a clear chalkboard pulls people inside (CTR). But if the food is cold or boring, tourists leave before dessert (AVD). When the entrance is inviting and the meal is delicious, the Tour Guide makes your restaurant famous.",
"links": [],
"todos": [
{
"id": "td-story-3",
"text": "Check that your video directly answers the title core promise",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-story-part4-menu",
"parentId": "t-p1-group-story",
"title": "4. The Confusion of Many Menus",
"description": "Why serving everything fails",
"notes": "A restaurant serving Italian on Monday, tacos on Tuesday, and ramen on Wednesday confuses the Tour Guide. When a tourist asks for pizza, the guide routes them to the dedicated pizza parlor, not the general diner. Specialization builds trust.",
"links": [],
"todos": [
{
"id": "td-story-4",
"text": "Pick one clear topic and stick to it for your first 30 videos",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script",
"parentId": "t-p2-production",
"title": "1. Script Writing",
"description": "Hook, body, and retention structure",
"notes": "Writing a clear conversational script. Hook the audience in the first 30 seconds, introduce open loops, and cut out fluff.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script-hook",
"parentId": "t-p2-script",
"title": "1. The 30s Hook",
"description": "Grab attention immediately",
"notes": "Address the exact question or image shown on the thumbnail within the first 15 to 30 seconds.",
"links": [],
"todos": [
{
"id": "td-sc-1",
"text": "Write 3 opening sentences that confirm the viewer is in the right place",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script-body",
"parentId": "t-p2-script",
"title": "2. Body & Open Loops",
"description": "Keep viewers curious about what comes next",
"notes": "Break your script into structured points and plant curiosity bridges before moving to the next section.",
"links": [],
"todos": [
{
"id": "td-sc-2",
"text": "Add at least two open loops teasing an upcoming revelation",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-script-cta",
"parentId": "t-p2-script",
"title": "3. The End CTA",
"description": "Direct viewers into another video",
"notes": "Never say 'Thanks for watching and goodbye'. Seamlessly transition into the next relevant video.",
"links": [],
"todos": [
{
"id": "td-sc-3",
"text": "Link the script ending directly to an existing video on your channel",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-data-verify",
"parentId": "t-p2-production",
"title": "2. Data Verification",
"description": "Fact-checking claims and numbers",
"notes": "Check every stat, date, and historical claim before recording. Misinformation ruins audience trust and hurts comments.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-dv-claims",
"parentId": "t-p2-data-verify",
"title": "1. Fact Checking",
"description": "Verify names, dates, and historical events",
"notes": "Confirm dates and named events across at least two independent reliable sources.",
"links": [],
"todos": [
{
"id": "td-dv-1",
"text": "Double check all names and dates mentioned in the draft",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-dv-sources",
"parentId": "t-p2-data-verify",
"title": "2. Source Archiving",
"description": "Save reference links for video description",
"notes": "Keep source citations handy to paste into descriptions or pin in comments when viewers ask.",
"links": [],
"todos": [
{
"id": "td-dv-2",
"text": "Save reference links in your project sheet",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-audio-gen",
"parentId": "t-p2-production",
"title": "3. Audio Generation",
"description": "Voiceover pacing and tone",
"notes": "Generate or record a clean narration using tools like ElevenLabs or human voice talent. Maintain natural cadence and clear volume.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ag-voice",
"parentId": "t-p2-audio-gen",
"title": "1. Voice Selection",
"description": "Pick the right tone for the niche",
"notes": "Use a deep, calm tone for mystery or history; choose a bright, high-energy tone for tech and business.",
"links": [],
"todos": [
{
"id": "td-ag-1",
"text": "Pick and lock in your signature voice persona",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ag-clean",
"parentId": "t-p2-audio-gen",
"title": "2. Audio Clean-up",
"description": "Pacing, pauses, and breath removal",
"notes": "Tighten gaps between sentences and normalize volume levels so the speech sounds smooth and punchy.",
"links": [],
"todos": [
{
"id": "td-ag-2",
"text": "Trim awkward silences over 0.8 seconds long",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-image-gen",
"parentId": "t-p2-production",
"title": "4. Image Generation",
"description": "Creating custom B-roll & scenes",
"notes": "Generate matching visuals using Midjourney, Stable Diffusion, or stock photo sites to illustrate points in the script.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ig-prompts",
"parentId": "t-p2-image-gen",
"title": "1. Prompt Engineering",
"description": "Consistent style, lighting, and aspect ratio",
"notes": "Include consistent aesthetic modifiers and always render in 16:9 ratio for horizontal videos.",
"links": [],
"todos": [
{
"id": "td-ig-1",
"text": "Save a reusable visual style prompt for consistent image looks",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ig-batch",
"parentId": "t-p2-image-gen",
"title": "2. Scene Batching",
"description": "Generating 20-30 scene images per video",
"notes": "Batch generate all key scenes at once so editors have abundant visual options on the timeline.",
"links": [],
"todos": [
{
"id": "td-ig-2",
"text": "Generate at least 25 scene-specific images matching script moments",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-thumb-gen",
"parentId": "t-p2-production",
"title": "5. Thumbnail Generation",
"description": "Designing the front door packaging",
"notes": "Create a high-contrast cover image with 1 clear subject and 3 to 5 bold readable words. Test on mobile size.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-tg-concept",
"parentId": "t-p2-thumb-gen",
"title": "1. Visual Contrast",
"description": "Single focal subject with high separation",
"notes": "Make the subject stand out sharply against the background using color temperature and rim lighting.",
"links": [],
"todos": [
{
"id": "td-tg-1",
"text": "Check that the background does not compete with the foreground subject",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-tg-text",
"parentId": "t-p2-thumb-gen",
"title": "2. 3-5 Word Rule",
"description": "Big readable fonts for mobile feeds",
"notes": "Use minimal words that complement, rather than repeat, the title.",
"links": [],
"todos": [
{
"id": "td-tg-2",
"text": "Limit thumbnail text to under 5 words and verify mobile readability",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-watermark-remover",
"parentId": "t-p2-production",
"title": "6. Watermark Removal",
"description": "Cleaning stock and archival clips",
"notes": "Clean up raw footage and clip overlays to keep the final render professional and distraction-free.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-wr-cleanup",
"parentId": "t-p2-watermark-remover",
"title": "1. Overlay Cleaning",
"description": "Removing logos, timestamps, and unwanted UI",
"notes": "Use AI object removers or smart crops to eliminate third-party watermarks and video stamps.",
"links": [],
"todos": [
{
"id": "td-wr-1",
"text": "Crop or clean any visible logos from documentary clips",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-wr-licensing",
"parentId": "t-p2-watermark-remover",
"title": "2. Asset Licensing",
"description": "Ensuring footage is safe to monetize",
"notes": "Verify that all stock assets come with commercial rights or fall squarely under Fair Use commentary standards.",
"links": [],
"todos": [
{
"id": "td-wr-2",
"text": "Verify commercial use permissions for all third-party clips",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-upscaling",
"parentId": "t-p2-production",
"title": "7. Video Upscaling",
"description": "Enhancing resolution to 1080p/4K",
"notes": "Use AI upscalers to sharpen low-res archival clips and images so the output looks crisp on large screens.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-denoise",
"parentId": "t-p2-upscaling",
"title": "1. Denoise & Sharpen",
"description": "Clearing pixelation and compression blur",
"notes": "Run old 480p or 720p clips through AI enhancement to remove blocky compression artifacts.",
"links": [],
"todos": [
{
"id": "td-up-1",
"text": "Enhance grainy clips using video restoration models",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-export",
"parentId": "t-p2-upscaling",
"title": "2. 1080p/4K Render",
"description": "Exporting clean master files for editing",
"notes": "Export converted clips in ProRes or high-bitrate MP4 so editing timelines run smoothly without drops.",
"links": [],
"todos": [
{
"id": "td-up-2",
"text": "Export enhanced assets into the central project folder",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-editing",
"parentId": "t-p2-production",
"title": "8. Video Editing",
"description": "Timeline assembly, cuts & sound design",
"notes": "Assemble the voice, B-roll, zooms, captions, and soft background music. Add a pattern break every 30 to 45 seconds.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ed-pacing",
"parentId": "t-p2-editing",
"title": "1. Pacing & Pattern Breaks",
"description": "Zooms, sound hits, and camera motion",
"notes": "Keep the visual perspective moving every 3 to 5 seconds so viewers never stare at a static image.",
"links": [],
"todos": [
{
"id": "td-ed-1",
"text": "Add a dynamic zoom or camera pan to every still image",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-ed-audio",
"parentId": "t-p2-editing",
"title": "2. Sound Design & Music",
"description": "Background music balance and SFX",
"notes": "Balance background music at 10-15% volume with subtle whooshes, risers, and impact sounds on scene shifts.",
"links": [],
"todos": [
{
"id": "td-ed-2",
"text": "Set background audio ducking so speech stays completely clear",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-uploading",
"parentId": "t-p2-production",
"title": "9. Video Uploading",
"description": "Metadata, scheduling, and end screens",
"notes": "Upload the final render with an optimized title under 60 characters, description links, chapter marks, and end screen cards.",
"links": [],
"todos": [],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-seo",
"parentId": "t-p2-uploading",
"title": "1. Title & Metadata",
"description": "Curiosity title and natural description lines",
"notes": "Place the main keyword in the title and the first two lines of the description before the fold.",
"links": [],
"todos": [
{
"id": "td-up-1",
"text": "Ensure primary keyword appears naturally in title and line 1 of description",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
},
{
"id": "t-p2-up-cards",
"parentId": "t-p2-uploading",
"title": "2. End Screen & Scheduling",
"description": "Direct next click and prime publish time",
"notes": "Attach an end screen video element 20 seconds before the end and schedule release for viewer peak hours.",
"links": [],
"todos": [
{
"id": "td-up-2",
"text": "Set end screen card pointing to your best related video",
"done": false
}
],
"state": "none",
"x": 0,
"y": 0
}
],
"edges": [
{
"id": "e-root-p1",
"parentId": null,
"sourceId": null,
"targetId": "t-p1-foundations",
"kind": "next"
},
{
"id": "e-root-p2",
"parentId": null,
"sourceId": null,
"targetId": "t-p2-production",
"kind": "next"
},
{
"id": "e-p1-step1",
"parentId": "t-p1-foundations",
"sourceId": null,
"targetId": "t-p1-group-definitions",
"kind": "next"
},
{
"id": "e-p1-step2",
"parentId": "t-p1-foundations",
"sourceId": "t-p1-group-definitions",
"targetId": "t-p1-group-story",
"kind": "next"
},
{
"id": "e-def-1",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-automation",
"kind": "next"
},
{
"id": "e-def-2",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-algorithm",
"kind": "next"
},
{
"id": "e-def-3",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-niche",
"kind": "next"
},
{
"id": "e-def-4",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-ctr",
"kind": "next"
},
{
"id": "e-def-5",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-avd",
"kind": "next"
},
{
"id": "e-def-6",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-packaging",
"kind": "next"
},
{
"id": "e-def-7",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-retention",
"kind": "next"
},
{
"id": "e-def-8",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-evergreen",
"kind": "next"
},
{
"id": "e-def-9",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-seo",
"kind": "next"
},
{
"id": "e-def-10",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-rpm",
"kind": "next"
},
{
"id": "e-def-11",
"parentId": "t-p1-group-definitions",
"sourceId": null,
"targetId": "t-def-sops",
"kind": "next"
},
{
"id": "e-story-1",
"parentId": "t-p1-group-story",
"sourceId": null,
"targetId": "t-story-part1-owner",
"kind": "next"
},
{
"id": "e-story-2",
"parentId": "t-p1-group-story",
"sourceId": "t-story-part1-owner",
"targetId": "t-story-part2-guide",
"kind": "next"
},
{
"id": "e-story-3",
"parentId": "t-p1-group-story",
"sourceId": "t-story-part2-guide",
"targetId": "t-story-part3-door",
"kind": "next"
},
{
"id": "e-story-4",
"parentId": "t-p1-group-story",
"sourceId": "t-story-part3-door",
"targetId": "t-story-part4-menu",
"kind": "next"
},
{
"id": "e-p2-step1",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-script",
"kind": "next"
},
{
"id": "e-p2-step2",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-data-verify",
"kind": "next"
},
{
"id": "e-p2-step3",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-audio-gen",
"kind": "next"
},
{
"id": "e-p2-step4",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-image-gen",
"kind": "next"
},
{
"id": "e-p2-step5",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-thumb-gen",
"kind": "next"
},
{
"id": "e-p2-step6",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-watermark-remover",
"kind": "next"
},
{
"id": "e-p2-step7",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-upscaling",
"kind": "next"
},
{
"id": "e-p2-step8",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-editing",
"kind": "next"
},
{
"id": "e-p2-step9",
"parentId": "t-p2-production",
"sourceId": null,
"targetId": "t-p2-uploading",
"kind": "next"
},
{
"id": "e-sc-sub1",
"parentId": "t-p2-script",
"sourceId": null,
"targetId": "t-p2-script-hook",
"kind": "next"
},
{
"id": "e-sc-sub2",
"parentId": "t-p2-script",
"sourceId": "t-p2-script-hook",
"targetId": "t-p2-script-body",
"kind": "next"
},
{
"id": "e-sc-sub3",
"parentId": "t-p2-script",
"sourceId": "t-p2-script-body",
"targetId": "t-p2-script-cta",
"kind": "next"
},
{
"id": "e-dv-sub1",
"parentId": "t-p2-data-verify",
"sourceId": null,
"targetId": "t-p2-dv-claims",
"kind": "next"
},
{
"id": "e-dv-sub2",
"parentId": "t-p2-data-verify",
"sourceId": "t-p2-dv-claims",
"targetId": "t-p2-dv-sources",
"kind": "next"
},
{
"id": "e-ag-sub1",
"parentId": "t-p2-audio-gen",
"sourceId": null,
"targetId": "t-p2-ag-voice",
"kind": "next"
},
{
"id": "e-ag-sub2",
"parentId": "t-p2-audio-gen",
"sourceId": "t-p2-ag-voice",
"targetId": "t-p2-ag-clean",
"kind": "next"
},
{
"id": "e-ig-sub1",
"parentId": "t-p2-image-gen",
"sourceId": null,
"targetId": "t-p2-ig-prompts",
"kind": "next"
},
{
"id": "e-ig-sub2",
"parentId": "t-p2-image-gen",
"sourceId": "t-p2-ig-prompts",
"targetId": "t-p2-ig-batch",
"kind": "next"
},
{
"id": "e-tg-sub1",
"parentId": "t-p2-thumb-gen",
"sourceId": null,
"targetId": "t-p2-tg-concept",
"kind": "next"
},
{
"id": "e-tg-sub2",
"parentId": "t-p2-thumb-gen",
"sourceId": "t-p2-tg-concept",
"targetId": "t-p2-tg-text",
"kind": "next"
},
{
"id": "e-wr-sub1",
"parentId": "t-p2-watermark-remover",
"sourceId": null,
"targetId": "t-p2-wr-cleanup",
"kind": "next"
},
{
"id": "e-wr-sub2",
"parentId": "t-p2-watermark-remover",
"sourceId": "t-p2-wr-cleanup",
"targetId": "t-p2-wr-licensing",
"kind": "next"
},
{
"id": "e-up-sub1",
"parentId": "t-p2-upscaling",
"sourceId": null,
"targetId": "t-p2-up-denoise",
"kind": "next"
},
{
"id": "e-up-sub2",
"parentId": "t-p2-upscaling",
"sourceId": "t-p2-up-denoise",
"targetId": "t-p2-up-export",
"kind": "next"
},
{
"id": "e-ed-sub1",
"parentId": "t-p2-editing",
"sourceId": null,
"targetId": "t-p2-ed-pacing",
"kind": "next"
},
{
"id": "e-ed-sub2",
"parentId": "t-p2-editing",
"sourceId": "t-p2-ed-pacing",
"targetId": "t-p2-ed-audio",
"kind": "next"
},
{
"id": "e-upl-sub1",
"parentId": "t-p2-uploading",
"sourceId": null,
"targetId": "t-p2-up-seo",
"kind": "next"
},
{
"id": "e-upl-sub2",
"parentId": "t-p2-uploading",
"sourceId": "t-p2-up-seo",
"targetId": "t-p2-up-cards",
"kind": "next"
}
]
}If the import fails
Ask the AI to fix the error message shown by the app and to re-send the complete JSON. Common causes: comments or trailing commas in the JSON, a parentId that points to a missing topic, or text around the code block saved into the file.