8.9 KiB
NIP-XX: Workout Events
draft
optional
This specification defines workout events for fitness tracking. These workout events support both planning (templates) and recording (completed activities).
Event Kinds
Exercise Template (kind: 33401)
Defines reusable exercise definitions. These should remain public to enable discovery and sharing. The content
field contains detailed form instructions and notes.
Required Tags
d
- UUID for template identificationtitle
- Exercise nameformat
- Defines data structure for exercise tracking (possible parameters:weight
,reps
,rpe
,set_type
)format_units
- Defines units for each parameter (possible formats: "kg", "count", "0-10", "warmup|normal|drop|failure")equipment
- Equipment type (possible values:barbell
,dumbbell
,bodyweight
,machine
,cardio
)
Optional Tags
difficulty
- Skill level (possible values:beginner
,intermediate
,advanced
)imeta
- Media metadata for form demonstrations following NIP-92 formatt
- Hashtags for categorization such as muscle group or body movement (possible values:chest
,legs
,push
,pull
)
Workout Template (kind: 33402)
Defines a complete workout plan. The content
field contains workout notes and instructions. Workout templates can prescribe specific parameters while leaving others configurable by the user performing the workout.
Required Tags
d
- UUID for template identificationtitle
- Workout nametype
- Type of workout (possible values:strength
,circuit
,emom
,amrap
)exercise
- Exercise reference and prescription. Format: ["exercise", "kind:pubkey:d-tag", "relay-url", ...parameters matching exercise template format]
Optional Tags
rounds
- Number of rounds for repeating formatsduration
- Total workout duration in secondsinterval
- Duration of each exercise portion in seconds (for timed workouts)rest_between_rounds
- Rest time between rounds in secondst
- Hashtags for categorization
Workout Record (kind: 33403)
Records a completed workout session. The content
field contains notes about the workout.
Required Tags
d
- UUID for record identificationtitle
- Workout nametype
- Type of workout (possible values:strength
,circuit
,emom
,amrap
)exercise
- Exercise reference and completion data. Format: ["exercise", "kind:pubkey:d-tag", "relay-url", ...parameters matching exercise template format]start
- Unix timestamp in seconds for workout startend
- Unix timestamp in seconds for workout endcompleted
- Boolean indicating if workout was completed as planned
Optional Tags
rounds_completed
- Number of rounds completedinterval
- Duration of each exercise portion in seconds (for timed workouts)pr
- Personal Record achieved during workout. Format: "kind:pubkey:d-tag,metric,value". Used to track when a user achieves their best performance for a given exercise and metric (e.g., heaviest weight lifted, most reps completed, fastest time)t
- Hashtags for categorization
Exercise Parameters
Standard Parameters and Units
weight
- Load in kilograms (kg). Empty string for bodyweight exercises, negative values for assisted exercisesreps
- Number of repetitions (count)rpe
- Rate of Perceived Exertion (0-10):- RPE 10: Could not do any more reps, technical failure
- RPE 9: Could maybe do 1 more rep
- RPE 8: Could definitely do 1 more rep, maybe 2
- RPE 7: Could do 2-3 more reps
duration
- Time in secondsset_type
- Set classification (possible values:warmup
,normal
,drop
,failure
)
Additional parameters can be defined in exercise templates in the format_units
tag as needed for specific activities (e.g., distance, heartrate, intensity).
Workout Types and Terminology
This specification provides examples of common workout structures but is not limited to these types. The format is extensible to support various training methodologies while maintaining consistent data structure.
Common Workout Types
Strength
Traditional strength training focusing on sets and reps with defined weights. Typically includes warm-up sets, working sets, and may include techniques like drop sets or failure sets.
Circuit
Multiple exercises performed in sequence with minimal rest between exercises and defined rest periods between rounds. Focuses on maintaining work rate through prescribed exercises.
EMOM (Every Minute On the Minute)
Time-based workout where specific exercises are performed at the start of each minute. Rest time is whatever remains in the minute after completing prescribed work.
AMRAP (As Many Rounds/Reps As Possible)
Time-capped workout where the goal is to complete as many rounds or repetitions as possible of prescribed exercises while maintaining proper form.
Set Types
Normal Sets
Standard working sets that count toward volume and progress tracking.
Warm-up Sets
Preparatory sets using submaximal weights. These sets are not counted in metrics or progress tracking.
Drop Sets
Sets performed immediately after a working set with reduced weight. These are counted in volume calculations but tracked separately for progress analysis.
Failure Sets
Sets where technical failure was reached before completing prescribed reps. These sets are counted in metrics but marked to indicate intensity/failure was reached.
Examples
Exercise Template
{
"kind": 33401,
"content": "Stand with feet hip-width apart, barbell over midfoot. Hinge at hips, grip bar outside knees. Flatten back, brace core. Drive through floor, keeping bar close to legs.\n\nForm demonstration: https://powr.me/exercises/deadlift-demo.mp4",
"tags": [
["d", "bb-deadlift-template"],
["title", "Barbell Deadlift"],
["format", "weight", "reps", "rpe", "set_type"],
["format_units", "kg", "count", "0-10", "warmup|normal|drop|failure"],
["equipment", "barbell"],
["difficulty", "intermediate"],
["imeta",
"url https://powr.me/exercises/deadlift-demo.mp4",
"m video/mp4",
"dim 1920x1080",
"alt Demonstration of proper barbell deadlift form"
],
["t", "compound"],
["t", "legs"],
["t", "posterior"]
]
}
EMOM Workout Template
{
"kind": 33402,
"content": "20 minute EMOM alternating between squats and deadlifts every 30 seconds. Scale weight as needed to complete all reps within each interval.",
"tags": [
["d", "lower-body-emom-template"],
["title", "20min Squat/Deadlift EMOM"],
["type", "emom"],
["duration", "1200"],
["rounds", "20"],
["interval", "30"],
["exercise", "33401:9947f9659dd80c3682402b612f5447e28249997fb3709500c32a585eb0977340:bb-back-squat-template", "wss://powr.me", "", "5", "7", "normal"],
["exercise", "33401:9947f9659dd80c3682402b612f5447e28249997fb3709500c32a585eb0977340:bb-deadlift-template", "wss://powr.me", "", "4", "7", "normal"],
["t", "conditioning"],
["t", "legs"]
]
}
Circuit Workout Record
{
"kind": 33403,
"content": "Completed first round as prescribed. Second round showed form deterioration on deadlifts.",
"tags": [
["d", "workout-20250128"],
["title", "Leg Circuit"],
["type", "circuit"],
["rounds_completed", "1.5"],
["start", "1706454000"],
["end", "1706455800"],
// Round 1 - Completed as prescribed
["exercise", "33401:9947f9659dd80c3682402b612f5447e28249997fb3709500c32a585eb0977340:bb-back-squat-template", "wss://powr.me", "80", "12", "7", "normal"],
["exercise", "33401:9947f9659dd80c3682402b612f5447e28249997fb3709500c32a585eb0977340:bb-deadlift-template", "wss://powr.me", "100", "10", "7", "normal"],
// Round 2 - Failed on deadlifts
["exercise", "33401:9947f9659dd80c3682402b612f5447e28249997fb3709500c32a585eb0977340:bb-back-squat-template", "wss://powr.me", "80", "12", "8", "normal"],
["exercise", "33401:9947f9659dd80c3682402b612f5447e28249997fb3709500c32a585eb0977340:bb-deadlift-template", "wss://powr.me", "100", "4", "10", "failure"],
["completed", "false"],
["t", "legs"]
]
}
Implementation Guidelines
- All workout records SHOULD include accurate start and end times
- Templates MAY prescribe specific parameters while leaving others as empty strings for user input
- Records MUST include actual values for all parameters defined in exercise format
- Failed sets SHOULD be marked with
failure
set_type - Records SHOULD be marked as
false
for completed if prescribed work wasn't completed - PRs SHOULD only be tracked in workout records, not templates
- Exercise references SHOULD use the format "kind:pubkey:d-tag" to ensure proper attribution and versioning
References
This NIP draws inspiration from: