{
  "project_id": "aiagent_workflow_auto_manual",
  "manual_id": "20260627",
  "title": "TikTok Bot 2026 Course Mode",
  "generated_at": "2026-06-23 20:49:24",
  "repo_root": "/Users/sj88/Documents/codex/AiAgent_Workflow_Auto_Manual",
  "output_root": "/Users/sj88/Documents/codex/AiAgent_Workflow_Auto_Manual/20260627",
  "source_dir": "/Users/sj88/Documents",
  "playlist_url": "https://youtube.com/playlist?list=PLM7tqEQimufrULO1ra0kDYZRfKOeHNK0n&si=HVasSWFtvU1aWt5O",
  "playlist_id": "PLM7tqEQimufrULO1ra0kDYZRfKOeHNK0n",
  "playlist_title": "ติ๊กต๊อกบอท 2026",
  "playlist_count": 5,
  "local_count": 5,
  "frames_per_clip": 100,
  "chapter_frame_count": 500,
  "playlist_only_count": 0,
  "total_duration_seconds": 2416.33898,
  "total_duration_label": "40 นาที 16 วิ",
  "summary_basis": "curated course steps, 100-frame visual evidence, local video metadata, playlist metadata, and YouTube Thai original auto-caption transcript",
  "transcript_status": "PASS",
  "transcript_source": "youtube_auto_caption",
  "transcript_clip_count": 5,
  "transcript_total_segments": 687,
  "transcript_total_chars": 22453,
  "yt_dlp_bin": "/tmp/codex_ytdlp_20260609_py311/bin/yt-dlp",
  "rows": [
    {
      "index": 1,
      "code": "ep00",
      "episode": 0,
      "title": "Bot Tiktok Ep0. เพิ่มสินค้าในโชว์เคส",
      "short_title": "เพิ่มสินค้าในโชว์เคส",
      "goal": "เตรียมสินค้าใน TikTok Showcase ให้พร้อมก่อนนำสินค้าเข้าระบบบอท",
      "overview": "บทนี้คือฐานของ workflow ทั้งหมด: ต้องมีสินค้าในโชว์เคสก่อน บอทจึงมีข้อมูลสินค้าให้ดึงไปใช้งานต่อ",
      "reader_outcome": "หลังดูจบต้องรู้วิธีดูสินค้า candidate, ตรวจข้อมูลสินค้า, และรู้ว่าสินค้าพร้อมสำหรับ EP2 หรือยัง",
      "source_file": "/Users/sj88/Documents/Bot Tiktok Ep0 การเพิ่มสินค้าในโชว์เคส.mp4",
      "source_file_uri": "file:///Users/sj88/Documents/Bot%20Tiktok%20Ep0%20%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B9%83%E0%B8%99%E0%B9%82%E0%B8%8A%E0%B8%A7%E0%B9%8C%E0%B9%80%E0%B8%84%E0%B8%AA.mp4",
      "source_exists": true,
      "modified_at": "2026-06-23 16:49:23",
      "duration_seconds": 322.041,
      "duration_label": "5 นาที 22 วิ",
      "duration_hms": "0:05:22",
      "size_bytes": 22584301,
      "size_mb": 21.5,
      "width": 394,
      "height": 854,
      "youtube": {
        "playlist_order": 1,
        "id": "_ioN1Mq25No",
        "url": "https://www.youtube.com/watch?v=_ioN1Mq25No",
        "flat_title": "Bot Tiktok Ep0 การเพิ่มสินค้าในโชว์เคส",
        "title": "Bot Tiktok Ep0 การเพิ่มสินค้าในโชว์เคส",
        "duration_string": "5:22",
        "availability": "unlisted",
        "detail_error": null,
        "detected_ep": 0
      },
      "youtube_match_status": "direct_title_match"
    },
    {
      "index": 2,
      "code": "ep01",
      "episode": 1,
      "title": "Bot Tiktok Ep1. การติดตั้งบอท",
      "short_title": "การติดตั้งบอท",
      "goal": "ติดตั้งหรือโหลด TikTok Bot ให้พร้อมทำงานกับ TikTok Studio และหน้า extension",
      "overview": "บทนี้เน้นการเตรียมสภาพแวดล้อม: ไฟล์บอท, Chrome extension, TikTok Studio และการยืนยันว่าบอทเปิดใช้งานได้จริง",
      "reader_outcome": "หลังดูจบต้องเปิดบอทได้ เห็น panel/extension ถูกต้อง และรู้ว่าต้องตรวจอะไรก่อนเริ่มเพิ่มสินค้า",
      "source_file": "/Users/sj88/Documents/Bot Tiktok Ep1. การติดตั้งบอท.mov",
      "source_file_uri": "file:///Users/sj88/Documents/Bot%20Tiktok%20Ep1.%20%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B8%9A%E0%B8%AD%E0%B8%97.mov",
      "source_exists": true,
      "modified_at": "2026-06-23 09:30:25",
      "duration_seconds": 257.262625,
      "duration_label": "4 นาที 17 วิ",
      "duration_hms": "0:04:17",
      "size_bytes": 277499809,
      "size_mb": 264.6,
      "width": 3418,
      "height": 2224,
      "youtube": {
        "playlist_order": 2,
        "id": "ruu9nx9I0ro",
        "url": "https://www.youtube.com/watch?v=ruu9nx9I0ro",
        "flat_title": "Bot Tiktok Ep1  การติดตั้งบอท",
        "title": "Bot Tiktok Ep1  การติดตั้งบอท",
        "duration_string": "4:17",
        "availability": "unlisted",
        "detail_error": null,
        "detected_ep": 1
      },
      "youtube_match_status": "direct_title_match"
    },
    {
      "index": 3,
      "code": "ep02",
      "episode": 2,
      "title": "Bot Tiktok Ep2. เพิ่มสินค้าจากโชว์เคสมาบอท",
      "short_title": "เพิ่มสินค้าจากโชว์เคสมาบอท",
      "goal": "นำสินค้าที่เตรียมไว้ใน Showcase เข้า Bot Manager เพื่อให้จัดการ mapping และใช้งานต่อได้",
      "overview": "บทนี้คือจุดเชื่อมระหว่างสินค้าใน TikTok กับฐานข้อมูลของบอท ต้องตรวจให้แน่ใจว่าสินค้าเข้ามาเป็น row/card ที่บอทอ่านได้",
      "reader_outcome": "หลังดูจบต้องรู้วิธีเปิดรายการสินค้า ดึงเข้าบอท ตรวจ row และแก้กรณีสินค้าหายหรือข้อมูลไม่ครบ",
      "source_file": "/Users/sj88/Documents/Bot Tiktok Ep2. การเพิ่มสินค้าจากโชว์เคสมาบอท.mov",
      "source_file_uri": "file:///Users/sj88/Documents/Bot%20Tiktok%20Ep2.%20%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B8%88%E0%B8%B2%E0%B8%81%E0%B9%82%E0%B8%8A%E0%B8%A7%E0%B9%8C%E0%B9%80%E0%B8%84%E0%B8%AA%E0%B8%A1%E0%B8%B2%E0%B8%9A%E0%B8%AD%E0%B8%97.mov",
      "source_exists": true,
      "modified_at": "2026-06-23 09:42:37",
      "duration_seconds": 408.868,
      "duration_label": "6 นาที 49 วิ",
      "duration_hms": "0:06:49",
      "size_bytes": 376365908,
      "size_mb": 358.9,
      "width": 3418,
      "height": 2224,
      "youtube": {
        "playlist_order": 3,
        "id": "Y8syYjJuKUo",
        "url": "https://www.youtube.com/watch?v=Y8syYjJuKUo",
        "flat_title": "Bot Tiktok Ep2  การเพิ่มสินค้าจากโชว์เคสมาบอท",
        "title": "Bot Tiktok Ep2  การเพิ่มสินค้าจากโชว์เคสมาบอท",
        "duration_string": "6:49",
        "availability": "unlisted",
        "detail_error": null,
        "detected_ep": 2
      },
      "youtube_match_status": "direct_title_match"
    },
    {
      "index": 4,
      "code": "ep03",
      "episode": 3,
      "title": "Bot Tiktok Ep3. Mapping สินค้าด้วยการตั้งชื่อไฟล์",
      "short_title": "Mapping สินค้าด้วยการตั้งชื่อไฟล์",
      "goal": "จับคู่สินค้าในบอทกับไฟล์/ชื่อสินค้าให้ถูกต้องก่อนใช้งานจริง",
      "overview": "บทนี้เป็นจุดลดความผิดพลาดหลักของระบบ ถ้าชื่อไฟล์และชื่อสินค้าไม่ตรง บอทจะปักตะกร้าผิดหรือเลือกสินค้าไม่ถูก",
      "reader_outcome": "หลังดูจบต้องตั้งชื่อไฟล์ได้เป็นระบบ, ตรวจ mapping ได้, และรู้วิธีแก้ mismatch ก่อน EP4",
      "source_file": "/Users/sj88/Documents/Bot Tiktok Ep3. การ Mapping สินค้าเรากับบอท ด้วยการตั้งชื่อไฟล์.mov",
      "source_file_uri": "file:///Users/sj88/Documents/Bot%20Tiktok%20Ep3.%20%E0%B8%81%E0%B8%B2%E0%B8%A3%20Mapping%20%E0%B8%AA%E0%B8%B4%E0%B8%99%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B9%80%E0%B8%A3%E0%B8%B2%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%9A%E0%B8%AD%E0%B8%97%20%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B8%8A%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C.mov",
      "source_exists": true,
      "modified_at": "2026-06-23 10:18:57",
      "duration_seconds": 790.652563,
      "duration_label": "13 นาที 11 วิ",
      "duration_hms": "0:13:11",
      "size_bytes": 1225773901,
      "size_mb": 1169.0,
      "width": 3418,
      "height": 2224,
      "youtube": {
        "playlist_order": 4,
        "id": "5atJjRo2eFs",
        "url": "https://www.youtube.com/watch?v=5atJjRo2eFs",
        "flat_title": "Bot Tiktok Ep3  การ Mapping สินค้าเรากับบอท ด้วยการตั้งชื่อไฟล์",
        "title": "Bot Tiktok Ep3  การ Mapping สินค้าเรากับบอท ด้วยการตั้งชื่อไฟล์",
        "duration_string": "13:11",
        "availability": "unlisted",
        "detail_error": null,
        "detected_ep": 3
      },
      "youtube_match_status": "direct_title_match"
    },
    {
      "index": 5,
      "code": "ep04",
      "episode": 4,
      "title": "Bot Tiktok Ep4. ใช้งานบอทปักตะกร้าจริง",
      "short_title": "ใช้งานบอทปักตะกร้าจริง",
      "goal": "ใช้บอทกับงานปักตะกร้าจริง โดยตรวจสินค้า mapping log และผลลัพธ์บน TikTok",
      "overview": "บทนี้คือการรันจริง ต้องไม่ใช่แค่กดปุ่ม แต่ต้องอ่าน state/log และตรวจผลว่าปักสินค้าถูกตัว",
      "reader_outcome": "หลังดูจบต้องรู้ preflight ก่อนกด run, อ่าน log ได้, ตรวจ showcase/result ได้ และรู้จุดหยุดเมื่อ error",
      "source_file": "/Users/sj88/Documents/Bot Tiktok Ep4 การใช้งานบอทปักตะกร้าจริงๆ.mov",
      "source_file_uri": "file:///Users/sj88/Documents/Bot%20Tiktok%20Ep4%20%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%9A%E0%B8%AD%E0%B8%97%E0%B8%9B%E0%B8%B1%E0%B8%81%E0%B8%95%E0%B8%B0%E0%B8%81%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%88%E0%B8%A3%E0%B8%B4%E0%B8%87%E0%B9%86.mov",
      "source_exists": true,
      "modified_at": "2026-06-23 10:33:03",
      "duration_seconds": 637.514792,
      "duration_label": "10 นาที 38 วิ",
      "duration_hms": "0:10:38",
      "size_bytes": 1086913086,
      "size_mb": 1036.6,
      "width": 3418,
      "height": 2224,
      "youtube": {
        "playlist_order": 5,
        "id": "tJyv-Kh5kSs",
        "url": "https://www.youtube.com/watch?v=tJyv-Kh5kSs",
        "flat_title": "Bot Tiktok Ep4 การใช้งานบอทปักตะกร้าจริงๆ",
        "title": "Bot Tiktok Ep4 การใช้งานบอทปักตะกร้าจริงๆ",
        "duration_string": "10:38",
        "availability": "unlisted",
        "detail_error": null,
        "detected_ep": 4
      },
      "youtube_match_status": "direct_title_match"
    }
  ],
  "playlist_only": [],
  "playlist_details": [
    {
      "playlist_order": 1,
      "id": "_ioN1Mq25No",
      "url": "https://www.youtube.com/watch?v=_ioN1Mq25No",
      "flat_title": "Bot Tiktok Ep0 การเพิ่มสินค้าในโชว์เคส",
      "title": "Bot Tiktok Ep0 การเพิ่มสินค้าในโชว์เคส",
      "duration_string": "5:22",
      "availability": "unlisted",
      "detail_error": null,
      "detected_ep": 0
    },
    {
      "playlist_order": 2,
      "id": "ruu9nx9I0ro",
      "url": "https://www.youtube.com/watch?v=ruu9nx9I0ro",
      "flat_title": "Bot Tiktok Ep1  การติดตั้งบอท",
      "title": "Bot Tiktok Ep1  การติดตั้งบอท",
      "duration_string": "4:17",
      "availability": "unlisted",
      "detail_error": null,
      "detected_ep": 1
    },
    {
      "playlist_order": 3,
      "id": "Y8syYjJuKUo",
      "url": "https://www.youtube.com/watch?v=Y8syYjJuKUo",
      "flat_title": "Bot Tiktok Ep2  การเพิ่มสินค้าจากโชว์เคสมาบอท",
      "title": "Bot Tiktok Ep2  การเพิ่มสินค้าจากโชว์เคสมาบอท",
      "duration_string": "6:49",
      "availability": "unlisted",
      "detail_error": null,
      "detected_ep": 2
    },
    {
      "playlist_order": 4,
      "id": "5atJjRo2eFs",
      "url": "https://www.youtube.com/watch?v=5atJjRo2eFs",
      "flat_title": "Bot Tiktok Ep3  การ Mapping สินค้าเรากับบอท ด้วยการตั้งชื่อไฟล์",
      "title": "Bot Tiktok Ep3  การ Mapping สินค้าเรากับบอท ด้วยการตั้งชื่อไฟล์",
      "duration_string": "13:11",
      "availability": "unlisted",
      "detail_error": null,
      "detected_ep": 3
    },
    {
      "playlist_order": 5,
      "id": "tJyv-Kh5kSs",
      "url": "https://www.youtube.com/watch?v=tJyv-Kh5kSs",
      "flat_title": "Bot Tiktok Ep4 การใช้งานบอทปักตะกร้าจริงๆ",
      "title": "Bot Tiktok Ep4 การใช้งานบอทปักตะกร้าจริงๆ",
      "duration_string": "10:38",
      "availability": "unlisted",
      "detail_error": null,
      "detected_ep": 4
    }
  ],
  "course_mode": true,
  "course_step_count": 75,
  "course_steps_per_lesson": {
    "ep00": 15,
    "ep01": 15,
    "ep02": 15,
    "ep03": 15,
    "ep04": 15
  },
  "major_topics": [
    {
      "topic_id": "ai_multimedia",
      "title": "การใช้ AI ช่วยในงานมัลติมีเดีย",
      "playlist_url": "https://youtube.com/playlist?list=PLM7tqEQimufoYXnsGRC7F8_T46wCD2It2",
      "local_page": "topics/ai_multimedia/index.html",
      "lesson_count": 4,
      "course_step_count": 60,
      "evidence_frame_count": 400,
      "validation": "topics/ai_multimedia/data/validation.json"
    }
  ],
  "major_topic_count": 1
}