>_ rehablogger
Система работает
← Все сессии
СЕССИЯ УСТРОЙСТВА

rehabapp_2026-09-08_10-31-46

Подключение…
Rehab Logger console · история загружается порциями по 250 записей
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer._openPlayer (package:flutter_sound/public/flutter_sound_player.dart:780:13)
INFO [console] │ #1 MethodChannelFlutterSoundPlayer.channelMethodCallHandler.<anonymous closure> (package:flutter_sound_platform_interface/method_channel_flutter_sound_player.dart:84:21)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 <--- openPlayerCompleted: true
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer.openPlayerCompleted (package:flutter_sound/public/flutter_sound_player.dart:296:13)
INFO [console] │ #1 MethodChannelFlutterSoundPlayer.channelMethodCallHandler.<anonymous closure> (package:flutter_sound_platform_interface/method_channel_flutter_sound_player.dart:84:21)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 ---> openPlayerCompleted: true
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer.openPlayerCompleted (package:flutter_sound/public/flutter_sound_player.dart:281:13)
INFO [console] │ #1 FlutterSoundPlayer.openPlayer.<anonymous closure> (package:flutter_sound/public/flutter_sound_player.dart:721:11)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 FS:---> _openPlayer
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer._openPlayer (package:flutter_sound/public/flutter_sound_player.dart:727:13)
INFO [console] │ #1 new _OnboardingTrainingPageState (package:testapp/features/training/presentation/pages/onboarding_training_page.dart:24:43)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 ctor: FlutterSoundPlayer()
INFO [console] position_message: Теперь поднимите правую ногу вверх до комфортной вам рабочей высоты, fixation_message: Фиксируем значение, не опускайте ногу, error_message: Поднимайте ногу на необходимый уровень}, {id: 99, command_side: left, position_number: 2, position_message: Теперь поднимите левую ногу вверх до комфортной вам рабочей высоты, fixation_message: Фиксируем значение, не опускайте ногу, error_message: Поднимайте ногу на необходимый уровень}]}]}]}}
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 new FlutterSoundPlayer (package:flutter_sound/public/flutter_sound_player.dart:200:13)
INFO [console] r: 1, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 207, sequence_number: 2, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}]}, {id: 82, component_side: left, segment_type: null, parts: [{id: 208, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 209, sequence_number: 2, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 94, command_side: right, position_number: 1, position_message: Лягте на левый бок, левую ногу согните для устойчивости. Правая нога должна лежать на другой ноге и быть продолжением корпуса, fixation_message: Фиксируем длину ноги, оставайтесь в нужном положении, error_message: Не заваливайте ногу в сторону}, {id: 95, command_side: left, position_number: 1, position_message: Лягте на правый бок, правую ногу согните для устойчивост
INFO [console] и. Левая нога должна лежать на другой ноге и быть продолжением корпуса, fixation_message: Фиксируем длину ноги, оставайтесь в нужном положении, error_message: Не заваливайте ногу в сторону}]}, {id: 56, name: Калибровка рабочего угла (угол между прямой таза и ногой), sequence_number: 2, calibration_parameter_type: angle_amplitude, fixation_type: alternate, fixation_order: min_at_first, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_side: true, is_monitored: true, components: [{id: 83, component_side: right, segment_type: null, parts: [{id: 210, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 211, sequence_number: 2, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 212, sequence_number: 3, body_point: {id: 27, mediapipe_index: 26, movenet_index: 14}, line_type: null, part_type: point}]}, {id: 84, component_s
INFO [console] ide: left, segment_type: null, parts: [{id: 213, sequence_number: 1, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 214, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 215, sequence_number: 3, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}]}], commands: [{id: 96, command_side: right, position_number: 1, position_message: Оставайтесь лежать на боку, правая нога - продолжение туловища, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Поднимайте ногу на необходимый уровень}, {id: 97, command_side: left, position_number: 1, position_message: Оставайтесь лежать на боку, левая нога - продолжение туловища, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Поднимайте ногу на необходимый уровень}, {id: 98, command_side: right, position_number: 2,
INFO [console] елайте движения в нужной амплитуде}]}]}, {id: 42, sequence_number: 5, is_monitored: true, name: Подъём прямой ноги в сторону - В и.п. лёжа на боку, image: https://rehabilitation.most.team/storage/exercise/photos/01KQC78495HZ7HDF3FGQ104G16.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Подъём прямой ноги в сторону - В и.п. лёжа на боку, video: https://rehabilitation.most.team/storage/exercise/videos/01KQC78499GQQ5WEFZWRN07YFK.mov, inventory: null, warning: Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу, general_description: Лёжа на боку отвести верхнюю ногу в сторону (поднять). Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу. Представьте, что вы лежите на боку и прижимаетесь спиной к стене, а далее скользите пяткой верхней ноги по стене вверх. Цель – тренировка мышц абдукторов/аддукторов бедра., steps: [{exercise_id
INFO [console] : 42, sequence_number: 1, step_text: Лягте на бок так, чтобы рабочая нога была сверху}, {exercise_id: 42, sequence_number: 2, step_text: Убедитесь, что вы лежите ровно. Голова может лежать на руке или на подушке}, {exercise_id: 42, sequence_number: 3, step_text: Нижнюю ногу слегка согните в колене и тазобедренном суставе для устойчивости}, {exercise_id: 42, sequence_number: 4, step_text: Верхнюю ногу полностью выпрямите. Она должна находиться строго над нижней ногой, образуя одну линию с туловищем}, {exercise_id: 42, sequence_number: 5, step_text: Положите верхнюю руку на талию или на матрас перед собой для равновесия}, {exercise_id: 42, sequence_number: 6, step_text: На выдохе: Медленно поднимите (отведите) прямую ногу вверх. Движение должно происходить строго в плоскости тела, как будто вы отводите ногу в сторону. Нога не должна сгибаться в тазобедренном суставе и отклоняться вперёд по направлению к животу или назад по направлению к спине}, {exercise_id: 42, sequence_number: 7, step_
INFO [console] text: В верхней точке задержитесь на 1-2 секунды, сохраняя ногу прямой и чувствуя напряжение в боковой поверхности бедра и ягодице}, {exercise_id: 42, sequence_number: 8, step_text: На вдохе: Плавно, без рывка, опустите ногу в исходное положение. Старайтесь не класть ногу полностью на нижнюю, а остановитесь чуть выше, чтобы сохранить напряжение в мышцах}, {exercise_id: 42, sequence_number: 9, step_text: Повторите необходимое количество раз }]}, camera_orientation: horizontal, neural_network_type: mediapipe, base_main_command: Поднимайте и опускайте правую ногу, left_main_command: null, calibration_parameters: [{id: 55, name: Калибровка сегмента ноги, sequence_number: 1, calibration_parameter_type: one_segment, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 81, component_side: right, segment_type: null, parts: [{id: 206, sequence_numbe
INFO [console] лжна находиться под углом от 90 до 45 градусов относительно пола. Для удобства и стабильности можно опираться не на прямые руки, а на предплечья, согнув руки в локтях}, {exercise_id: 41, sequence_number: 3, step_text: Приподнимите рабочую ногу на 5-10 см }, {exercise_id: 41, sequence_number: 4, step_text: На выдохе отведите рабочую ногу в сторону (наружу) на максимально возможную амплитуду, которую позволяет ваша подвижность и физическое состояние. Движение должно происходить за счёт работы мышц бедра}, {exercise_id: 41, sequence_number: 5, step_text: На вдохе так же плавно верните ногу в исходное положение (перед собой), но не кладите её на пол до окончания подхода. Нога остаётся на весу}, {exercise_id: 41, sequence_number: 6, step_text: Повторите движение ногой заданное количество раз}]}, camera_orientation: horizontal, neural_network_type: mediapipe, base_main_command: Отводите правую ногу, left_main_command: null, calibration_parameters: [{id: 54, name: Калибровка амплитуды сегмент
INFO [console] а, sequence_number: 1, calibration_parameter_type: segment_amplitude, fixation_type: alternate, fixation_order: min_at_first, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_side: true, is_monitored: true, components: [{id: 79, component_side: right, segment_type: null, parts: [{id: 202, sequence_number: 1, body_point: {id: 30, mediapipe_index: 29, movenet_index: null}, line_type: null, part_type: point}, {id: 203, sequence_number: 2, body_point: {id: 31, mediapipe_index: 30, movenet_index: null}, line_type: null, part_type: point}]}, {id: 80, component_side: left, segment_type: null, parts: [{id: 204, sequence_number: 1, body_point: {id: 30, mediapipe_index: 29, movenet_index: null}, line_type: null, part_type: point}, {id: 205, sequence_number: 2, body_point: {id: 31, mediapipe_index: 30, movenet_index: null}, line_type: null, part_type: point}]}], commands: [{id: 90, command_side: right, position_number: 1, position_message: Сядьт
INFO [console] е на пол лицом к камере. Ноги выпрямите перед собой, держите их вместе. Приподнимите правую ногу на 5-10 см, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Делайте движения в нужной амплитуде}, {id: 91, command_side: left, position_number: 1, position_message: Сядьте на пол лицом к камере. Ноги выпрямите перед собой, держите их вместе. Приподнимите левую ногу на 5-10 см, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Делайте движения в нужной амплитуде}, {id: 92, command_side: right, position_number: 2, position_message: Теперь отведите правую ногу в сторону до комфортного рабочего положения, fixation_message: Фиксируем значение, не отпускайте ногу, error_message: Делайте движения в нужной амплитуде}, {id: 93, command_side: left, position_number: 2, position_message: Теперь отведите левую ногу в сторону до комфортного рабочего положения, fixation_message: Фиксируем значение, не отпускайте ногу, error_message: Д
INFO [console] e: point}, {id: 198, sequence_number: 3, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}]}, {id: 78, component_side: left, segment_type: null, parts: [{id: 199, sequence_number: 1, body_point: {id: 12, mediapipe_index: 11, movenet_index: 5}, line_type: null, part_type: point}, {id: 200, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 201, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 86, command_side: right, position_number: 1, position_message: Оставайтесь лежать на спине правым боком к камере, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Поднимайте ногу на необходимый уровень}, {id: 87, command_side: left, position_number: 1, position_message: Оставайтесь лежать на спине левым боком к камере, fixation_message: Фиксируем значение, ост
INFO [console] авайтесь в нужном положении, error_message: Поднимайте ногу на необходимый уровень}, {id: 88, command_side: right, position_number: 2, position_message: Теперь поднимите правую ногу в вверх до комфортного положения, примерный уровень: 15°-40° градусов от пола, fixation_message: Фиксируем значение, не опускайте ногу, error_message: Поднимайте ногу на необходимый уровень}, {id: 89, command_side: left, position_number: 2, position_message: Теперь поднимите левую ногу в вверх до комфортного положения, примерный уровень: 15°-40° градусов от пола, fixation_message: Фиксируем значение, не опускайте ногу, error_message: Поднимайте ногу на необходимый уровень}]}]}, {id: 41, sequence_number: 4, is_monitored: true, name: Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной, image: https://rehabilitation.most.team/storage/exercise/photos/01KQC6319E6D4MPZ50SGTNW1Q6.png, by_body_side: by_side, execution_order_type: symmetric, approaches_count: 2, execution_c
INFO [console] ount: 6, execution_time: null, instruction: {exercise_name: Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной, video: https://rehabilitation.most.team/storage/exercise/videos/01KQC6319HS0NS6B4PRV3WH9FT.mov, inventory: null, warning: Следить за тем, чтобы бедро не ротировалось (вращалось) наружу, носок стопы отведённой ноги должен “смотреть вверх”, general_description: Спина относительно поверхности может находиться от 90 до 45 градусов к полу (например, упираясь не прямыми руками, а предплечьями, отклонившись больше назад). Приподнять прямую рабочую ногу от поверхности и отвести её в сторону на сколько возможно, не опуская ногу, и вернуться в исходное положение. Можно выполнять без пауз между повторениями. Цель – тренировка мышц абдукторов бедра., steps: [{exercise_id: 41, sequence_number: 1, step_text: Сядьте на пол лицом к камере. Ноги выпрямите перед собой}, {exercise_id: 41, sequence_number: 2, step_text: Корпус отклоните назад. Спина до
INFO [console] mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 82, command_side: right, position_number: 1, position_message: Лягте на спину правым боком к камере. Ноги должны лежать на полу прямыми, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите рабочее колено выпрямленным}, {id: 83, command_side: left, position_number: 1, position_message: Лягте на спину левым боком к камере. Ноги должны лежать на полу прямыми, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите рабочее колено выпрямленным}]}, {id: 52, name: Калибровка угла в голеностопе, sequence_number: 2, calibration_parameter_type: angle, fixation_type: min_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 75, component_side: right, segment_type: null, parts: [{id: 190, s
INFO [console] equence_number: 1, body_point: {id: 27, mediapipe_index: 26, movenet_index: 14}, line_type: null, part_type: point}, {id: 191, sequence_number: 2, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}, {id: 192, sequence_number: 3, body_point: {id: 33, mediapipe_index: 32, movenet_index: null}, line_type: null, part_type: point}]}, {id: 76, component_side: left, segment_type: null, parts: [{id: 193, sequence_number: 1, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 194, sequence_number: 2, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}, {id: 195, sequence_number: 3, body_point: {id: 32, mediapipe_index: 31, movenet_index: null}, line_type: null, part_type: point}]}], commands: [{id: 84, command_side: right, position_number: 1, position_message: Потяните носок правой ноги на себя до комфортного рабочего положения, fixation_message: Фиксируе
INFO [console] м угол в голеностопе, оставайтесь в нужном положении, error_message: Стопа должна быть повернута на себя}, {id: 85, command_side: left, position_number: 1, position_message: Потяните носок левой ноги на себя до комфортного рабочего положения, fixation_message: Фиксируем угол в голеностопе, оставайтесь в нужном положении, error_message: Стопа должна быть повернута на себя}]}, {id: 53, name: Калибровка амплитуды рабочего угла, sequence_number: 3, calibration_parameter_type: angle_amplitude, fixation_type: alternate, fixation_order: max_at_first, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_side: true, is_monitored: true, components: [{id: 77, component_side: right, segment_type: null, parts: [{id: 196, sequence_number: 1, body_point: {id: 13, mediapipe_index: 12, movenet_index: 6}, line_type: null, part_type: point}, {id: 197, sequence_number: 2, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_typ
INFO [console] d: true, name: Круговые движения ногой - в и.п. лежа на спине, image: https://rehabilitation.most.team/storage/exercise/photos/01KQA5HT9XV5G51WZS4TZJVDQ6.png, by_body_side: by_side, execution_order_type: symmetric, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Круговые движения ногой - в и.п. лежа на спине, video: https://rehabilitation.most.team/storage/exercise/videos/01KQA5HTA1S14HGRG0J5HK6SYP.mov, inventory: null, warning: Не допускайте сильного напряжения или переразгиба в пояснице, general_description: В и.п. лежа на спине. Ноги максимально выпрямлены в коленных суставах, стопы "на себя", выполнить движения по часовой стрелке, далее против часовой стрелки. Цель - тренировка четырехглавых мышц, абдукторов/аддукторов, steps: [{exercise_id: 40, sequence_number: 1, step_text: Лягте на спину, расположитесь боком рабочей ноги к камере}, {exercise_id: 40, sequence_number: 2, step_text: Руки расположите вдоль туловища ладонями вниз или в стор
INFO [console] оны для устойчивости}, {exercise_id: 40, sequence_number: 3, step_text: Ноги полностью выпрямите в коленных суставах}, {exercise_id: 40, sequence_number: 4, step_text: Стопы потяните на себя (тыльное сгибание в голеностопном суставе)}, {exercise_id: 40, sequence_number: 5, step_text: Поясницу прижмите к полу, живот слегка подтяните, чтобы избежать излишнего прогиба в пояснице}, {exercise_id: 40, sequence_number: 6, step_text: Начните выполнять круговое движение рабочей выпрямленной ногой. Нога в верхней точке должна подниматься на уровень 30°-45° градусов от пола}, {exercise_id: 40, sequence_number: 7, step_text: Направление ноги (по часовой стрелке / против часовой стрелки) меняйте после каждого повторения}]}, camera_orientation: horizontal, neural_network_type: mediapipe, base_main_command: Выполняйте круговые движения правой ногой, left_main_command: null, calibration_parameters: [{id: 51, name: Калибровка угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixatio
INFO [console] n_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 73, component_side: right, segment_type: null, parts: [{id: 184, sequence_number: 1, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 185, sequence_number: 2, body_point: {id: 27, mediapipe_index: 26, movenet_index: 14}, line_type: null, part_type: point}, {id: 186, sequence_number: 3, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}]}, {id: 74, component_side: left, segment_type: null, parts: [{id: 187, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 188, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 189, sequence_number: 3, body_point: {id: 28,
INFO [console] e: null, part_type: point}, {id: 131, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 54, command_side: right, position_number: 1, position_message: Лягте на спину правым боком к камере, ноги лежат на полу, колени держите выпрямленными, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите колени выпрямленными}, {id: 55, command_side: left, position_number: 1, position_message: Лягте на спину левым боком к камере, ноги лежат на полу, колени держите выпрямленными, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите колени выпрямленными}]}, {id: 42, name: Калибровка амплитуды рабочего угла, sequence_number: 2, calibration_parameter_type: angle_amplitude, fixation_type: alternate, fixation_order: min_at_first, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_sid
INFO [console] e: true, is_monitored: true, components: [{id: 55, component_side: right, segment_type: null, parts: [{id: 132, sequence_number: 1, body_point: {id: 27, mediapipe_index: 26, movenet_index: 14}, line_type: null, part_type: point}, {id: 133, sequence_number: 2, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}, {id: 134, sequence_number: 3, body_point: {id: 33, mediapipe_index: 32, movenet_index: null}, line_type: null, part_type: point}]}, {id: 56, component_side: left, segment_type: null, parts: [{id: 135, sequence_number: 1, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 136, sequence_number: 2, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}, {id: 137, sequence_number: 3, body_point: {id: 32, mediapipe_index: 31, movenet_index: null}, line_type: null, part_type: point}]}], commands: [{id: 56, command_side: right, position_number: 1, p
INFO [console] osition_message: Оставайтесь лежать правым боком камере, потяните носки стоп на себя, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Вращайте стопы в большей амплитуде}, {id: 57, command_side: left, position_number: 1, position_message: Оставайтесь лежать левым боком камере, потяните носки стоп на себя, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Вращайте стопы в большей амплитуде}, {id: 58, command_side: right, position_number: 2, position_message: Теперь потяните носки от себя, положение должно быть комфортным, fixation_message: Фиксируем значение, держите стопы от себя, error_message: Вращайте стопы в большей амплитуде}, {id: 59, command_side: left, position_number: 2, position_message: Теперь потяните носки от себя, положение должно быть комфортным, fixation_message: Фиксируем значение, держите стопы от себя, error_message: Вращайте стопы в большей амплитуде}]}]}, {id: 40, sequence_number: 3, is_monitore
INFO [console] y_side: not_by_side, execution_order_type: null, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Сгибание и разгибание в голеностопных суставах, video: https://rehabilitation.most.team/storage/exercise/videos/01KQ9W7XPHKNMR9R7HF5YSZY9E.mov, inventory: null, warning: Во время выполнения колени должны оставаться выпрямленными, стопы не должны разворачиваться внутрь или наружу (большой палец направлен строго вверх), general_description: Исходное положение - лёжа на спине боком к камере, ноги выпрямлены в коленях. Выполнять движения стопами на себя и от себя в максимально доступной амплитуде., steps: [{exercise_id: 35, sequence_number: 1, step_text: Примите положение лёжа на спине (на полу, коврике или тренировочной скамье), боком к камере}, {exercise_id: 35, sequence_number: 2, step_text: Выпрямите обе ноги в коленях}, {exercise_id: 35, sequence_number: 3, step_text: Стопы расположите параллельно друг другу на ширине таза}, {exercise_id: 35, seq
INFO [console] uence_number: 4, step_text: Руки свободно лежат вдоль туловища ладонями вниз или слегка разведены в стороны для устойчивости}, {exercise_id: 35, sequence_number: 5, step_text: Сохраняя прямое, вытянутое положение обеих ног в коленных суставах, начните выполнять одновременное движение стопами}, {exercise_id: 35, sequence_number: 6, step_text: На себя: Плавно потяните носки стоп максимально на себя (тыльное сгибание), ощущая растяжение в задней поверхности голени и подколенной области}, {exercise_id: 35, sequence_number: 7, step_text: От себя: Затем так же плавно потяните носки стоп максимально от себя (подошвенное сгибание), как будто хотите встать на "цыпочки", ощущая напряжение в икрах}, {exercise_id: 35, sequence_number: 8, step_text: Движение должно быть ритмичным, без рывков, в спокойном темпе}]}, camera_orientation: horizontal, neural_network_type: mediapipe, base_main_command: Сгибайте и разгибайте стопы, left_main_command: null, calibration_parameters: [{id: 41, name: Калибровка
INFO [console] угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 53, component_side: right, segment_type: null, parts: [{id: 126, sequence_number: 1, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 127, sequence_number: 2, body_point: {id: 27, mediapipe_index: 26, movenet_index: 14}, line_type: null, part_type: point}, {id: 128, sequence_number: 3, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}]}, {id: 54, component_side: left, segment_type: null, parts: [{id: 129, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 130, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_typ
INFO [console] , body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}]}, {id: 100, component_side: left, segment_type: null, parts: [{id: 259, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 260, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 261, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 120, command_side: right, position_number: 1, position_message: Встаньте правым боком к камере и положите правую ногу на возвышенность, колено прямое, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите колено выпрямленным}, {id: 121, command_side: left, position_number: 1, position_message: Встаньте левым боком к камере и положите левую ногу на возвышенность, колено прямое, fixation_me
INFO [console] ssage: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите колено выпрямленным}]}, {id: 106, name: Калибровка рабочего угла, sequence_number: 2, calibration_parameter_type: angle, fixation_type: min_value, fixation_order: null, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_side: true, is_monitored: true, components: [{id: 145, component_side: right, segment_type: null, parts: [{id: 388, sequence_number: 1, body_point: {id: 13, mediapipe_index: 12, movenet_index: 6}, line_type: null, part_type: point}, {id: 389, sequence_number: 2, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 390, sequence_number: 3, body_point: {id: 29, mediapipe_index: 28, movenet_index: 16}, line_type: null, part_type: point}]}, {id: 146, component_side: left, segment_type: null, parts: [{id: 391, sequence_number: 1, body_point: {id: 12, mediapipe_index: 11, movenet_index: 5}, l
INFO [console] ine_type: null, part_type: point}, {id: 392, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 393, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 156, command_side: right, position_number: 1, position_message: Наклонитесь к правой ноге до ощущения комфортного растяжения, fixation_message: Фиксируем угол наклона, оставайтесь в нужном положении, error_message: Опускайте корпус ниже}, {id: 157, command_side: left, position_number: 1, position_message: Наклонитесь к левой ноге до ощущения комфортного растяжения, fixation_message: Фиксируем угол наклона, оставайтесь в нужном положении, error_message: Опускайте корпус ниже}]}]}, {id: 35, sequence_number: 2, is_monitored: true, name: Сгибание и разгибание в голеностопных суставах, image: https://rehabilitation.most.team/storage/exercise/photos/01KQ9W7XPDJ63N5ZHWXP8PT0AK.png, by_bod
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-09-08T07:31:53.135822Z, request_id: 66a90216-40b0-4a4b-a34a-febfc3abae32, version: v1}, data: {unit_id: 1021, workout_duration_start: 10, workout_duration_end: 20, body_side: right, exercises: [{id: 47, sequence_number: 1, is_monitored: true, name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, image: https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: null, execution_time: 15, instruction: {exercise_name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, video: https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov, inventory: Возвышенность (стул и т.п.), warning: Не допускайте разворота/заваливания поднятой ноги, general_description: Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка,
INFO [console] ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; стопа и колено поднятой ноги не должны "заваливаться" наружу (отсутствие ротации); наклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; дыхание свободное, без задержек; ощущение растяжения должно быть комфортным, без острой боли., steps: [{exercise_id: 47, sequence_number: 1, step_text: Встаньте боком растягиваемой ноги к камере}, {exercise_id: 47, sequence_number: 2, step_text: Поставьте рабочую ногу на возвышенность, другая нога опорная}, {exercise_id: 47, sequence_number: 3, step_text: Держите спину прямой}, {exercise_id: 47, sequence_number: 4, step_text: Стопа поднятой ноги смотрит на себя}, {exercise_id: 47, sequence_number: 5, step_text: Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прям
INFO [console] ой спиной}, {exercise_id: 47, sequence_number: 6, step_text: В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время}]}, camera_orientation: vertical, neural_network_type: mediapipe, base_main_command: Наклонитесь к правой ноге, left_main_command: null, calibration_parameters: [{id: 64, name: Калибровка угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 99, component_side: right, segment_type: null, parts: [{id: 256, sequence_number: 1, body_point: {id: 25, mediapipe_index: 24, movenet_index: 12}, line_type: null, part_type: point}, {id: 257, sequence_number: 2, body_point: {id: 27, mediapipe_index: 26, movenet_index: 14}, line_type: null, part_type: point}, {id: 258, sequence_number: 3
INFO [console] [DIO] server: openresty
INFO [console] [DIO] Response Text:
INFO [console] [DIO] {"success":true,"meta":{"timestamp":"2026-09-08T07:31:53.135822Z","request_id":"66a90216-40b0-4a4b-a34a-febfc3abae32","version":"v1"},"data":{"unit_id":1021,"workout_duration_start":10,"workout_duration_end":20,"body_side":"right","exercises":[{"id":47,"sequence_number":1,"is_monitored":true,"name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":null,"execution_time":15,"instruction":{"exercise_name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov","inventory":"Возвышенность (стул и т.п.)","warning":"Не допускайте разворота/заваливания поднятой ноги","general_description":"Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; \nстопа и колено поднятой ноги не должны \"заваливаться\" наружу (отсутствие ротации); \nнаклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; \nдыхание свободное, без задержек; \nощущение растяжения должно быть комфортным, без острой боли.","steps":[{"exercise_id":47,"sequence_number":1,"step_text":"Встаньте боком растягиваемой ноги к камере"},{"exercise_id":47,"sequence_number":2,"step_text":"Поставьте рабочую ногу на возвышенность, другая нога опорная"},{"exercise_id":47,"sequence_number":3,"step_text":"Держите спину прямой"},{"exercise_id":47,"sequence_number":4,"step_text":"Стопа поднятой ноги смотрит на себя"},{"exercise_id":47,"sequence_number":5,"step_text":"Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной"},{"exercise_id":47,"sequence_number":6,"step_text":"В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время"}]},"camera_orientation":"vertical","neural_network_type":"mediapipe","base_main_command":"Наклонитесь к правой ноге","left_main_command":null,"calibration_parameters":[{"id":64,"name":"Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":99,"component_side":"right","segment_type":null,"parts":[{"id":256,"sequence_number":1,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":257,"sequence_number":2,"body_point":{"id":27,"mediapipe_index":26,"movenet_index":14},"line_type":null,"part_type":"point"},{"id":258,"sequence_number":3,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"}]},{"id":100,"component_side":"left","segment_type":null,"parts":[{"id":259,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":260,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":261,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":120,"command_side":"right","position_number":1,"position_message":"Встаньте правым боком к камере и положите правую ногу на возвышенность, колено прямое","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите колено выпрямленным"},{"id":121,"command_side":"left","position_number":1,"position_message":"Встаньте левым боком к камере и положите левую ногу на возвышенность, колено прямое","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите колено выпрямленным"}]},{"id":106,"name":"Калибровка рабочего угла","sequence_number":2,"calibration_parameter_type":"angle","fixation_type":"min_value","fixation_order":null,"deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":145,"component_side":"right","segment_type":null,"parts":[{"id":388,"sequence_number":1,"body_point":{"id":13,"mediapipe_index":12,"movenet_index":6},"line_type":null,"part_type":"point"},{"id":389,"sequence_number":2,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":390,"sequence_number":3,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"}]},{"id":146,"component_side":"left","segment_type":null,"parts":[{"id":391,"sequence_number":1,"body_point":{"id":12,"mediapipe_index":11,"movenet_index":5},"line_type":null,"part_type":"point"},{"id":392,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":393,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":156,"command_side":"right","position_number":1,"position_message":"Наклонитесь к правой ноге до ощущения комфортного растяжения","fixation_message":"Фиксируем угол наклона, оставайтесь в нужном положении","error_message":"Опускайте корпус ниже"},{"id":157,"command_side":"left","position_number":1,"position_message":"Наклонитесь к левой ноге до ощущения комфортного растяжения","fixation_message":"Фиксируем угол наклона, оставайтесь в нужном положении","error_message":"Опускайте корпус ниже"}]}]},{"id":35,"sequence_number":2,"is_monitored":true,"name":"Сгибание и разгибание в голеностопных суставах","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQ9W7XPDJ63N5ZHWXP8PT0AK.png","by_body_side":"not_by_side","execution_order_type":null,"approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Сгибание и разгибание в голеностопных суставах","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQ9W7XPHKNMR9R7HF5YSZY9E.mov","inventory":null,"warning":"Во время выполнения колени должны оставаться выпрямленными, стопы не должны разворачиваться внутрь или наружу (большой палец направлен строго вверх)","general_description":"Исходное положение - лёжа на спине боком к камере, ноги выпрямлены в коленях. Выполнять движения стопами на себя и от себя в максимально доступной амплитуде.","steps":[{"exercise_id":35,"sequence_number":1,"step_text":"Примите положение лёжа на спине (на полу, коврике или тренировочной скамье), боком к камере"},{"exercise_id":35,"sequence_number":2,"step_text":"Выпрямите обе ноги в коленях"},{"exercise_id":35,"sequence_number":3,"step_text":"Стопы расположите параллельно друг другу на ширине таза"},{"exercise_id":35,"sequence_number":4,"step_text":"Руки свободно лежат вдоль туловища ладонями вниз или слегка разведены в стороны для устойчивости"},{"exercise_id":35,"sequence_number":5,"step_text":"Сохраняя прямое, вытянутое положение обеих ног в коленных суставах, начните выполнять одновременное движение стопами"},{"exercise_id":35,"sequence_number":6,"step_text":"На себя: Плавно потяните носки стоп максимально на себя (тыльное сгибание), ощущая растяжение в задней поверхности голени и подколенной области"},{"exercise_id":35,"sequence_number":7,"step_text":"От себя: Затем так же плавно потяните носки стоп максимально от себя (подошвенное сгибание), как будто хотите встать на \"цыпочки\", ощущая напряжение в икрах"},{"exercise_id":35,"sequence_number":8,"step_text":"Движение должно быть ритмичным, без рывков, в спокойном темпе"}]},"camera_orientation":"horizontal","neural_network_type":"mediapipe","base_main_command":"Сгибайте и разгибайте стопы","left_main_command":null,"calibration_parameters":[{"id":41,"name":"Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":53,"component_side":"right","segment_type":null,"parts":[{"id":126,"sequence_number":1,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":127,"sequence_number":2,"body_point":{"id":27,"mediapipe_index":26,"movenet_index":14},"line_type":null,"part_type":"point"},{"id":128,"sequence_number":3,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"}]},{"id":54,"component_side":"left","segment_type":null,"parts":[{"id":129,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":130,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":131,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":54,"command_side":"right","position_number":1,"position_message":"Лягте на спину правым боком к камере, ноги лежат на полу, колени держите выпрямленными","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите колени выпрямленными"},{"id":55,"command_side":"left","position_number":1,"position_message":"Лягте на спину левым боком к камере, ноги лежат на полу, колени держите выпрямленными","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите колени выпрямленными"}]},{"id":42,"name":"Калибровка амплитуды рабочего угла","sequence_number":2,"calibration_parameter_type":"angle_amplitude","fixation_type":"alternate","fixation_order":"min_at_first","deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":55,"component_side":"right","segment_type":null,"parts":[{"id":132,"sequence_number":1,"body_point":{"id":27,"mediapipe_index":26,"movenet_index":14},"line_type":null,"part_type":"point"},{"id":133,"sequence_number":2,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"},{"id":134,"sequence_number":3,"body_point":{"id":33,"mediapipe_index":32,"movenet_index":null},"line_type":null,"part_type":"point"}]},{"id":56,"component_side":"left","segment_type":null,"parts":[{"id":135,"sequence_number":1,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":136,"sequence_number":2,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"},{"id":137,"sequence_number":3,"body_point":{"id":32,"mediapipe_index":31,"movenet_index":null},"line_type":null,"part_type":"point"}]}],"commands":[{"id":56,"command_side":"right","position_number":1,"position_message":"Оставайтесь лежать правым боком камере, потяните носки стоп на себя","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Вращайте стопы в большей амплитуде"},{"id":57,"command_side":"left","position_number":1,"position_message":"Оставайтесь лежать левым боком камере, потяните носки стоп на себя","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Вращайте стопы в большей амплитуде"},{"id":58,"command_side":"right","position_number":2,"position_message":"Теперь потяните носки от себя, положение должно быть комфортным","fixation_message":"Фиксируем значение, держите стопы от себя","error_message":"Вращайте стопы в большей амплитуде"},{"id":59,"command_side":"left","position_number":2,"position_message":"Теперь потяните носки от себя, положение должно быть комфортным","fixation_message":"Фиксируем значение, держите стопы от себя","error_message":"Вращайте стопы в большей амплитуде"}]}]},{"id":40,"sequence_number":3,"is_monitored":true,"name":"Круговые движения ногой - в и.п. лежа на спине","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQA5HT9XV5G51WZS4TZJVDQ6.png","by_body_side":"by_side","execution_order_type":"symmetric","approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Круговые движения ногой - в и.п. лежа на спине","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQA5HTA1S14HGRG0J5HK6SYP.mov","inventory":null,"warning":"Не допускайте сильного напряжения или переразгиба в пояснице","general_description":"В и.п. лежа на спине. Ноги максимально выпрямлены в коленных суставах, стопы \"на себя\", выполнить движения по часовой стрелке, далее против часовой стрелки. Цель - тренировка четырехглавых мышц, абдукторов/аддукторов","steps":[{"exercise_id":40,"sequence_number":1,"step_text":"Лягте на спину, расположитесь боком рабочей ноги к камере"},{"exercise_id":40,"sequence_number":2,"step_text":"Руки расположите вдоль туловища ладонями вниз или в стороны для устойчивости"},{"exercise_id":40,"sequence_number":3,"step_text":"Ноги полностью выпрямите в коленных суставах"},{"exercise_id":40,"sequence_number":4,"step_text":"Стопы потяните на себя (тыльное сгибание в голеностопном суставе)"},{"exercise_id":40,"sequence_number":5,"step_text":"Поясницу прижмите к полу, живот слегка подтяните, чтобы избежать излишнего прогиба в пояснице"},{"exercise_id":40,"sequence_number":6,"step_text":"Начните выполнять круговое движение рабочей выпрямленной ногой. Нога в верхней точке должна подниматься на уровень 30°-45° градусов от пола"},{"exercise_id":40,"sequence_number":7,"step_text":"Направление ноги (по часовой стрелке / против часовой стрелки) меняйте после каждого повторения"}]},"camera_orientation":"horizontal","neural_network_type":"mediapipe","base_main_command":"Выполняйте круговые движения правой ногой","left_main_command":null,"calibration_parameters":[{"id":51,"name":"Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":73,"component_side":"right","segment_type":null,"parts":[{"id":184,"sequence_number":1,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":185,"sequence_number":2,"body_point":{"id":27,"mediapipe_index":26,"movenet_index":14},"line_type":null,"part_type":"point"},{"id":186,"sequence_number":3,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"}]},{"id":74,"component_side":"left","segment_type":null,"parts":[{"id":187,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":188,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":189,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":82,"command_side":"right","position_number":1,"position_message":"Лягте на спину правым боком к камере. Ноги должны лежать на полу прямыми","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите рабочее колено выпрямленным"},{"id":83,"command_side":"left","position_number":1,"position_message":"Лягте на спину левым боком к камере. Ноги должны лежать на полу прямыми","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите рабочее колено выпрямленным"}]},{"id":52,"name":"Калибровка угла в голеностопе","sequence_number":2,"calibration_parameter_type":"angle","fixation_type":"min_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":75,"component_side":"right","segment_type":null,"parts":[{"id":190,"sequence_number":1,"body_point":{"id":27,"mediapipe_index":26,"movenet_index":14},"line_type":null,"part_type":"point"},{"id":191,"sequence_number":2,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"},{"id":192,"sequence_number":3,"body_point":{"id":33,"mediapipe_index":32,"movenet_index":null},"line_type":null,"part_type":"point"}]},{"id":76,"component_side":"left","segment_type":null,"parts":[{"id":193,"sequence_number":1,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":194,"sequence_number":2,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"},{"id":195,"sequence_number":3,"body_point":{"id":32,"mediapipe_index":31,"movenet_index":null},"line_type":null,"part_type":"point"}]}],"commands":[{"id":84,"command_side":"right","position_number":1,"position_message":"Потяните носок правой ноги на себя до комфортного рабочего положения","fixation_message":"Фиксируем угол в голеностопе, оставайтесь в нужном положении","error_message":"Стопа должна быть повернута на себя"},{"id":85,"command_side":"left","position_number":1,"position_message":"Потяните носок левой ноги на себя до комфортного рабочего положения","fixation_message":"Фиксируем угол в голеностопе, оставайтесь в нужном положении","error_message":"Стопа должна быть повернута на себя"}]},{"id":53,"name":"Калибровка амплитуды рабочего угла","sequence_number":3,"calibration_parameter_type":"angle_amplitude","fixation_type":"alternate","fixation_order":"max_at_first","deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":77,"component_side":"right","segment_type":null,"parts":[{"id":196,"sequence_number":1,"body_point":{"id":13,"mediapipe_index":12,"movenet_index":6},"line_type":null,"part_type":"point"},{"id":197,"sequence_number":2,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":198,"sequence_number":3,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"}]},{"id":78,"component_side":"left","segment_type":null,"parts":[{"id":199,"sequence_number":1,"body_point":{"id":12,"mediapipe_index":11,"movenet_index":5},"line_type":null,"part_type":"point"},{"id":200,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":201,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":86,"command_side":"right","position_number":1,"position_message":"Оставайтесь лежать на спине правым боком к камере","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Поднимайте ногу на необходимый уровень"},{"id":87,"command_side":"left","position_number":1,"position_message":"Оставайтесь лежать на спине левым боком к камере","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Поднимайте ногу на необходимый уровень"},{"id":88,"command_side":"right","position_number":2,"position_message":"Теперь поднимите правую ногу в вверх до комфортного положения, примерный уровень: 15°-40° градусов от пола","fixation_message":"Фиксируем значение, не опускайте ногу","error_message":"Поднимайте ногу на необходимый уровень"},{"id":89,"command_side":"left","position_number":2,"position_message":"Теперь поднимите левую ногу в вверх до комфортного положения, примерный уровень: 15°-40° градусов от пола","fixation_message":"Фиксируем значение, не опускайте ногу","error_message":"Поднимайте ногу на необходимый уровень"}]}]},{"id":41,"sequence_number":4,"is_monitored":true,"name":"Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQC6319E6D4MPZ50SGTNW1Q6.png","by_body_side":"by_side","execution_order_type":"symmetric","approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQC6319HS0NS6B4PRV3WH9FT.mov","inventory":null,"warning":"Следить за тем, чтобы бедро не ротировалось (вращалось) наружу, носок стопы отведённой ноги должен “смотреть вверх”","general_description":"Спина относительно поверхности может находиться от 90 до 45 градусов к полу (например, упираясь не прямыми руками, а предплечьями, отклонившись больше назад). Приподнять прямую рабочую ногу от поверхности и отвести её в сторону на сколько возможно, не опуская ногу, и вернуться в исходное положение. Можно выполнять без пауз между повторениями. Цель – тренировка мышц абдукторов бедра.","steps":[{"exercise_id":41,"sequence_number":1,"step_text":"Сядьте на пол лицом к камере. Ноги выпрямите перед собой"},{"exercise_id":41,"sequence_number":2,"step_text":"Корпус отклоните назад. Спина должна находиться под углом от 90 до 45 градусов относительно пола. Для удобства и стабильности можно опираться не на прямые руки, а на предплечья, согнув руки в локтях"},{"exercise_id":41,"sequence_number":3,"step_text":"Приподнимите рабочую ногу на 5-10 см "},{"exercise_id":41,"sequence_number":4,"step_text":"На выдохе отведите рабочую ногу в сторону (наружу) на максимально возможную амплитуду, которую позволяет ваша подвижность и физическое состояние. Движение должно происходить за счёт работы мышц бедра"},{"exercise_id":41,"sequence_number":5,"step_text":"На вдохе так же плавно верните ногу в исходное положение (перед собой), но не кладите её на пол до окончания подхода. Нога остаётся на весу"},{"exercise_id":41,"sequence_number":6,"step_text":"Повторите движение ногой заданное количество раз"}]},"camera_orientation":"horizontal","neural_network_type":"mediapipe","base_main_command":"Отводите правую ногу","left_main_command":null,"calibration_parameters":[{"id":54,"name":"Калибровка амплитуды сегмента","sequence_number":1,"calibration_parameter_type":"segment_amplitude","fixation_type":"alternate","fixation_order":"min_at_first","deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":79,"component_side":"right","segment_type":null,"parts":[{"id":202,"sequence_number":1,"body_point":{"id":30,"mediapipe_index":29,"movenet_index":null},"line_type":null,"part_type":"point"},{"id":203,"sequence_number":2,"body_point":{"id":31,"mediapipe_index":30,"movenet_index":null},"line_type":null,"part_type":"point"}]},{"id":80,"component_side":"left","segment_type":null,"parts":[{"id":204,"sequence_number":1,"body_point":{"id":30,"mediapipe_index":29,"movenet_index":null},"line_type":null,"part_type":"point"},{"id":205,"sequence_number":2,"body_point":{"id":31,"mediapipe_index":30,"movenet_index":null},"line_type":null,"part_type":"point"}]}],"commands":[{"id":90,"command_side":"right","position_number":1,"position_message":"Сядьте на пол лицом к камере. Ноги выпрямите перед собой, держите их вместе. Приподнимите правую ногу на 5-10 см","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Делайте движения в нужной амплитуде"},{"id":91,"command_side":"left","position_number":1,"position_message":"Сядьте на пол лицом к камере. Ноги выпрямите перед собой, держите их вместе. Приподнимите левую ногу на 5-10 см","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Делайте движения в нужной амплитуде"},{"id":92,"command_side":"right","position_number":2,"position_message":"Теперь отведите правую ногу в сторону до комфортного рабочего положения","fixation_message":"Фиксируем значение, не отпускайте ногу","error_message":"Делайте движения в нужной амплитуде"},{"id":93,"command_side":"left","position_number":2,"position_message":"Теперь отведите левую ногу в сторону до комфортного рабочего положения","fixation_message":"Фиксируем значение, не отпускайте ногу","error_message":"Делайте движения в нужной амплитуде"}]}]},{"id":42,"sequence_number":5,"is_monitored":true,"name":"Подъём прямой ноги в сторону - В и.п. лёжа на боку","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQC78495HZ7HDF3FGQ104G16.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Подъём прямой ноги в сторону - В и.п. лёжа на боку","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQC78499GQQ5WEFZWRN07YFK.mov","inventory":null,"warning":"Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу","general_description":"Лёжа на боку отвести верхнюю ногу в сторону (поднять). Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу. Представьте, что вы лежите на боку и прижимаетесь спиной к стене, а далее скользите пяткой верхней ноги по стене вверх. Цель – тренировка мышц абдукторов/аддукторов бедра.","steps":[{"exercise_id":42,"sequence_number":1,"step_text":"Лягте на бок так, чтобы рабочая нога была сверху"},{"exercise_id":42,"sequence_number":2,"step_text":"Убедитесь, что вы лежите ровно. Голова может лежать на руке или на подушке"},{"exercise_id":42,"sequence_number":3,"step_text":"Нижнюю ногу слегка согните в колене и тазобедренном суставе для устойчивости"},{"exercise_id":42,"sequence_number":4,"step_text":"Верхнюю ногу полностью выпрямите. Она должна находиться строго над нижней ногой, образуя одну линию с туловищем"},{"exercise_id":42,"sequence_number":5,"step_text":"Положите верхнюю руку на талию или на матрас перед собой для равновесия"},{"exercise_id":42,"sequence_number":6,"step_text":"На выдохе: Медленно поднимите (отведите) прямую ногу вверх. Движение должно происходить строго в плоскости тела, как будто вы отводите ногу в сторону. Нога не должна сгибаться в тазобедренном суставе и отклоняться вперёд по направлению к животу или назад по направлению к спине"},{"exercise_id":42,"sequence_number":7,"step_text":"В верхней точке задержитесь на 1-2 секунды, сохраняя ногу прямой и чувствуя напряжение в боковой поверхности бедра и ягодице"},{"exercise_id":42,"sequence_number":8,"step_text":"На вдохе: Плавно, без рывка, опустите ногу в исходное положение. Старайтесь не класть ногу полностью на нижнюю, а остановитесь чуть выше, чтобы сохранить напряжение в мышцах"},{"exercise_id":42,"sequence_number":9,"step_text":"Повторите необходимое количество раз "}]},"camera_orientation":"horizontal","neural_network_type":"mediapipe","base_main_command":"Поднимайте и опускайте правую ногу","left_main_command":null,"calibration_parameters":[{"id":55,"name":"Калибровка сегмента ноги","sequence_number":1,"calibration_parameter_type":"one_segment","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":81,"component_side":"right","segment_type":null,"parts":[{"id":206,"sequence_number":1,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":207,"sequence_number":2,"body_point":{"id":29,"mediapipe_index":28,"movenet_index":16},"line_type":null,"part_type":"point"}]},{"id":82,"component_side":"left","segment_type":null,"parts":[{"id":208,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":209,"sequence_number":2,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":94,"command_side":"right","position_number":1,"position_message":"Лягте на левый бок, левую ногу согните для устойчивости. Правая нога должна лежать на другой ноге и быть продолжением корпуса","fixation_message":"Фиксируем длину ноги, оставайтесь в нужном положении","error_message":"Не заваливайте ногу в сторону"},{"id":95,"command_side":"left","position_number":1,"position_message":"Лягте на правый бок, правую ногу согните для устойчивости. Левая нога должна лежать на другой ноге и быть продолжением корпуса","fixation_message":"Фиксируем длину ноги, оставайтесь в нужном положении","error_message":"Не заваливайте ногу в сторону"}]},{"id":56,"name":"Калибровка рабочего угла (угол между прямой таза и ногой)","sequence_number":2,"calibration_parameter_type":"angle_amplitude","fixation_type":"alternate","fixation_order":"min_at_first","deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":83,"component_side":"right","segment_type":null,"parts":[{"id":210,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":211,"sequence_number":2,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":212,"sequence_number":3,"body_point":{"id":27,"mediapipe_index":26,"movenet_index":14},"line_type":null,"part_type":"point"}]},{"id":84,"component_side":"left","segment_type":null,"parts":[{"id":213,"sequence_number":1,"body_point":{"id":25,"mediapipe_index":24,"movenet_index":12},"line_type":null,"part_type":"point"},{"id":214,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":215,"sequence_number":3,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"}]}],"commands":[{"id":96,"command_side":"right","position_number":1,"position_message":"Оставайтесь лежать на боку, правая нога - продолжение туловища","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Поднимайте ногу на необходимый уровень"},{"id":97,"command_side":"left","position_number":1,"position_message":"Оставайтесь лежать на боку, левая нога - продолжение туловища","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Поднимайте ногу на необходимый уровень"},{"id":98,"command_side":"right","position_number":2,"position_message":"Теперь поднимите правую ногу вверх до комфортной вам рабочей высоты","fixation_message":"Фиксируем значение, не опускайте ногу","error_message":"Поднимайте ногу на необходимый уровень"},{"id":99,"command_side":"left","position_number":2,"position_message":"Теперь поднимите левую ногу вверх до комфортной вам рабочей высоты","fixation_message":"Фиксируем значение, не опускайте ногу","error_message":"Поднимайте ногу на необходимый уровень"}]}]}]}}
INFO [console] [DIO] transfer-encoding: chunked
INFO [console] [DIO] access-control-allow-origin: http://localhost:3000
INFO [console] [DIO] content-type: application/json
INFO [console] [DIO] connection: keep-alive
INFO [console] [DIO] cache-control: no-cache, private
INFO [console] [DIO] date: Tue, 08 Sep 2026 07:31:53 GMT
INFO [console] [DIO] headers:
INFO [console] [DIO] x-served-by: rehabilitation.most.team
INFO [console] [DIO] access-control-allow-credentials: true
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/detailed-exercises?unit_id=1021&rehabilitation_day_id=2855&workout_id
INFO [console] [DIO] statusCode: 200
INFO [console] [DIO] statusMessage: OK
INFO [console] │ 🐛 FS:<--- setVolume
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] [DIO] *** Response ***
INFO [console] │ #0 FlutterSoundPlayer._setVolume (package:flutter_sound/public/flutter_sound_player.dart:2089:13)
INFO [console] │ #1 <asynchronous suspension>
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] [DIO] null
INFO [console] [DIO]
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] [DIO] headers:
INFO [console] [DIO] Authorization: Bearer 731|k5G5EyqP94CdpqtSw1xn3KwH1mDjUvJTw0XQvakDfb7abc21
INFO [console] [DIO] data:
INFO [console] [DIO] transformTimeout: null
INFO [console] [DIO] receiveDataWhenStatusError: true
INFO [console] [DIO] extra: {}
INFO [console] [DIO] connectTimeout: 0:00:10.000000
INFO [console] [DIO] sendTimeout: null
INFO [console] [DIO] receiveTimeout: 0:00:10.000000
INFO [console] [DIO] responseType: ResponseType.json
INFO [console] [DIO] followRedirects: true
INFO [console] [DIO] persistentConnection: true
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/detailed-exercises?unit_id=1021&rehabilitation_day_id=2855&workout_id
INFO [console] [DIO] method: GET
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 FS:---> setVolume
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer._setVolume (package:flutter_sound/public/flutter_sound_player.dart:2074:13)
INFO [console] │ #1 FlutterSoundPlayer.setVolume.<anonymous closure> (package:flutter_sound/public/flutter_sound_player.dart:2069:13)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 FS:<--- _openPlayer
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer._openPlayer (package:flutter_sound/public/flutter_sound_player.dart:780:13)
INFO [console] │ #1 <asynchronous suspension>
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 <--- openPlayerCompleted: true
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer.openPlayerCompleted (package:flutter_sound/public/flutter_sound_player.dart:296:13)
INFO [console] │ #1 MethodChannelFlutterSoundPlayer.channelMethodCallHandler.<anonymous closure> (package:flutter_sound_platform_interface/method_channel_flutter_sound_player.dart:84:21)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 ---> openPlayerCompleted: true
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer.openPlayerCompleted (package:flutter_sound/public/flutter_sound_player.dart:281:13)
INFO [console] │ #1 MethodChannelFlutterSoundPlayer.channelMethodCallHandler.<anonymous closure> (package:flutter_sound_platform_interface/method_channel_flutter_sound_player.dart:84:21)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 Resetting flutter_sound Player Plugin
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer._openPlayer (package:flutter_sound/public/flutter_sound_player.dart:740:15)
INFO [console] │ #1 FlutterSoundPlayer.openPlayer.<anonymous closure> (package:flutter_sound/public/flutter_sound_player.dart:721:11)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 FS:---> _openPlayer
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 FlutterSoundPlayer._openPlayer (package:flutter_sound/public/flutter_sound_player.dart:727:13)
INFO [console] │ #1 FlutterSoundPlayer.openPlayer.<anonymous closure> (package:flutter_sound/public/flutter_sound_player.dart:721:11)
INFO [console] ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
INFO [console] │ 🐛 ctor: FlutterSoundPlayer()
INFO [console] └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
INFO [console] │ #0 new FlutterSoundPlayer (package:flutter_sound/public/flutter_sound_player.dart:200:13)
INFO [console] │ #1 new AudioPlayerServiceImpl (package:testapp/features/training/data/services/audio_player_service_impl.dart:6:19)
INFO [console] number: 1, step_text: Лягте на бок так, чтобы рабочая нога была сверху}, {exercise_id: 42, sequence_number: 2, step_text: Убедитесь, что вы лежите ровно. Голова может лежать на руке или на подушке}, {exercise_id: 42, sequence_number: 3, step_text: Нижнюю ногу слегка согните в колене и тазобедренном суставе для устойчивости}, {exercise_id: 42, sequence_number: 4, step_text: Верхнюю ногу полностью выпрямите. Она должна находиться строго над нижней ногой, образуя одну линию с туловищем}, {exercise_id: 42, sequence_number: 5, step_text: Положите верхнюю руку на талию или на матрас перед собой для равновесия}, {exercise_id: 42, sequence_number: 6, step_text: На выдохе: Медленно поднимите (отведите) прямую ногу вверх. Движение должно происходить строго в плоскости тела, как будто вы отводите ногу в сторону. Нога не должна сгибаться в тазобедренном суставе и отклоняться вперёд по направлению к животу или назад по направлению к спине}, {exercise_id: 42, sequence_number: 7, step_text: В верхней
INFO [console] точке задержитесь на 1-2 секунды, сохраняя ногу прямой и чувствуя напряжение в боковой поверхности бедра и ягодице}, {exercise_id: 42, sequence_number: 8, step_text: На вдохе: Плавно, без рывка, опустите ногу в исходное положение. Старайтесь не класть ногу полностью на нижнюю, а остановитесь чуть выше, чтобы сохранить напряжение в мышцах}, {exercise_id: 42, sequence_number: 9, step_text: Повторите необходимое количество раз }]}}]}}
INFO [console] [DIO]
INFO [console] .п. сидя с прямыми ногами с опорой руками назад за спиной, image: https://rehabilitation.most.team/storage/exercise/photos/01KQC6319E6D4MPZ50SGTNW1Q6.png, by_body_side: by_side, execution_order_type: symmetric, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной, video: https://rehabilitation.most.team/storage/exercise/videos/01KQC6319HS0NS6B4PRV3WH9FT.mov, inventory: null, warning: Следить за тем, чтобы бедро не ротировалось (вращалось) наружу, носок стопы отведённой ноги должен “смотреть вверх”, general_description: Спина относительно поверхности может находиться от 90 до 45 градусов к полу (например, упираясь не прямыми руками, а предплечьями, отклонившись больше назад). Приподнять прямую рабочую ногу от поверхности и отвести её в сторону на сколько возможно, не опуская ногу, и вернуться в исходное положение. Можно выполнять без пауз между повторения
INFO [console] ми. Цель – тренировка мышц абдукторов бедра., steps: [{exercise_id: 41, sequence_number: 1, step_text: Сядьте на пол лицом к камере. Ноги выпрямите перед собой}, {exercise_id: 41, sequence_number: 2, step_text: Корпус отклоните назад. Спина должна находиться под углом от 90 до 45 градусов относительно пола. Для удобства и стабильности можно опираться не на прямые руки, а на предплечья, согнув руки в локтях}, {exercise_id: 41, sequence_number: 3, step_text: Приподнимите рабочую ногу на 5-10 см }, {exercise_id: 41, sequence_number: 4, step_text: На выдохе отведите рабочую ногу в сторону (наружу) на максимально возможную амплитуду, которую позволяет ваша подвижность и физическое состояние. Движение должно происходить за счёт работы мышц бедра}, {exercise_id: 41, sequence_number: 5, step_text: На вдохе так же плавно верните ногу в исходное положение (перед собой), но не кладите её на пол до окончания подхода. Нога остаётся на весу}, {exercise_id: 41, sequence_number: 6, step_text: Повторит
INFO [console] е движение ногой заданное количество раз}]}}, {id: 42, sequence_number: 5, name: Подъём прямой ноги в сторону - В и.п. лёжа на боку, image: https://rehabilitation.most.team/storage/exercise/photos/01KQC78495HZ7HDF3FGQ104G16.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Подъём прямой ноги в сторону - В и.п. лёжа на боку, video: https://rehabilitation.most.team/storage/exercise/videos/01KQC78499GQQ5WEFZWRN07YFK.mov, inventory: null, warning: Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу, general_description: Лёжа на боку отвести верхнюю ногу в сторону (поднять). Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу. Представьте, что вы лежите на боку и прижимаетесь спиной к стене, а далее скользите пяткой верхней ноги по стене вверх. Цель – тренировка мышц абдукторов/аддукторов бедра., steps: [{exercise_id: 42, sequence_
INFO [console] амплитуде., steps: [{exercise_id: 35, sequence_number: 1, step_text: Примите положение лёжа на спине (на полу, коврике или тренировочной скамье), боком к камере}, {exercise_id: 35, sequence_number: 2, step_text: Выпрямите обе ноги в коленях}, {exercise_id: 35, sequence_number: 3, step_text: Стопы расположите параллельно друг другу на ширине таза}, {exercise_id: 35, sequence_number: 4, step_text: Руки свободно лежат вдоль туловища ладонями вниз или слегка разведены в стороны для устойчивости}, {exercise_id: 35, sequence_number: 5, step_text: Сохраняя прямое, вытянутое положение обеих ног в коленных суставах, начните выполнять одновременное движение стопами}, {exercise_id: 35, sequence_number: 6, step_text: На себя: Плавно потяните носки стоп максимально на себя (тыльное сгибание), ощущая растяжение в задней поверхности голени и подколенной области}, {exercise_id: 35, sequence_number: 7, step_text: От себя: Затем так же плавно потяните носки стоп максимально от себя (подошвенное сгибани
INFO [console] е), как будто хотите встать на "цыпочки", ощущая напряжение в икрах}, {exercise_id: 35, sequence_number: 8, step_text: Движение должно быть ритмичным, без рывков, в спокойном темпе}]}}, {id: 40, sequence_number: 3, name: Круговые движения ногой - в и.п. лежа на спине, image: https://rehabilitation.most.team/storage/exercise/photos/01KQA5HT9XV5G51WZS4TZJVDQ6.png, by_body_side: by_side, execution_order_type: symmetric, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Круговые движения ногой - в и.п. лежа на спине, video: https://rehabilitation.most.team/storage/exercise/videos/01KQA5HTA1S14HGRG0J5HK6SYP.mov, inventory: null, warning: Не допускайте сильного напряжения или переразгиба в пояснице, general_description: В и.п. лежа на спине. Ноги максимально выпрямлены в коленных суставах, стопы "на себя", выполнить движения по часовой стрелке, далее против часовой стрелки. Цель - тренировка четырехглавых мышц, абдукторов/аддукторов, steps: [{exercis
INFO [console] e_id: 40, sequence_number: 1, step_text: Лягте на спину, расположитесь боком рабочей ноги к камере}, {exercise_id: 40, sequence_number: 2, step_text: Руки расположите вдоль туловища ладонями вниз или в стороны для устойчивости}, {exercise_id: 40, sequence_number: 3, step_text: Ноги полностью выпрямите в коленных суставах}, {exercise_id: 40, sequence_number: 4, step_text: Стопы потяните на себя (тыльное сгибание в голеностопном суставе)}, {exercise_id: 40, sequence_number: 5, step_text: Поясницу прижмите к полу, живот слегка подтяните, чтобы избежать излишнего прогиба в пояснице}, {exercise_id: 40, sequence_number: 6, step_text: Начните выполнять круговое движение рабочей выпрямленной ногой. Нога в верхней точке должна подниматься на уровень 30°-45° градусов от пола}, {exercise_id: 40, sequence_number: 7, step_text: Направление ноги (по часовой стрелке / против часовой стрелки) меняйте после каждого повторения}]}}, {id: 41, sequence_number: 4, name: Отведение прямой ноги в сторону - В и
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-09-08T07:31:50.900721Z, request_id: 59377b79-dcdc-4c0e-9070-7296b4a7dfe2, version: v1}, data: {unit_id: 1021, workout_duration_start: 10, workout_duration_end: 20, body_side: right, exercises: [{id: 47, sequence_number: 1, name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, image: https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: null, execution_time: 15, instruction: {exercise_name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, video: https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov, inventory: Возвышенность (стул и т.п.), warning: Не допускайте разворота/заваливания поднятой ноги, general_description: Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус
INFO [console] наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; стопа и колено поднятой ноги не должны "заваливаться" наружу (отсутствие ротации); наклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; дыхание свободное, без задержек; ощущение растяжения должно быть комфортным, без острой боли., steps: [{exercise_id: 47, sequence_number: 1, step_text: Встаньте боком растягиваемой ноги к камере}, {exercise_id: 47, sequence_number: 2, step_text: Поставьте рабочую ногу на возвышенность, другая нога опорная}, {exercise_id: 47, sequence_number: 3, step_text: Держите спину прямой}, {exercise_id: 47, sequence_number: 4, step_text: Стопа поднятой ноги смотрит на себя}, {exercise_id: 47, sequence_number: 5, step_text: Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной}, {exercis
INFO [console] e_id: 47, sequence_number: 6, step_text: В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время}]}}, {id: 35, sequence_number: 2, name: Сгибание и разгибание в голеностопных суставах, image: https://rehabilitation.most.team/storage/exercise/photos/01KQ9W7XPDJ63N5ZHWXP8PT0AK.png, by_body_side: not_by_side, execution_order_type: null, approaches_count: 2, execution_count: 6, execution_time: null, instruction: {exercise_name: Сгибание и разгибание в голеностопных суставах, video: https://rehabilitation.most.team/storage/exercise/videos/01KQ9W7XPHKNMR9R7HF5YSZY9E.mov, inventory: null, warning: Во время выполнения колени должны оставаться выпрямленными, стопы не должны разворачиваться внутрь или наружу (большой палец направлен строго вверх), general_description: Исходное положение - лёжа на спине боком к камере, ноги выпрямлены в коленях. Выполнять движения стопами на себя и от себя в максимально доступной
INFO [console] [DIO] server: openresty
INFO [console] [DIO] Response Text:
INFO [console] [DIO] {"success":true,"meta":{"timestamp":"2026-09-08T07:31:50.900721Z","request_id":"59377b79-dcdc-4c0e-9070-7296b4a7dfe2","version":"v1"},"data":{"unit_id":1021,"workout_duration_start":10,"workout_duration_end":20,"body_side":"right","exercises":[{"id":47,"sequence_number":1,"name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":null,"execution_time":15,"instruction":{"exercise_name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov","inventory":"Возвышенность (стул и т.п.)","warning":"Не допускайте разворота/заваливания поднятой ноги","general_description":"Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; \nстопа и колено поднятой ноги не должны \"заваливаться\" наружу (отсутствие ротации); \nнаклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; \nдыхание свободное, без задержек; \nощущение растяжения должно быть комфортным, без острой боли.","steps":[{"exercise_id":47,"sequence_number":1,"step_text":"Встаньте боком растягиваемой ноги к камере"},{"exercise_id":47,"sequence_number":2,"step_text":"Поставьте рабочую ногу на возвышенность, другая нога опорная"},{"exercise_id":47,"sequence_number":3,"step_text":"Держите спину прямой"},{"exercise_id":47,"sequence_number":4,"step_text":"Стопа поднятой ноги смотрит на себя"},{"exercise_id":47,"sequence_number":5,"step_text":"Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной"},{"exercise_id":47,"sequence_number":6,"step_text":"В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время"}]}},{"id":35,"sequence_number":2,"name":"Сгибание и разгибание в голеностопных суставах","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQ9W7XPDJ63N5ZHWXP8PT0AK.png","by_body_side":"not_by_side","execution_order_type":null,"approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Сгибание и разгибание в голеностопных суставах","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQ9W7XPHKNMR9R7HF5YSZY9E.mov","inventory":null,"warning":"Во время выполнения колени должны оставаться выпрямленными, стопы не должны разворачиваться внутрь или наружу (большой палец направлен строго вверх)","general_description":"Исходное положение - лёжа на спине боком к камере, ноги выпрямлены в коленях. Выполнять движения стопами на себя и от себя в максимально доступной амплитуде.","steps":[{"exercise_id":35,"sequence_number":1,"step_text":"Примите положение лёжа на спине (на полу, коврике или тренировочной скамье), боком к камере"},{"exercise_id":35,"sequence_number":2,"step_text":"Выпрямите обе ноги в коленях"},{"exercise_id":35,"sequence_number":3,"step_text":"Стопы расположите параллельно друг другу на ширине таза"},{"exercise_id":35,"sequence_number":4,"step_text":"Руки свободно лежат вдоль туловища ладонями вниз или слегка разведены в стороны для устойчивости"},{"exercise_id":35,"sequence_number":5,"step_text":"Сохраняя прямое, вытянутое положение обеих ног в коленных суставах, начните выполнять одновременное движение стопами"},{"exercise_id":35,"sequence_number":6,"step_text":"На себя: Плавно потяните носки стоп максимально на себя (тыльное сгибание), ощущая растяжение в задней поверхности голени и подколенной области"},{"exercise_id":35,"sequence_number":7,"step_text":"От себя: Затем так же плавно потяните носки стоп максимально от себя (подошвенное сгибание), как будто хотите встать на \"цыпочки\", ощущая напряжение в икрах"},{"exercise_id":35,"sequence_number":8,"step_text":"Движение должно быть ритмичным, без рывков, в спокойном темпе"}]}},{"id":40,"sequence_number":3,"name":"Круговые движения ногой - в и.п. лежа на спине","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQA5HT9XV5G51WZS4TZJVDQ6.png","by_body_side":"by_side","execution_order_type":"symmetric","approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Круговые движения ногой - в и.п. лежа на спине","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQA5HTA1S14HGRG0J5HK6SYP.mov","inventory":null,"warning":"Не допускайте сильного напряжения или переразгиба в пояснице","general_description":"В и.п. лежа на спине. Ноги максимально выпрямлены в коленных суставах, стопы \"на себя\", выполнить движения по часовой стрелке, далее против часовой стрелки. Цель - тренировка четырехглавых мышц, абдукторов/аддукторов","steps":[{"exercise_id":40,"sequence_number":1,"step_text":"Лягте на спину, расположитесь боком рабочей ноги к камере"},{"exercise_id":40,"sequence_number":2,"step_text":"Руки расположите вдоль туловища ладонями вниз или в стороны для устойчивости"},{"exercise_id":40,"sequence_number":3,"step_text":"Ноги полностью выпрямите в коленных суставах"},{"exercise_id":40,"sequence_number":4,"step_text":"Стопы потяните на себя (тыльное сгибание в голеностопном суставе)"},{"exercise_id":40,"sequence_number":5,"step_text":"Поясницу прижмите к полу, живот слегка подтяните, чтобы избежать излишнего прогиба в пояснице"},{"exercise_id":40,"sequence_number":6,"step_text":"Начните выполнять круговое движение рабочей выпрямленной ногой. Нога в верхней точке должна подниматься на уровень 30°-45° градусов от пола"},{"exercise_id":40,"sequence_number":7,"step_text":"Направление ноги (по часовой стрелке / против часовой стрелки) меняйте после каждого повторения"}]}},{"id":41,"sequence_number":4,"name":"Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQC6319E6D4MPZ50SGTNW1Q6.png","by_body_side":"by_side","execution_order_type":"symmetric","approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Отведение прямой ноги в сторону - В и.п. сидя с прямыми ногами с опорой руками назад за спиной","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQC6319HS0NS6B4PRV3WH9FT.mov","inventory":null,"warning":"Следить за тем, чтобы бедро не ротировалось (вращалось) наружу, носок стопы отведённой ноги должен “смотреть вверх”","general_description":"Спина относительно поверхности может находиться от 90 до 45 градусов к полу (например, упираясь не прямыми руками, а предплечьями, отклонившись больше назад). Приподнять прямую рабочую ногу от поверхности и отвести её в сторону на сколько возможно, не опуская ногу, и вернуться в исходное положение. Можно выполнять без пауз между повторениями. Цель – тренировка мышц абдукторов бедра.","steps":[{"exercise_id":41,"sequence_number":1,"step_text":"Сядьте на пол лицом к камере. Ноги выпрямите перед собой"},{"exercise_id":41,"sequence_number":2,"step_text":"Корпус отклоните назад. Спина должна находиться под углом от 90 до 45 градусов относительно пола. Для удобства и стабильности можно опираться не на прямые руки, а на предплечья, согнув руки в локтях"},{"exercise_id":41,"sequence_number":3,"step_text":"Приподнимите рабочую ногу на 5-10 см "},{"exercise_id":41,"sequence_number":4,"step_text":"На выдохе отведите рабочую ногу в сторону (наружу) на максимально возможную амплитуду, которую позволяет ваша подвижность и физическое состояние. Движение должно происходить за счёт работы мышц бедра"},{"exercise_id":41,"sequence_number":5,"step_text":"На вдохе так же плавно верните ногу в исходное положение (перед собой), но не кладите её на пол до окончания подхода. Нога остаётся на весу"},{"exercise_id":41,"sequence_number":6,"step_text":"Повторите движение ногой заданное количество раз"}]}},{"id":42,"sequence_number":5,"name":"Подъём прямой ноги в сторону - В и.п. лёжа на боку","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQC78495HZ7HDF3FGQ104G16.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":6,"execution_time":null,"instruction":{"exercise_name":"Подъём прямой ноги в сторону - В и.п. лёжа на боку","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQC78499GQQ5WEFZWRN07YFK.mov","inventory":null,"warning":"Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу","general_description":"Лёжа на боку отвести верхнюю ногу в сторону (поднять). Верхняя нога не должна сильно сгибаться в бедре, т.е. отклоняться вперёд к животу. Представьте, что вы лежите на боку и прижимаетесь спиной к стене, а далее скользите пяткой верхней ноги по стене вверх. Цель – тренировка мышц абдукторов/аддукторов бедра.","steps":[{"exercise_id":42,"sequence_number":1,"step_text":"Лягте на бок так, чтобы рабочая нога была сверху"},{"exercise_id":42,"sequence_number":2,"step_text":"Убедитесь, что вы лежите ровно. Голова может лежать на руке или на подушке"},{"exercise_id":42,"sequence_number":3,"step_text":"Нижнюю ногу слегка согните в колене и тазобедренном суставе для устойчивости"},{"exercise_id":42,"sequence_number":4,"step_text":"Верхнюю ногу полностью выпрямите. Она должна находиться строго над нижней ногой, образуя одну линию с туловищем"},{"exercise_id":42,"sequence_number":5,"step_text":"Положите верхнюю руку на талию или на матрас перед собой для равновесия"},{"exercise_id":42,"sequence_number":6,"step_text":"На выдохе: Медленно поднимите (отведите) прямую ногу вверх. Движение должно происходить строго в плоскости тела, как будто вы отводите ногу в сторону. Нога не должна сгибаться в тазобедренном суставе и отклоняться вперёд по направлению к животу или назад по направлению к спине"},{"exercise_id":42,"sequence_number":7,"step_text":"В верхней точке задержитесь на 1-2 секунды, сохраняя ногу прямой и чувствуя напряжение в боковой поверхности бедра и ягодице"},{"exercise_id":42,"sequence_number":8,"step_text":"На вдохе: Плавно, без рывка, опустите ногу в исходное положение. Старайтесь не класть ногу полностью на нижнюю, а остановитесь чуть выше, чтобы сохранить напряжение в мышцах"},{"exercise_id":42,"sequence_number":9,"step_text":"Повторите необходимое количество раз "}]}}]}}
INFO [console] [DIO] transfer-encoding: chunked
INFO [console] [DIO] access-control-allow-origin: http://localhost:3000
INFO [console] [DIO] content-type: application/json
INFO [console] [DIO] connection: keep-alive
INFO [console] [DIO] cache-control: no-cache, private
INFO [console] [DIO] date: Tue, 08 Sep 2026 07:31:50 GMT
INFO [console] [DIO] headers:
INFO [console] [DIO] x-served-by: rehabilitation.most.team
INFO [console] [DIO] access-control-allow-credentials: true
ERROR [services library] Argument for dev.flutter.pigeon.camera_android_camerax.Analyzer.analyze was null, expected non-null Analyzer. 'package:camera_android_camerax/src/camerax_library.g.dart': Failed assertion: line 6346 pos 13: 'arg_pigeon_instance != null'
'package:camera_android_camerax/src/camerax_library.g.dart': Failed assertion: line 6346 pos 13: 'arg_pigeon_instance != null': Argument for dev.flutter.pigeon.camera_android_camerax.Analyzer.analyze was null, expected non-null Analyzer.
#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:67:4)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:49:5)
#2      Analyzer.pigeon_setUpMessageHandlers.<anonymous closure> (package:camera_android_camerax/src/camerax_library.g.dart:6346:13)
#3      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:258:49)
#4      _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:663:35)
#5      _invoke2 (dart:ui/hooks.dart:455:13)
#6      _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:45:5)
#7      _Channel._drainStep (dart:ui/channel_buffers.dart:229:31)
#8      _rootRun (dart:async/zone_root.dart:27:47)
#9      _CustomZone.run (dart:async/zone.dart:726:19)
#10     _CustomZone.runGuarded (dart:async/zone.dart:625:7)
#11     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:666:23)
#12     _rootRun (dart:async/zone_root.dart:35:13)
#13     _CustomZone.run (dart:async/zone.dart:726:19)
#14     _CustomZone.runGuarded (dart:async/zone.dart:625:7)
#15     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:666:23)
#16     _microtaskLoop (dart:async/schedule_microtask.dart:40:35)
#17     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE_ROT: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 img=720x480 -> 480x720
INFO [console] POSE_DIAG: sensorOrient=270 imgSize=720 x 480 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1338.0,-17.2) -> (1813.9,3134.8) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1338.4,-33.5) -> (1840.6,3145.5) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1313.3,-24.0) -> (1803.6,3092.9) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1335.3,-29.6) -> (1822.1,3127.9) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1346.6,-35.7) -> (1830.7,3141.6) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1331.9,-33.3) -> (1815.5,3114.1) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1326.2,-31.7) -> (1819.0,3113.5) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE_METRICS: received=32(31.0fps) processed=12(11.6fps) replaced=18(17.4fps) buildMs=23.75 estimatorMs=141.18 totalMs=142.92 actualFps=11.6
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1331.8,-31.2) -> (1807.9,3108.5) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1335.2,-20.2) -> (1748.9,3063.9) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(0.0,0.0) -> (480.0,720.0) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1627.4,-5.5) -> (1797.0,3418.9) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1591.7,-38.2) -> (1741.7,3295.2) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1695.9,-91.5) -> (1430.8,3035.2) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1947.9,-395.9) -> (1221.8,2773.8) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE_METRICS: received=19(17.8fps) processed=13(12.2fps) replaced=6(5.6fps) buildMs=20.50 estimatorMs=71.14 totalMs=71.98 actualFps=12.2
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(0.0,0.0) -> (480.0,720.0) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-2161.6,-981.4) -> (928.7,2108.9) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(0.0,0.0) -> (480.0,720.0) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-136.1,47.3) -> (692.3,875.7) clamped=(0.0,47.3) -> (692.3,480.0) frame=720x480 screen=853x394
INFO [console] POSE_METRICS: received=5(4.5fps) processed=5(4.5fps) replaced=1(0.9fps) buildMs=35.53 estimatorMs=90.92 totalMs=91.76 actualFps=4.5
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-35.6,12.1) -> (705.2,752.9) clamped=(0.0,12.1) -> (705.2,480.0) frame=720x480 screen=853x394
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1201.6,-397.0) -> (2115.9,2920.6) clamped=(0.0,0.0) -> (720.0,480.0) frame=720x480 screen=853x394
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1202.2,-421.7) -> (2124.1,2904.6) clamped=(0.0,0.0) -> (720.0,480.0) frame=720x480 screen=853x394
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1210.5,-419.8) -> (2127.3,2918.1) clamped=(0.0,0.0) -> (720.0,480.0) frame=720x480 screen=853x394
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1190.9,-437.2) -> (2123.1,2876.8) clamped=(0.0,0.0) -> (720.0,480.0) frame=720x480 screen=853x394
INFO [console] POSE_METRICS: received=16(15.2fps) processed=11(10.4fps) replaced=4(3.8fps) buildMs=25.65 estimatorMs=81.87 totalMs=82.44 actualFps=10.4
INFO [console] POSE_METRICS: received=18(16.8fps) processed=10(9.3fps) replaced=8(7.5fps) buildMs=25.68 estimatorMs=107.00 totalMs=107.17 actualFps=9.3
INFO [console] POSE_METRICS: received=20(19.6fps) processed=14(13.8fps) replaced=6(5.9fps) buildMs=24.00 estimatorMs=72.54 totalMs=72.67 actualFps=13.8
INFO [console] POSE_METRICS: received=20(19.4fps) processed=15(14.6fps) replaced=5(4.9fps) buildMs=21.96 estimatorMs=66.96 totalMs=67.09 actualFps=14.6
INFO [console] POSE_METRICS: received=26(25.3fps) processed=25(24.3fps) replaced=1(1.0fps) buildMs=18.99 estimatorMs=40.94 totalMs=41.06 actualFps=24.3
INFO [console] POSE_METRICS: received=24(23.2fps) processed=23(22.3fps) replaced=1(1.0fps) buildMs=20.75 estimatorMs=44.75 totalMs=44.88 actualFps=22.3
INFO [console] POSE_METRICS: received=27(26.2fps) processed=26(25.2fps) replaced=1(1.0fps) buildMs=17.61 estimatorMs=39.45 totalMs=39.55 actualFps=25.2
INFO [console] POSE_METRICS: received=19(18.6fps) processed=17(16.6fps) replaced=2(2.0fps) buildMs=27.48 estimatorMs=51.29 totalMs=51.40 actualFps=16.6
INFO [console] POSE_METRICS: received=25(24.6fps) processed=24(23.6fps) replaced=1(1.0fps) buildMs=21.27 estimatorMs=42.27 totalMs=42.37 actualFps=23.6
INFO [console] POSE_METRICS: received=25(24.3fps) processed=24(23.3fps) replaced=1(1.0fps) buildMs=20.26 estimatorMs=42.74 totalMs=42.83 actualFps=23.3
INFO [console] POSE_METRICS: received=23(22.6fps) processed=21(20.6fps) replaced=2(2.0fps) buildMs=23.29 estimatorMs=45.49 totalMs=45.59 actualFps=20.6
INFO [console] POSE_METRICS: received=23(22.3fps) processed=22(21.3fps) replaced=1(1.0fps) buildMs=20.34 estimatorMs=44.79 totalMs=44.90 actualFps=21.3
INFO [console] POSE_METRICS: received=28(27.6fps) processed=24(23.6fps) replaced=4(3.9fps) buildMs=17.74 estimatorMs=42.15 totalMs=42.25 actualFps=23.6
INFO [console] POSE_METRICS: received=3(1.8fps) processed=3(1.8fps) replaced=0(0.0fps) buildMs=472.17 estimatorMs=561.61 totalMs=563.44 actualFps=1.8
INFO [console] POSE_METRICS: received=1(1.0fps) processed=2(1.9fps) replaced=0(0.0fps) buildMs=23.28 estimatorMs=102.32 totalMs=105.44 actualFps=1.9
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(-1073.1,225.8) -> (1437.9,2736.8) clamped=(0.0,225.8) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE: landmarks=33 → emitting points
INFO [console] ROI_DEBUG: corners computed rawRect=(0.0,0.0) -> (480.0,720.0) clamped=(0.0,0.0) -> (480.0,720.0) frame=480x720 screen=394x853
INFO [console] POSE_METRICS: received=8(7.5fps) processed=6(5.6fps) replaced=1(0.9fps) buildMs=25.35 estimatorMs=81.12 totalMs=81.93 actualFps=5.6
$
250 строкUTF-8LIVE