Skip to content
Coach Play Studio

Basketball plays

One play, all the way through

This is Horns Get: a ball screen out of Horns. The near-side big screens the point guard at the top, then rolls. Below is what one drawn play gives you, and the data that makes it possible.

Horns Get in the Play Library: the diagram, the description, the tags, and the animation ready to run

Watching it animate, a player sees the timing: the screen arrives first, then the guard turns the corner off it, then the roll opens behind the play. No arrows to decode on a frozen diagram.

A shared play open in a plain browser page: no account, no app, the animation one tap away

A share link opens a page like this in any browser: no account, no download. The same play also saves as a sharp 1920 pixel picture of any step, embeds on your own site as a plain iframe with toggles for the title, notes and animation button, and exports as an MP4 on the Coach plan. None of these were made separately; they all render from the same data, so an edit to the play reaches every format.

What's actually underneath

Horns Get is not a picture. It is a structured record, and this is a trimmed excerpt of the real thing:

{
  "play": {
    "schemaVersion": "3.0.0",
    "id": "PLAY-1101",
    "name": "Horns Get",
    "category": "Horns",
    "formation": "Horns",
    "objective": "Ball screen for a driving lane, with a roll to the rim",
    "courtType": "half-fiba",
    "tags": ["ball-screen", "horns", "get-action"]
  },
  "frames": [
    {
      "index": 1,
      "note": "Horns alignment. 1 up top, 4 and 5 at the elbows, shooters in the corners.",
      "durationMs": 2200,
      "objects": [
        { "id": "p1", "type": "player-offense", "label": "1", "x": 0.5, "y": 0.8 },
        { "id": "p4", "type": "player-offense", "label": "4", "x": 0.32, "y": 0.42 },
        { "id": "ball", "type": "ball", "attachedTo": "p1" }
      ],
      "movements": [
        { "type": "dribble", "actor": "p1", "label": "curl left", "speed": "normal",
          "path": [[0.5, 0.8], [0.3, 0.55]], "startAt": 0, "duration": 0.7 },
        { "type": "player_move", "actor": "p4", "label": "roll", "speed": "fast",
          "path": [[0.32, 0.42], [0.42, 0.2]], "startAt": 0.3, "duration": 0.6 }
      ],
      "events": [
        { "type": "screen", "actor": "p4", "target": "p1",
          "label": "ball screen", "at": 0.1, "duration": 0.5 }
      ]
    }
  ]
}
  • Frames are steps. Each is a full snapshot of where everyone stands, with its own note and its own duration. Paused, a step reads like a page of a paper playbook.
  • Timing is real. The screen starts at 0.1 and the roll at 0.3, inside the same step. Actions overlap the way basketball does, which is why the animation looks like a play and not a slideshow.
  • "label": "ball screen" is free text in a coach's own vocabulary. The primitives underneath stay small and frozen, so a new concept never needs a new format.
  • Coordinates are normalized 0 to 1 against the court, so the same play renders on any screen, any court drawing, any export size.

Draw your own Horns Get

The free plan keeps three plays. Draw a set, press play, and send the link to somebody.