Now I see the pattern clearly - changes are concentrated in specific rows. Let me analyze the change distribution per frame and implement a smarter strategy:

```json
{
  "analysis": "Row 1 has changes in all 1200 frames, rows 2-11 have changes in 300 frames, rows 13-21 have changes in 172 frames. The budget is tight: 67800 bytes for 157316 changed cells = 0.43 bytes/cell. I need to minimize cursor movement overhead significantly.",
  "plan": "Implement optimized cursor positioning:\n1. Use CR+LF for row-down movement (2 bytes vs expensive escape)\n2. Use CR + CUF for column positioning when beneficial\n3. Minimize escape sequences by using 1-byte control chars where possible",
  "commands": [
    {
      "keystrokes": "python3 -c \"\nimport struct\nwith open('/app/frames.tza', 'rb') as f:\n    magic = f.read(4)\n    width, height = struct.unpack('<HH', f.read(4))\n    n_frames, max_bytes = struct.unpack('<II', f.read(8))\n    frames = [f.read(width * height) for _ in range(n_frames)]\n\n# Analyze typical change patterns per frame\nprev = b' ' * (width * height)\nframe_changes = []\nfor i, frame in enumerate(frames):\n    changes = [(r, c) for r in range(height) for c in range(width) if prev[r*width+c] != frame[r*width+c]]\n    frame_changes.append(len(changes))\n    prev = frame\n\nframe_changes.sort()\nprint('Change count percentiles:')\nfor p in [0, 25, 50, 75, 90, 95, 100]:\n    idx = int(p * (n_frames - 1) / 100)\n    print(f'  {p}%: {frame_changes[idx]} changes')\n\"\n",
      "duration": 2.0
    }
  ]
}
```