This tool allows you to quickly build your weightlifting programs, ensure you have proper weekly volume per muscle group, and balance it with the time you spend in a gym. You can build multi-week programs, plan your mesocycles, deload weeks, testing 1RM weeks, and see the weekly undulation of volume and intensity of each exercise on a graph.
Set the program name, create weeks and days, type the list of exercises for each day, putting each exercise on a new line, along with the number of sets and reps after slash (
/
) character, like this:
Squat /3x3-5
Romanian Deadlift /3x8
Autocomplete will help you with the exercise names. You can also create custom exercises if they're missing in the library.
On the right you'll see Weekly Stats, where you can see the number of sets per week per muscle group, whether you're in the recommended range (indicated by color), strength/hypertrophy split, and if you hover a mouse over the numbers - you'll see what exercises contribute to that number, and how much.
The exercise syntax supports RPEs , percentage of 1RM, rest timers, various progressive overload types, etc. Read more about the features in the docs!
When you're done, you can convert this program to Liftosaur program, and run what you planned in the gym, using the Liftosaur app!
To use this program:
Install Liftosaur app
Copy the link to this program by clicking on below
Import the link in the app, on the Choose Program screen.
{"initialProgram":{"customExercises":{},"program":{"vtype":"program","id":"idwpoapa","name":"GZCLP Blacknoir Upper/lower","url":"","author":"","shortDescription":"","description":"","nextDay":1,"weeks":[],"isMultiweek":false,"days":[{"id":"nqzfvyln","name":"Day 1","exercises":[]}],"exercises":[],"tags":[],"deletedDays":[],"deletedWeeks":[],"deletedExercises":[],"clonedAt":1772670579161,"planner":{"name":"GZCLP Blacknoir Upper/lower","weeks":[{"name":"Week 1","days":[{"name":"Day 1","exerciseText":"/// The GZCLP logic is pretty tricky, so the code below may look intimidating.\n/// If you want to figure it out how it works, watch this video:\n/// https://www.youtube.com/watch?v=1sOr8pS9tl4\n///\n/// But if you just want to tweak the program slightly and add/change some T3s,\n/// simply add them at the end of each day, reusing t3: Lat Pulldown.\n/// As an example, there're some optional T3s commented out below (i.e. prefixed with ///).\n/// Remove triple slashes (///) there if you want to add them to the program.\n\n\n// **T1**. It starts with **85% of 5RM** (or approximately **75% or 1RM**).\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T1**.\n\n// **T1**. Retest week, you may skip warmups. Find your new 5RM (5 rep max), as follows\n// * Start with the bar, do 5 reps.\n// * Throw on some more weight, do 5 reps.\n// * Repeat, when the bar starts to get heavy, make smaller jumps.\n// * When you finally get to a set that is hard, but you do it - take that number, long press **5RM Test** set, and set the weight you did\n// * Tap on the \"New 5RM\" set to mark it completed\nt1: Bench Press, Barbell / 2x5, 1x5+ / 3x3, 1x3+ / 4x2, 1x2+ / 1x5 (5RM Test) / 75% / progress: custom(increase: 2.5kg) {~\n if (descriptionIndex == 1) {\n descriptionIndex = 2\n }\n if (setVariationIndex == 4) {\n descriptionIndex = 2\n setVariationIndex = 1\n weights = weights[1] * 0.85\n rm1 = weights[1] / rpeMultiplier(5, 10)\n } else if (completedReps >= reps) {\n weights = weights[ns] + state.increase\n } else if (setVariationIndex == 3) {\n descriptionIndex = 3\n setVariationIndex += 1\n } else {\n setVariationIndex += 1\n }\n~}\n\n// **T2**. Start with **55% of 1RM**.\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T2**.\nt2: Overhead Press, Barbell / 4x8 / 4x6 / 4x4 / 55% / progress: custom(stage1weight: 0kg, increase: 2.5kg, stage3increase: 5kg) {~\n if (descriptionIndex == 1) {\n descriptionIndex = 2\n }\n if (completedReps >= reps) {\n weights = weights[ns] + state.increase\n } else if (setVariationIndex == 1) {\n state.stage1weight = weights[ns]\n setVariationIndex += 1\n } else if (setVariationIndex == 2) {\n setVariationIndex += 1\n } else {\n setVariationIndex = 1\n weights = state.stage1weight + state.stage3increase\n }\n~}\n\nt3: Seated Row, Cable / 3x12, 1x12+ / 60% 90s / progress: custom() {~\n if (completedReps[ns] >= 18) {\n weights = weights[ns] + 2.5kg\n }\n~}\n\nt3: Incline Bench Press, Dumbbell / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: seated row, cable }\nt3: Lateral Raise, Dumbbell / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: seated row, cable }\nt3: Triceps Pushdown, Cable / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: seated row, cable }"},{"name":"Day 2","exerciseText":"// **T1**. It starts with **85% of 5RM** (or approximately **75% or 1RM**).\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T1**.\n\n// **T1**. Retest week, you may skip warmups. Find your new 5RM (5 rep max), as follows\n// * Start with the bar, do 5 reps.\n// * Throw on some more weight, do 5 reps.\n// * Repeat, when the bar starts to get heavy, make smaller jumps.\n// * When you finally get to a set that is hard, but you do it - take that number, long press **5RM Test** set, and set the weight you did\n// * Tap on the \"New 5RM\" set to mark it completed\nt1: Squat, Barbell / 2x5, 1x5+ / 3x3, 1x3+ / 4x2, 1x2+ / 1x5 (5RM Test) / 75% / progress: custom(increase: 5kg) { ...t1: Bench Press, Barbell }\n\n// **T2**. Start with **55% of 1RM**.\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T2**.\nt2: Romanian Deadlift, Barbell / 4x8 / 4x6 / 4x4 / 55% / progress: custom(stage1weight: 0kg, increase: 5kg, stage3increase: 10kg) { ...t2: Overhead Press, Barbell }\n\nt3: Lat Pulldown, Cable / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: Seated Row, Cable }\nt3: Leg Press, Leverage Machine / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: seated row, cable }\nt3: Pullover, Cable / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: seated row, cable }\nt3: Bicep Curl, EZ Bar / ...t3: Seated Row, Cable[1] / progress: custom() { ...t3: seated row, cable }"},{"name":"Day 3","exerciseText":"// **T1**. It starts with **85% of 5RM** (or approximately **75% or 1RM**).\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T1**.\n\n// **T1**. Retest week, you may skip warmups. Find your new 5RM (5 rep max), as follows\n// * Start with the bar, do 5 reps.\n// * Throw on some more weight, do 5 reps.\n// * Repeat, when the bar starts to get heavy, make smaller jumps.\n// * When you finally get to a set that is hard, but you do it - take that number, long press **5RM Test** set, and set the weight you did\n// * Tap on the \"New 5RM\" set to mark it completed\nt1: Overhead Press, Barbell / 2x5, 1x5+ / 3x3, 1x3+ / 4x2, 1x2+ / 1x5 (5RM Test) / 75% / progress: custom(increase: 2.5kg) { ...t1: Bench Press, Barbell }\n\n// **T2**. Start with **55% of 1RM**.\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T2**.\nt2: Bench Press, Barbell / 4x8 / 4x6 / 4x4 / 55% / progress: custom(stage1weight: 0kg, increase: 2.5kg, stage3increase: 5kg) { ...t2: Overhead Press, Barbell }\n\nt3: Seated Row, Cable / ...t3: Seated Row, Cable[1]\nt3: Shoulder Press, Dumbbell / ...t3: Seated Row, Cable[1]\nt3: Incline Bench Press, Dumbbell / ...t3: Seated Row, Cable[1]\nt3: Triceps Pushdown, Cable / ...t3: Seated Row, Cable[1]"},{"name":"Day 4","exerciseText":"// **T1**. It starts with **85% of 5RM** (or approximately **75% or 1RM**).\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T1**.\n\n// **T1**. Retest week, you may skip warmups. Find your new 5RM (5 rep max), as follows\n// * Start with the bar, do 5 reps.\n// * Throw on some more weight, do 5 reps.\n// * Repeat, when the bar starts to get heavy, make smaller jumps.\n// * When you finally get to a set that is hard, but you do it - take that number, long press **5RM Test** set, and set the weight you did\n// * Tap on the \"New 5RM\" set to mark it completed\nt1: Deadlift / 2x5, 1x5+ / 3x3, 1x3+ / 4x2, 1x2+ / 1x5 (5RM Test) / 75% / progress: custom(increase: 5kg) { ...t1: Bench Press, Barbell }\n\n// **T2**. Start with **55% of 1RM**.\n// You can adjust your 1RM by clicking the **edit** icon, and setting the **1 Rep Max** value.\n// There's the RM calculator there to help find it out if you don't know it\n\n// **T2**.\nt2: Squat, Barbell / 4x8 / 4x6 / 4x4 / 55% / progress: custom(stage1weight: 0kg, increase: 5kg, stage3increase: 10kg) { ...t2: Overhead Press, Barbell }\n\nt3: Lat Pulldown, Cable / ...t3: Seated Row, Cable[1]\nt3: Leg Press, Leverage Machine / ...t3: Seated Row, Cable[1]\nt3: Pullover, Cable / ...t3: Seated Row, Cable[1]\nt3: Hammer Curl, Dumbbell / ...t3: Seated Row, Cable[1]"}]}]}},"version":"20240720152051","settings":{"timers":{"workout":120},"planner":{"weeklyRangeSets":{"shoulders":[10,15],"triceps":[10,15],"quadriceps":[10,15],"chest":[10,15],"forearms":[10,15],"abs":[10,15],"hamstrings":[10,15],"back":[10,15],"biceps":[10,15],"glutes":[10,15],"calves":[10,15]},"weeklyFrequency":{"shoulders":2,"triceps":2,"quadriceps":2,"chest":2,"forearms":2,"abs":2,"hamstrings":2,"back":2,"biceps":2,"glutes":2,"calves":2},"strengthSetsPct":30,"hypertrophySetsPct":70,"synergistMultiplier":0.1}}},"revisions":[],"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","shouldSync":false}