Examples
Real OCF documents, from a fully-annotated set play to a minimal quick-mode sketch. Each one validates against the current JSON Schema.
3-Man Weave
Classic 3-player weave from full court. Players pass and follow their pass, weaving across the court to finish at the basket.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"meta": {
"id": "a3c2e1d0-9b8f-4a7e-b6c5-1d2e3f4a5b6c",
"title": "3-Man Weave",
"description": "Classic 3-player weave from full court. Players pass and follow their pass, weaving across the court to finish at the basket.",
"author": "OCF Examples",
"tags": [
"passing",
"transition",
"full-court",
"3-player",
"beginner",
"conditioning"
],
"difficulty": "beginner",
"created": "2025-02-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "full_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": -14
},
{
"type": "offense",
"nr": 2,
"x": -5,
"y": -14
},
{
"type": "offense",
"nr": 3,
"x": 5,
"y": -14
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Start",
"description": "offense_1 passes to offense_2 and follows the pass, cutting behind offense_2.",
"duration_ms": 1500,
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_2",
"ball_id": "ball_1",
"variant": "chest"
},
{
"player": "offense_1",
"type": "cut",
"moves": [
{
"to": {
"x": -3,
"y": -11
}
}
],
"after": "offense_1.pass"
}
],
"end_state": {
"offense_1": {
"x": -3,
"y": -11
},
"offense_2": {
"x": -5,
"y": -14
},
"offense_3": {
"x": 5,
"y": -14
},
"balls": {
"ball_1": {
"carried_by": "offense_2"
}
}
}
},
{
"id": "frame_2",
"label": "First Exchange",
"description": "offense_2 dribbles to the middle and passes to offense_3, then follows the pass.",
"duration_ms": 2000,
"actions": [
{
"player": "offense_2",
"type": "dribble",
"ball_id": "ball_1",
"moves": [
{
"to": {
"x": 0,
"y": -8
}
}
]
},
{
"player": "offense_2",
"type": "pass",
"to_player": "offense_3",
"ball_id": "ball_1",
"variant": "chest",
"after": "offense_2.dribble"
},
{
"player": "offense_2",
"type": "cut",
"moves": [
{
"to": {
"x": 3.5,
"y": -4
}
}
],
"after": "offense_2.pass"
},
{
"player": "offense_1",
"type": "move",
"moves": [
{
"to": {
"x": -5,
"y": -8
}
}
]
}
],
"end_state": {
"offense_1": {
"x": -5,
"y": -8
},
"offense_2": {
"x": 3.5,
"y": -4
},
"offense_3": {
"x": 5,
"y": -8
},
"balls": {
"ball_1": {
"carried_by": "offense_3"
}
}
}
},
{
"id": "frame_3",
"label": "Second Exchange",
"description": "offense_3 dribbles toward the middle and passes to offense_1 cutting from the left, then follows.",
"duration_ms": 2000,
"actions": [
{
"player": "offense_3",
"type": "dribble",
"ball_id": "ball_1",
"moves": [
{
"to": {
"x": 0,
"y": 0
}
}
]
},
{
"player": "offense_3",
"type": "pass",
"to_player": "offense_1",
"ball_id": "ball_1",
"variant": "chest",
"after": "offense_3.dribble"
},
{
"player": "offense_3",
"type": "cut",
"moves": [
{
"to": {
"x": -3,
"y": 5
}
}
],
"after": "offense_3.pass"
},
{
"player": "offense_1",
"type": "move",
"moves": [
{
"to": {
"x": -5,
"y": 0
}
}
]
},
{
"player": "offense_2",
"type": "move",
"moves": [
{
"to": {
"x": 5,
"y": 0
}
}
]
}
],
"end_state": {
"offense_1": {
"x": -5,
"y": 0
},
"offense_2": {
"x": 5,
"y": 0
},
"offense_3": {
"x": -3,
"y": 5
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_4",
"label": "Finish",
"description": "offense_1 attacks the basket for the layup. offense_2 fills the right wing as the kick-out option.",
"duration_ms": 2000,
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"moves": [
{
"variant": "speed",
"to": {
"named": "basket"
}
}
]
},
{
"player": "offense_1",
"type": "shoot",
"ball_id": "ball_1",
"variant": "layup",
"result": "make",
"after": "offense_1.dribble"
},
{
"player": "offense_2",
"type": "move",
"moves": [
{
"to": {
"named": "right_wing"
}
}
]
}
],
"end_state": {
"offense_1": {
"named": "basket"
},
"offense_2": {
"named": "right_wing"
},
"balls": {
"ball_1": {
"dead": true
}
}
}
}
]
}Basic Pick & Roll
Ball handler uses a ball screen at the top of the key. Screener rolls to the basket for the finish.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"meta": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"title": "Basic Pick & Roll",
"description": "Ball handler uses a ball screen at the top of the key. Screener rolls to the basket for the finish.",
"author": "OCF Examples",
"tags": [
"pick-and-roll",
"offense",
"half-court",
"2-player",
"beginner"
],
"difficulty": "beginner",
"created": "2025-02-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "half_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": 5.68
},
{
"type": "offense",
"nr": 4,
"x": -2.45,
"y": 8.2
},
{
"type": "defense",
"nr": 1,
"x": 0.5,
"y": 5.2
},
{
"type": "defense",
"nr": 4,
"x": -2.8,
"y": 7.8
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Step 1 — Screen",
"description": "offense_4 moves up from the left elbow to set a ball screen for offense_1 at the top of the key.",
"duration_ms": 1500,
"actions": [
{
"player": "offense_4",
"type": "screen",
"for_player": "offense_1",
"on_player": "defense_1",
"variant": "ball_screen",
"at": {
"x": -0.5,
"y": 6.7
},
"physicality": "hard"
}
],
"end_state": {
"offense_1": {
"named": "top_of_the_key"
},
"offense_4": {
"x": -0.5,
"y": 6.2
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_2",
"label": "Step 2 — Attack",
"description": "offense_1 uses the screen and dribbles hard left toward the elbow; offense_4 rolls to the right block.",
"duration_ms": 2000,
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "normal",
"moves": [
{
"variant": "hesitation"
},
{
"variant": "speed",
"to": {
"named": "left_elbow"
},
"around_player": "defense_1",
"intensity": "explosive"
}
]
},
{
"player": "offense_4",
"type": "cut",
"variant": "basket",
"intensity": "fast",
"moves": [
{
"to": {
"named": "right_block"
}
}
],
"tags": [
"roll"
]
}
],
"end_state": {
"offense_1": {
"named": "left_elbow"
},
"offense_4": {
"named": "right_block"
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_3",
"label": "Step 3 — Finish",
"description": "offense_1 throws a bounce pass to the rolling offense_4, who finishes with a layup.",
"duration_ms": 1500,
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_4",
"ball_id": "ball_1",
"variant": "bounce",
"intensity": "hard"
},
{
"player": "offense_4",
"type": "shoot",
"ball_id": "ball_1",
"variant": "layup",
"result": "make",
"on_catch": true,
"intensity": "soft"
}
],
"end_state": {
"offense_1": {
"named": "left_elbow"
},
"offense_4": {
"named": "right_block"
},
"balls": {
"ball_1": {
"dead": true
}
}
}
}
],
"areas": [
{
"form": "rectangle",
"color": "yellow",
"opacity": 0.2,
"x": 0,
"y": 10.5,
"width": 4.9,
"height": 4,
"rotation": 0
}
],
"labels": [
{
"text": "Roll!",
"x": 3.2,
"y": 9.5,
"color": "black"
}
]
}Quick Sketch — Give and Go
Minimal example: a coach sketches a give-and-go without any detail annotations.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"meta": {
"id": "b1e2d3c4-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
"title": "Quick Sketch — Give and Go",
"description": "Minimal example: a coach sketches a give-and-go without any detail annotations.",
"author": "OCF Examples",
"tags": [
"quick-mode",
"give-and-go"
],
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "half_court"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": -3,
"y": 6
},
{
"type": "offense",
"nr": 2,
"x": 3,
"y": 6
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_2"
},
{
"player": "offense_1",
"type": "cut",
"moves": [
{
"to": {
"named": "basket"
}
}
]
}
],
"end_state": {
"offense_1": {
"named": "basket"
},
"balls": {
"ball_1": {
"carried_by": "offense_2"
}
}
}
},
{
"id": "frame_2",
"actions": [
{
"player": "offense_2",
"type": "pass",
"to_player": "offense_1"
},
{
"player": "offense_1",
"type": "shoot"
}
],
"end_state": {
"balls": {
"ball_1": {
"dead": true
}
}
}
}
]
}3v2 Transition
Three offensive players attack two defenders in transition and create a quality shot through ball movement and spacing.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"meta": {
"id": "c9d8e7f6-5a4b-3c2d-1e0f-9a8b7c6d5e4f",
"title": "3v2 Transition",
"description": "Three offensive players attack two defenders in transition and create a quality shot through ball movement and spacing.",
"author": "OCF Examples",
"tags": [
"transition",
"3v2",
"full-court",
"offense",
"intermediate"
],
"difficulty": "intermediate",
"created": "2025-02-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "full_court",
"drill_focus": "transition"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": -12
},
{
"type": "offense",
"nr": 2,
"x": -4,
"y": -10
},
{
"type": "offense",
"nr": 3,
"x": 4,
"y": -10
},
{
"type": "defense",
"nr": 1,
"x": -2,
"y": 2
},
{
"type": "defense",
"nr": 2,
"x": 2,
"y": 2
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Push",
"description": "offense_1 pushes the ball up the middle; offense_2 and offense_3 fill the wings at full speed.",
"duration_ms": 2000,
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"moves": [
{
"variant": "speed",
"to": {
"x": 0,
"y": 1
}
}
]
},
{
"player": "offense_2",
"type": "move",
"moves": [
{
"to": {
"named": "left_wing"
}
}
]
},
{
"player": "offense_3",
"type": "move",
"moves": [
{
"to": {
"named": "right_wing"
}
}
]
}
],
"end_state": {
"offense_1": {
"x": 0,
"y": 1
},
"offense_2": {
"named": "left_wing"
},
"offense_3": {
"named": "right_wing"
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_2",
"label": "Draw and Kick",
"description": "offense_1 attacks defense_1 to commit the help, then kicks to offense_3 in the right corner for the shot.",
"duration_ms": 2000,
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"moves": [
{
"to": {
"named": "left_elbow"
},
"around_player": "defense_1"
}
]
},
{
"player": "offense_3",
"type": "cut",
"variant": "fade",
"moves": [
{
"to": {
"named": "right_corner"
}
}
]
},
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_3",
"ball_id": "ball_1",
"variant": "overhead",
"after": "offense_1.dribble"
},
{
"player": "offense_3",
"type": "shoot",
"ball_id": "ball_1",
"variant": "three",
"on_catch": true
}
],
"end_state": {
"offense_1": {
"named": "left_elbow"
},
"offense_3": {
"named": "right_corner"
},
"balls": {
"ball_1": {
"at": {
"named": "basket"
}
}
}
},
"branches": {
"make": "frame_reset",
"miss": "frame_oreb"
}
},
{
"id": "frame_oreb",
"label": "Offensive Rebound",
"description": "On a miss, offense_2 crashes from the left wing for the offensive rebound and finishes.",
"duration_ms": 1500,
"start_state": {
"offense_2": {
"named": "left_wing"
},
"balls": {
"ball_1": {
"at": {
"named": "basket"
}
}
}
},
"actions": [
{
"player": "offense_2",
"type": "rebound",
"ball_id": "ball_1",
"variant": "offensive",
"tags": [
"put_back"
],
"physicality": "aggressive"
},
{
"player": "offense_2",
"type": "shoot",
"ball_id": "ball_1",
"variant": "layup",
"result": "make",
"after": "offense_2.rebound"
}
],
"end_state": {
"offense_2": {
"named": "basket"
},
"balls": {
"ball_1": {
"dead": true
}
}
}
},
{
"id": "frame_reset",
"label": "Reset",
"description": "On a make, the ball is dead and the rep ends.",
"actions": [],
"end_state": {
"balls": {
"ball_1": {
"dead": true
}
}
}
}
]
}