Browse Source

Working version with repetition and tiem mode

main
gabriel becker 11 months ago
parent
commit
feb00df8c5
  1. 6
      open_workout_coach/__main__.py
  2. 9
      open_workout_coach/create_open_workout_database.py
  3. 1
      open_workout_coach/load_exercises.py
  4. 17
      open_workout_coach/map_yaml_to_database.py
  5. 17
      readme.md

6
open_workout_coach/__main__.py

@ -11,13 +11,13 @@ def cli():
@cli.command()
@click.argument('input_path', type=click.Path(exists=True))
@click.argument('output_path', type=click.Path(exists=False))
def create_plan(input_path, output_path):
@click.argument('output_destination', type=click.Path(exists=True))
def create_plan(input_path, output_destination):
"""
Creates a openworkout plan from the input yaml file.
"""
config = load_file_and_media_links(file_path=input_path)
process_config_into_workout_file(config=config, output_file=output_path)
process_config_into_workout_file(config=config, output_destination=output_destination)
FILE = 'data/input/samples/exercises.yaml'

9
open_workout_coach/create_open_workout_database.py

@ -69,8 +69,12 @@ def get_item_id():
start += 1
def create_item(name, workout_time, n_repetitions, description=None, preparation_time=5, video_path=None):
def create_item(
name, workout_time=30, n_repetitions=None, description=None,
preparation_time=5, video_path=None, break_time=5
):
is_video_mode = True if video_path else False
is_time_mode = False if n_repetitions else True
new_item = dict(WOPRKOUT_ITEM)
new_item_content = {
@ -79,13 +83,14 @@ def create_item(name, workout_time, n_repetitions, description=None, preparation
'elapsedTime': 0,
'imagePath': '',
'isImagePathExternal': False,
'isTimeMode': True,
'isTimeMode': is_time_mode,
'isVideoMode': is_video_mode,
'prepTime': preparation_time,
'repetitionCount': n_repetitions,
'videoPath': video_path,
"orderNr": next(get_item_id()),
"workoutItemId": 0,
"breakTime": break_time,
"workoutSessionId": 1,
'workoutTime': workout_time
}

1
open_workout_coach/load_exercises.py

@ -30,7 +30,6 @@ def load_file_and_media_links(file_path):
video_url = ex['video']
start = ex['start']
end = ex['end']
video_path = get_video(video_url)
gif = create_gif_from_video_and_timestamps(video_path, start, end)
ex['gif_path'] = gif

17
open_workout_coach/map_yaml_to_database.py

@ -84,26 +84,27 @@ def map_config_to_workout_file(config):
items = [
create_item(
name=item['name'],
workout_time=30,
n_repetitions=1,
description=None,
preparation_time=5,
video_path=item['gif_path']
workout_time=item.get('duration'),
n_repetitions=item.get('repetitions'),
description=item.get('description'),
preparation_time=item.get('preparation'),
break_time=item.get('break'),
video_path=item.get('gif_path')
)
for item in config['exercises']
]
sessions = [create_workout_session(items)] * 30
sessions = [create_workout_session(items)] * config['n_sessions']
db = create_workout_database(config['name'], sessions)
return db
def process_config_into_workout_file(config, output_file = None):
def process_config_into_workout_file(config, output_destination = None):
db = map_config_to_workout_file(config)
videos = get_all_media_from_db_by_type(db, media_type='video')
images = get_all_media_from_db_by_type(db, media_type='image')
db = refactor_media_paths_in_db(db)
output_file_name = output_file or f"{db['name']}.zip"
output_file_name = f"{output_destination or '.'}/{db['name']}.zip"
save_workout_file(
output_files=output_file_name,
db_file=db,

17
readme.md

@ -3,15 +3,16 @@ Creates a workout plan form an yaml file that can be imported to <img src="https
Inputs can be of format
```yaml
name: name of workout plan
n_sessions: 1
exercises:
- name: nomoney
video: "https://www.youtube.com/watch?v=etAwQ4jzyNY"
start: 74
end: 80
- name: plank shoulder tap
video: "https://www.youtube.com/watch?v=etAwQ4jzyNY"
start: 113
end: 116
- name: Shoulder Stretch (Up-Left)
start: 209
end: 212
video: https://www.youtube.com/watch?v=TSIbzfcnv_8
break: 0
duration: 10
preparation: 3
```
The script will download the video and create short clips.
Loading…
Cancel
Save