{
 "log": "LOG448",
 "article_full": "/files/LOG448/LOG448_full.md",
 "article_full_type": "text/markdown",
 "zip": "/files/LOG448/LOG448_files.zip",
 "files": [
  {
   "file": "01_vbatch.py.txt",
   "url": "/files/LOG448/01_vbatch.py.txt",
   "chars": 9319,
   "lines": 170,
   "lang": "python",
   "section": "作業ログ ― Gemini API のバッチで下書きを頼む道具を作った",
   "heading": "vbatch.py（バッチで頼む・状態を見る・回収する道具）",
   "subheading": ""
  },
  {
   "file": "02_sec02.py.txt",
   "url": "/files/LOG448/02_sec02.py.txt",
   "chars": 6294,
   "lines": 51,
   "lang": "python",
   "section": "第138〜142話の5話を、1つのバッチで40枚頼んだ",
   "heading": "プロットとカメラワーク",
   "subheading": "第138話の spec.py（柱のわきで待つ）"
  },
  {
   "file": "03_sec02.py.txt",
   "url": "/files/LOG448/03_sec02.py.txt",
   "chars": 6308,
   "lines": 55,
   "lang": "python",
   "section": "第138〜142話の5話を、1つのバッチで40枚頼んだ",
   "heading": "プロットとカメラワーク",
   "subheading": "第139話の spec.py（扉の向こう）"
  },
  {
   "file": "04_sec02.py.txt",
   "url": "/files/LOG448/04_sec02.py.txt",
   "chars": 6628,
   "lines": 54,
   "lang": "python",
   "section": "第138〜142話の5話を、1つのバッチで40枚頼んだ",
   "heading": "プロットとカメラワーク",
   "subheading": "第140話の spec.py（紙くず2つ）"
  },
  {
   "file": "05_sec02.py.txt",
   "url": "/files/LOG448/05_sec02.py.txt",
   "chars": 6989,
   "lines": 56,
   "lang": "python",
   "section": "第138〜142話の5話を、1つのバッチで40枚頼んだ",
   "heading": "プロットとカメラワーク",
   "subheading": "第141話の spec.py（隅っこ）"
  },
  {
   "file": "06_sec02.py.txt",
   "url": "/files/LOG448/06_sec02.py.txt",
   "chars": 5795,
   "lines": 48,
   "lang": "python",
   "section": "第138〜142話の5話を、1つのバッチで40枚頼んだ",
   "heading": "プロットとカメラワーク",
   "subheading": "第142話の spec.py（ガラスの壁）"
  },
  {
   "file": "07_sec04.py.txt",
   "url": "/files/LOG448/07_sec04.py.txt",
   "chars": 5403,
   "lines": 121,
   "lang": "python",
   "section": "サイト・英語版・表紙・ショートに出した",
   "heading": "YouTube ショート5本：冒頭の動き",
   "subheading": "motion138x.py（第138〜142話の冒頭の動き）"
  }
 ],
 "article_full_markdown": "/files/LOG448/LOG448_full.md"
}