{
  "version": 1,
  "language": "en",
  "title": "Change controls after each frame",
  "description": "AR-Drag compares two modes. Offline denoising receives a full control sequence. Causal generation keeps fixed history and receives changed guidance.",
  "caption": "Author-redrawn AR-Drag timing comparison. The bidirectional mode uses controls for a full window that can change before output. The autoregressive mode keeps fixed history and receives guidance for subsequent frames. This diagram does not redraw the latency–FID panel. Its points, baselines, hardware and units stay in the original. Arrow spacing and playback time do not show runtime.",
  "alt": "Comparison: offline denoising receives the full control sequence, but causal generation keeps completed history and uses changed guidance.",
  "sources": [
    "https://arxiv.org/abs/2510.08131",
    "https://kesenzhao.github.io/AR-Drag.github.io/"
  ],
  "limitations": [
    "The playback is an example. Animation time is not measured runtime.",
    "The two lanes show different scenarios. They are not modules in operation at the same time.",
    "This diagram recreates no performance points, source video or result for output quality."
  ],
  "targets": {
    "all-controls": {
      "id": "mechanism-all-controls",
      "kind": "node",
      "label": "Full control sequence"
    },
    "joint-window": {
      "id": "mechanism-joint-window",
      "kind": "node",
      "label": "Joint denoising"
    },
    "clip": {
      "id": "mechanism-clip",
      "kind": "node",
      "label": "Output clip"
    },
    "current-control": {
      "id": "mechanism-current-control",
      "kind": "node",
      "label": "Current control"
    },
    "causal": {
      "id": "mechanism-causal",
      "kind": "node",
      "label": "Causal denoising"
    },
    "next-frame": {
      "id": "mechanism-next-frame",
      "kind": "node",
      "label": "Next frame"
    },
    "kv-history": {
      "id": "mechanism-kv-history",
      "kind": "node",
      "label": "KV history"
    },
    "joint-input": {
      "id": "mechanism-joint-input",
      "kind": "edge",
      "label": "joint-input"
    },
    "joint-output": {
      "id": "mechanism-joint-output",
      "kind": "edge",
      "label": "joint-output"
    },
    "current-input": {
      "id": "mechanism-current-input",
      "kind": "edge",
      "label": "current-input"
    },
    "causal-output": {
      "id": "mechanism-causal-output",
      "kind": "edge",
      "label": "causal-output"
    },
    "history-read": {
      "id": "mechanism-history-read",
      "kind": "edge",
      "label": "history-read"
    },
    "history-write": {
      "id": "mechanism-history-write",
      "kind": "edge",
      "label": "history-write"
    }
  },
  "stateLabels": {
    "stage": "Stage",
    "artifact": "Artifact"
  },
  "scenarios": [
    {
      "id": "autoregressive",
      "title": "Autoregressive guidance can change.",
      "description": "Fixed history stays the same when the next guidance changes.",
      "initial": {
        "stage": "Causal input available",
        "artifact": "Initial image/history and guidance c1 available"
      },
      "unselected": [
        "all-controls",
        "joint-window",
        "clip",
        "joint-input",
        "joint-output"
      ],
      "steps": [
        {
          "title": "Read controls and fixed history",
          "description": "The causal generator reads controls and fixed history.",
          "duration": 3000,
          "active": [
            "causal"
          ],
          "paths": [
            "current-input",
            "history-read"
          ],
          "state": {
            "stage": "Causal input",
            "artifact": "Guidance c1 with fixed history"
          }
        },
        {
          "title": "Complete the next frame",
          "description": "The generator completes the next frame.",
          "duration": 3000,
          "active": [
            "next-frame"
          ],
          "paths": [
            "causal-output"
          ],
          "state": {
            "stage": "Frame output",
            "artifact": "Frame f1 fixed"
          }
        },
        {
          "title": "Keep the output frame",
          "description": "The system keeps the output frame in history.",
          "duration": 3000,
          "active": [
            "kv-history"
          ],
          "paths": [
            "history-write"
          ],
          "state": {
            "stage": "History includes the output.",
            "artifact": "History includes f1 at this time."
          }
        },
        {
          "title": "Read changed guidance",
          "description": "The generator receives changed guidance.",
          "duration": 3000,
          "active": [
            "current-control"
          ],
          "paths": [],
          "state": {
            "stage": "Control change",
            "artifact": "The guidance changes to c2. Frame f1 stays fixed."
          }
        },
        {
          "title": "Read updated guidance and history",
          "description": "The generator reads updated guidance and history.",
          "duration": 3000,
          "active": [
            "causal"
          ],
          "paths": [
            "current-input",
            "history-read"
          ],
          "state": {
            "stage": "Next causal input",
            "artifact": "Guidance c2 with history that includes f1"
          }
        },
        {
          "title": "Complete the next controlled frame",
          "description": "The generator completes the next controlled frame.",
          "duration": 3000,
          "active": [
            "next-frame"
          ],
          "paths": [
            "causal-output"
          ],
          "state": {
            "stage": "Next frame output",
            "artifact": "Frame f2 fixed"
          }
        },
        {
          "title": "Keep the second output frame",
          "description": "The system keeps the second output frame in history.",
          "duration": 3000,
          "active": [
            "kv-history"
          ],
          "paths": [
            "history-write"
          ],
          "state": {
            "stage": "History includes the output.",
            "artifact": "History includes f1 and f2."
          }
        }
      ]
    },
    {
      "id": "bidirectional",
      "title": "Bidirectional controls for a full window",
      "description": "This lane shows a different execution. It is not the first stage of the autoregressive lane.",
      "initial": {
        "stage": "Window input available",
        "artifact": "All window controls available"
      },
      "unselected": [
        "current-control",
        "causal",
        "next-frame",
        "kv-history",
        "current-input",
        "causal-output",
        "history-read",
        "history-write"
      ],
      "steps": [
        {
          "title": "Supply the full control sequence",
          "description": "The bidirectional generator receives the full control sequence.",
          "duration": 3000,
          "active": [
            "joint-window"
          ],
          "paths": [
            "joint-input"
          ],
          "state": {
            "stage": "Full window input",
            "artifact": "Full control sequence available"
          }
        },
        {
          "title": "Change the full frame window",
          "description": "Joint denoising changes the full frame window.",
          "duration": 3000,
          "active": [
            "joint-window"
          ],
          "paths": [],
          "state": {
            "stage": "Joint denoising",
            "artifact": "The window can change before output."
          }
        },
        {
          "title": "Supply the output window",
          "description": "The generator supplies the output window.",
          "duration": 3000,
          "active": [
            "clip"
          ],
          "paths": [
            "joint-output"
          ],
          "state": {
            "stage": "Clip output",
            "artifact": "Output frame window"
          }
        }
      ]
    }
  ]
}
