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. Week Stats
Total Sets: 74
Strength Sets: 0, 0%
Hypertrophy Sets: 74, 100%
Upper Sets: 48 (48h ) , 4d
Lower Sets: 20 (20h ) , 2d
Core Sets: 6 (6h ) , 2d
Push Sets: 26 (26h ) , 3d
Pull Sets: 22 (22h ) , 2d
Legs Sets: 20 (20h ) , 2d
Shoulders: 28↓ (28h ) , 4d
Triceps: 10 (10h ) , 3d
Back: 23↓ (23h ) , 4d
Abs: 6↑ (6h ) , 2d
Glutes: 11 (11h ) , 2d
Hamstrings: 9↑ (9h ) , 2d
Quadriceps: 12 (12h ) , 2d
Chest: 23↓ (23h ) , 4d
Biceps: 13↓ (13h ) , 3d
Calves: 11 (11h ) , 2d
Forearms: 8↑ (8h ) , 2d
{"maxWidth":2400,"url":"/planner","isLoggedIn":false}
{"exportedProgram":{"customExercises":{},"program":{"deletedExercises":[],"planner":{"name":"HOME GYM ELITE ESTETICA 5 DAYS","vtype":"planner","weeks":[{"name":"Week 1","days":[{"name":"Day 1","exerciseText":"// --- TEMPLATES ÉLITE V6.0 (Enfoque 100% Estética y V-Taper) ---\n\n// T1: Hipertrofia Pesada (5-8 reps, Doble Progresión)\nt1 / used: none / 3x5-8 @8, 1x5-8 @8+ / 75% 180s / warmup: 1x10 25%, 1x5 50%, 1x2 75%, 1x1 90% / update: custom() {~\n if (week % 5 == 0 && setIndex == 0) {\n weights = roundWeight(weights[1] * 0.70)\n minReps = 5\n reps = 8\n numberOfSets = 3\n }\n ~} / progress: custom(saltoNormal: 2.5kg, saltoDoble: 5kg, metaExtra: 3, tecnica+: 1, stalls: 0) {~\n \n var.nuevoRM = calculate1RM(completedWeights[1], completedReps[1])\n if (var.nuevoRM > rm1) { rm1 = var.nuevoRM }\n\n if (week % 5 != 0) {\n if (max(completedWeights) > weights[1]) {\n weights = max(completedWeights)\n state.stalls = 0\n } else if (min(completedReps) >= 8 && state.tecnica > 0) {\n var.nuevoPeso = 0kg\n // Evaluamos la ÚLTIMA serie (AMRAP) para ver si mereces el salto doble\n if (completedReps[numberOfSets] >= 8 + state.metaExtra) {\n var.nuevoPeso = roundWeight(completedWeights[1] + state.saltoDoble)\n } else {\n var.nuevoPeso = roundWeight(completedWeights[1] + state.saltoNormal)\n }\n weights = var.nuevoPeso\n state.stalls = 0\n \n // Si la serie final (AMRAP) fue brutal, pasamos fatiga al T2\n if (completedRPE[numberOfSets] >= 9.5) {\n state[2].fatiga = 1\n }\n } else if (min(completedReps) >= 5) {\n // Mantenimiento: Estás construyendo volumen en el rango 5-7\n weights = completedWeights[1]\n } else {\n // Fallo real: Menos de 5 reps\n state.stalls += 1\n if (state.stalls >= 2) {\n weights = roundWeight(completedWeights[1] * 0.85)\n state.stalls = 0\n } else {\n weights = completedWeights[1]\n }\n }\n }\n~}\n\n// T1_LASTRE: Hipertrofia Pesada Lastrada (Versión Corregida)\nt1_lastre / used: none / 3x5-8 @8, 1x5-8 @8+ / 80kg 180s / warmup: none / update: custom() {~\n // Eliminamos la suma manual de bodyweight porque tu equipamiento 'lastre' ya la incluye automáticamente\n logrpes[numberOfSets] = 1 \n ~} / progress: custom(saltoNormal: 2.5kg, saltoDoble: 5kg, metaExtra: 3, stalls: 0, fatiga: 0, tecnica+: 1) {~\n var.nuevoRM = calculate1RM(completedWeights[1], completedReps[1])\n if (var.nuevoRM > rm1) { rm1 = var.nuevoRM }\n\n // Trabajamos directamente con el peso TOTAL (Tu peso + Discos)\n // Esto es lo estándar en Liftosaur para que el calculador de placas funcione bien\n var.pesoTotalCompletado = completedWeights[1]\n\n if (min(completedReps) >= 8 && completedRPE[numberOfSets] < 10 && state.tecnica > 0) {\n var.nuevoTotal = 0kg\n if (completedReps[numberOfSets] >= 8 + state.metaExtra) {\n var.nuevoTotal = roundWeight(var.pesoTotalCompletado + state.saltoDoble)\n } else {\n var.nuevoTotal = roundWeight(var.pesoTotalCompletado + state.saltoNormal)\n }\n weights = var.nuevoTotal\n state.stalls = 0\n } else if (min(completedReps) >= 5) {\n weights = var.pesoTotalCompletado\n } else {\n state.stalls += 1\n if (state.stalls >= 2) {\n // Descarga del 15% sobre el peso total levantado\n var.descarga = roundWeight(var.pesoTotalCompletado * 0.85)\n // El peso nunca bajará de tu peso corporal (lastre 0)\n weights = max(bodyweight, var.descarga)\n state.stalls = 0\n } else {\n weights = var.pesoTotalCompletado\n }\n }\n~}\n\n// T2: Hipertrofia Bilateral/Unilateral (Memoria de Volumen Dinámica)\nt2 / used: none / 2x8-12 @8, 1x8-12 @8+ / 70% 120s / warmup: none / id: tags(2) / update: custom() {~\n if (week % 5 == 0 && setIndex == 0) {\n weights = roundWeight(weights[1] * 0.80)\n minReps = 8\n reps = 12\n numberOfSets = 2\n }\n if (week % 5 != 0 && setIndex == 1 && completedRPE[1] > 0 && completedRPE[1] <= 7) {\n numberOfSets = 4\n sets(4, 4, 8, 12, 0, completedWeights[1], 120, 8, 1)\n }\n ~} / progress: custom(salto: 2.5kg, stalls: 0, fatiga: 0, tecnica+: 1, lastVol: 0) {~\n \n var.nuevoRM = calculate1RM(completedWeights[1], completedReps[1])\n if (var.nuevoRM > rm1) { rm1 = var.nuevoRM }\n\n if (week % 5 != 0) {\n if (state.fatiga == 1) {\n weights = completedWeights[1]\n state.fatiga = 0 \n state.lastVol = sum(completedReps)\n } else if (max(completedWeights) > weights[1]) {\n weights = max(completedWeights)\n state.stalls = 0\n state.lastVol = 0\n } else if (min(completedReps) >= 12 && completedRPE[1] < 10 && state.tecnica > 0) {\n weights = roundWeight(completedWeights[1] + state.salto)\n state.stalls = 0\n state.lastVol = 0\n } else if (min(completedReps) >= 8) {\n if (sum(completedReps) <= state.lastVol) {\n state.stalls += 1\n } else {\n state.stalls = 0\n }\n state.lastVol = sum(completedReps)\n if (state.stalls >= 3) {\n weights = roundWeight(completedWeights[1] * 0.85)\n state.stalls = 0\n state.lastVol = 0\n }\n } else {\n state.stalls += 1\n if (state.stalls >= 2) {\n weights = roundWeight(completedWeights[1] * 0.85)\n state.stalls = 0\n state.lastVol = 0\n }\n }\n }\n~}\n\n// T2_UNI: Hipertrofia Unilateral TORSO\nt2_uni / used: none / 2x8-12 @8, 1x8-12 @8+ / 70% 120s / warmup: none / id: tags(2) / update: custom() { ...t2 } / progress: custom() { ...t2 }\n\n// T2_LEGS: Hipertrofia Bilateral PIERNAS\nt2_legs / used: none / 2x8-12 @8, 1x8-12 @8+ / 70% 120s / warmup: none / id: tags(2) / update: custom() { ...t2 } / progress: custom() { ...t2 }\n\n// T2_UNI_LEGS: Hipertrofia Unilateral PIERNAS\nt2_uni_legs / used: none / 2x8-12 @8, 1x8-12 @8+ / 70% 120s / warmup: none / id: tags(2) / update: custom() { ...t2 } / progress: custom() { ...t2 }\n\n// T3: Aislamiento (Rango Dinámico 8 a 15 reps)\nt3 / used: none / 2x8-15 @8, 1x8-15 @9+ / 50% 90s / warmup: none / progress: custom(salto: 1kg, stalls: 0, tecnica+: 1, lastVol: 0) {~\n \n var.nuevoRM = calculate1RM(completedWeights[1], completedReps[1])\n if (var.nuevoRM > rm1) { rm1 = var.nuevoRM }\n\n if (max(completedWeights) > weights[1]) {\n weights = max(completedWeights)\n state.stalls = 0\n state.lastVol = 0\n } else if (min(completedReps) >= 15 && state.tecnica > 0 && completedRPE[1] < 10) {\n weights = roundWeight(completedWeights[1] + state.salto)\n state.stalls = 0\n state.lastVol = 0\n } else if (min(completedReps) >= 8) {\n weights = completedWeights[1]\n \n if (sum(completedReps) <= state.lastVol) {\n state.stalls += 1\n } else {\n state.stalls = 0\n }\n \n state.lastVol = sum(completedReps)\n \n if (state.stalls >= 3) {\n weights = roundWeight(completedWeights[1] * 0.85)\n state.stalls = 0\n state.lastVol = 0\n }\n } else {\n state.stalls += 1\n if (state.stalls >= 3) {\n weights = roundWeight(completedWeights[1] * 0.85)\n state.stalls = 0\n state.lastVol = 0\n } else {\n weights = completedWeights[1]\n state.lastVol = sum(completedReps)\n }\n }\n~}\n\n// T3_UNI: Aislamiento Unilateral\nt3_uni / used: none / 2x8-15 @8, 1x8-15 @9+ / 50% 90s / warmup: none / id: tags(2) / progress: custom() { ...t3 }\n\n// T3_BW: Aislamiento a Peso Corporal Puro (Para Pull Ups sin lastre)\nt3_bw / used: none / 3x8-15 / 0kg 90s / warmup: none / update: custom() {~\n if (setIndex == 0) {\n weights = bodyweight\n }\n ~} / progress: custom(stalls: 0, tecnica+: 1, lastVol: 0) {~\n // Al ser solo a peso corporal, el progreso se da ganando repeticiones. \n // Obligamos al script a mantener el peso del programa en 0kg.\n weights = 0kg\n ~}\n\n\nIncline Bench Press / ...t1 / 26kg / progress: custom(saltoNormal: 2kg, saltoDoble: 4kg, metaExtra: 3, tecnica+: 1, stalls: 0) { ...t1 }\nBent Over Row / ...t2 / 37kg / progress: custom(salto: 2kg, stalls: 0, fatiga: 0, tecnica+: 1, lastVol: 0) { ...t2 }\nd1: Lateral Raise / ...t3 / 8kg\nSkullcrusher / ...t3 / 10kg\nIncline Curl / ...t3 / 7kg"},{"name":"Day 2: Pierna (Enfoque Cuádriceps)","exerciseText":"Squat / ...t1 / 1kg\nBulgarian Split Squat / ...t2_uni_legs / 1kg / progress: custom(salto: 2kg, lastVol: 30) { ...t2_uni_legs }\nStanding Calf Raise, Barbell / ...t3 / 1kg / progress: custom(salto: 2kg) { ...t3 }\nHanging Leg Raise / ...t3_bw / progress: custom(salto: 0kg, lastVol: 32) { ...t3_bw }"},{"name":"Day 3: Empuje (Hombros y Pecho Secundario)","exerciseText":"Overhead Press / ...t1 / 1kg / progress: custom(saltoNormal: 1kg, saltoDoble: 2kg) { ...t1 }\nBench Press, Dumbbell / ...t2 / 1kg / progress: custom(salto: 2kg) { ...t2 }\nd3: Lateral Raise / ...t3 / 1kg\nIncline Chest Fly / ...t3 / 1kg / progress: custom(lastVol: 36) { ...t3 }"},{"name":"Day 4: Tirón Pesado (Espalda y Bíceps)","exerciseText":"Chin Up / ...t1_lastre / 1kg\nBent Over One Arm Row / ...t2_uni / 1kg / progress: custom(salto: 2kg) { ...t2_uni }\nReverse Fly / ...t3 / 1kg / progress: custom(lastVol: 30) { ...t3 }\nBicep Curl, EZ Bar / ...t3 / 1kg\nPullover / ...t3 / 1kg / progress: custom(salto: 2kg) { ...t3 }"},{"name":"Day 5: Pierna (Isquios / Glúteo / V-Taper Bonus)","exerciseText":"Romanian Deadlift, Barbell / ...t2_legs / 3x8-12 @8, 1x8-12 @8+ / 43kg / progress: custom(salto: 2kg, stalls: 0, fatiga: 0, tecnica+: 1, lastVol: 0) { ...t2_legs }\nReverse Lunge / ...t2_uni_legs / 10kg / progress: custom(salto: 2kg, lastVol: 0, stalls: 0, fatiga: 0, tecnica+: 0) { ...t2_uni_legs }\neve: Standing Calf Raise, Barbell / ...t3 / 1kg / progress: custom(salto: 2kg) { ...t3 }\nd5: Lateral Raise / ...t3 / 8kg\nCrunch / ...t3_bw / progress: custom(salto: 0kg) { ...t3_bw }"}]}]},"exercises":[],"vtype":"program","days":[],"deletedDays":[],"url":"","isMultiweek":false,"name":"HOME GYM ELITE ESTETICA 5 DAYS","weeks":[],"nextDay":2,"shortDescription":"","clonedAt":1775438798398,"description":"","tags":[],"deletedWeeks":[],"author":"","id":"icipvapo"},"version":"20260304084247","settings":{"timers":{"warmup":90,"workout":180,"reminder":900},"units":"kg"}},"shouldSyncProgram":false,"isMobile":false,"revisions":[]}