{
  "version": 1,
  "language": "en",
  "title": "Control timing: offline, chunked or live",
  "description": "Offline controls are known in advance. Chunk generation receives controls for each block. The person selects live input after they see feedback.",
  "caption": "Figure 4. Offline animation knows future controls. Chunked generation uses a segment for each block. Live interaction lets the person select the next movement after they see feedback. High FPS alone cannot demonstrate the response latency. Author-created diagram.",
  "alt": "Timing comparison: offline controls are known in advance, chunk generation receives controls for each block, and live input follows displayed feedback.",
  "sources": [
    {
      "path": "content/blog/2026-07-23_human-motion-control-interface-for-world-models/post.md",
      "description": "Article explanation and retained source citations"
    }
  ],
  "limitations": [
    "The playback is an example. Animation time is not measured runtime.",
    "The scenarios show causal availability. They show no FPS, fixed frame counts or measured latency, and give no guarantee of real-time interaction."
  ],
  "targets": {
    "fullControls": {
      "id": "mechanism-fullControls",
      "kind": "node",
      "label": "Full controls"
    },
    "offlineRender": {
      "id": "mechanism-offlineRender",
      "kind": "node",
      "label": "Make the sequence"
    },
    "offlinePath": {
      "id": "mechanism-offlinePath",
      "kind": "edge",
      "label": "offlinePath"
    },
    "block0": {
      "id": "mechanism-block0",
      "kind": "node",
      "label": "Block 1"
    },
    "block1": {
      "id": "mechanism-block1",
      "kind": "node",
      "label": "Block 2"
    },
    "block2": {
      "id": "mechanism-block2",
      "kind": "node",
      "label": "Block 3"
    },
    "block01": {
      "id": "mechanism-block01",
      "kind": "edge",
      "label": "block01"
    },
    "block12": {
      "id": "mechanism-block12",
      "kind": "edge",
      "label": "block12"
    },
    "liveTrack": {
      "id": "mechanism-liveTrack",
      "kind": "node",
      "label": "Track"
    },
    "liveGenerate": {
      "id": "mechanism-liveGenerate",
      "kind": "node",
      "label": "Generate"
    },
    "liveDisplay": {
      "id": "mechanism-liveDisplay",
      "kind": "node",
      "label": "Show"
    },
    "liveCorrect": {
      "id": "mechanism-liveCorrect",
      "kind": "node",
      "label": "Correct"
    },
    "liveTG": {
      "id": "mechanism-liveTG",
      "kind": "edge",
      "label": "liveTG"
    },
    "liveGD": {
      "id": "mechanism-liveGD",
      "kind": "edge",
      "label": "liveGD"
    },
    "liveDC": {
      "id": "mechanism-liveDC",
      "kind": "edge",
      "label": "liveDC"
    },
    "liveFeedback": {
      "id": "mechanism-liveFeedback",
      "kind": "edge",
      "label": "liveFeedback"
    }
  },
  "stateLabels": {
    "contract": "Temporal contract",
    "known": "Known controls",
    "input": "Control input",
    "feedback": "Feedback shown"
  },
  "scenarios": [
    {
      "id": "live",
      "title": "The person supplies feedback",
      "description": "The person selects the next control after they see feedback.",
      "initial": {
        "contract": "Not selected",
        "known": "No assumed future controls",
        "input": "No control input",
        "feedback": "Not shown"
      },
      "unselected": [
        "fullControls",
        "offlineRender",
        "offlinePath",
        "block0",
        "block1",
        "block2",
        "block01",
        "block12"
      ],
      "steps": [
        {
          "title": "Track current motion",
          "description": "The tracker tracks current motion.",
          "duration": 3000,
          "active": [
            "liveTrack"
          ],
          "paths": [],
          "state": {
            "contract": "Live feedback",
            "known": "Past and current only",
            "input": "Current motion",
            "feedback": "Not shown"
          }
        },
        {
          "title": "Generate from current controls",
          "description": "The generator generates a response from current controls.",
          "duration": 3000,
          "active": [
            "liveGenerate"
          ],
          "paths": [
            "liveTG"
          ],
          "state": {
            "contract": "Live feedback",
            "known": "Past and current only",
            "input": "Current motion",
            "feedback": "Not shown"
          }
        },
        {
          "title": "Show the response",
          "description": "The display shows the response to the person.",
          "duration": 3000,
          "active": [
            "liveDisplay"
          ],
          "paths": [
            "liveGD"
          ],
          "state": {
            "contract": "Live feedback",
            "known": "Past and current only",
            "input": "Current motion",
            "feedback": "Response shown"
          }
        },
        {
          "title": "Select the next motion",
          "description": "The person selects the next movement after they see the response.",
          "duration": 3000,
          "active": [
            "liveCorrect"
          ],
          "paths": [
            "liveDC"
          ],
          "state": {
            "contract": "Live feedback",
            "known": "Past and current only",
            "input": "Selected after response",
            "feedback": "Response shown"
          }
        },
        {
          "title": "Track new motion",
          "description": "The tracker tracks the new motion.",
          "duration": 3000,
          "active": [
            "liveTrack"
          ],
          "paths": [
            "liveFeedback"
          ],
          "state": {
            "contract": "Live feedback",
            "known": "Past and current only",
            "input": "Selected after response",
            "feedback": "Response shown"
          }
        }
      ]
    },
    {
      "id": "offline",
      "title": "Make video from a known full sequence",
      "description": "The offline generator makes the video from the full control sequence, which is known before generation.",
      "initial": {
        "contract": "Not selected",
        "known": "No assumed future controls",
        "input": "No control input",
        "feedback": "Not shown"
      },
      "unselected": [
        "block0",
        "block1",
        "block2",
        "block01",
        "block12",
        "liveTrack",
        "liveGenerate",
        "liveDisplay",
        "liveCorrect",
        "liveTG",
        "liveGD",
        "liveDC",
        "liveFeedback"
      ],
      "steps": [
        {
          "title": "Read the full control script",
          "description": "The offline generator receives the full control script.",
          "duration": 3000,
          "active": [
            "fullControls"
          ],
          "paths": [],
          "state": {
            "contract": "Offline animation",
            "known": "c_(1:T) known before generation",
            "input": "Full sequence",
            "feedback": "Not shown"
          }
        },
        {
          "title": "Make video with future controls",
          "description": "The generator makes the sequence with future controls.",
          "duration": 3000,
          "active": [
            "offlineRender"
          ],
          "paths": [
            "offlinePath"
          ],
          "state": {
            "contract": "Offline animation",
            "known": "c_(1:T) known before generation",
            "input": "Full sequence",
            "feedback": "User feedback is not necessary for the next controls."
          }
        }
      ]
    },
    {
      "id": "chunks",
      "title": "Read controls at chunk boundaries",
      "description": "The generator reads controls at chunk boundaries.",
      "initial": {
        "contract": "Not selected",
        "known": "No assumed future controls",
        "input": "No control input",
        "feedback": "Not shown"
      },
      "unselected": [
        "fullControls",
        "offlineRender",
        "offlinePath",
        "liveTrack",
        "liveGenerate",
        "liveDisplay",
        "liveCorrect",
        "liveTG",
        "liveGD",
        "liveDC",
        "liveFeedback"
      ],
      "steps": [
        {
          "title": "Set block one controls",
          "description": "The controls are fixed for block one.",
          "duration": 3000,
          "active": [
            "block0"
          ],
          "paths": [],
          "state": {
            "contract": "Causal chunks",
            "known": "Current block controls",
            "input": "Block 1 fixed",
            "feedback": "Not shown"
          }
        },
        {
          "title": "Read next block controls",
          "description": "The generator reads the controls for the next block.",
          "duration": 3000,
          "active": [
            "block1"
          ],
          "paths": [
            "block01"
          ],
          "state": {
            "contract": "Causal chunks",
            "known": "Current block controls",
            "input": "Block 2 fixed",
            "feedback": "Not shown"
          }
        },
        {
          "title": "Read third block controls",
          "description": "The generator reads the controls for the third block.",
          "duration": 3000,
          "active": [
            "block2"
          ],
          "paths": [
            "block12"
          ],
          "state": {
            "contract": "Causal chunks",
            "known": "Current block controls",
            "input": "Block 3 fixed",
            "feedback": "A live response from the person is not assumed."
          }
        }
      ]
    }
  ]
}
