commit b5a01e831bb107897b3782b57044aa19d099cf42 Author: Lasse Studion Date: Sun Mar 12 08:21:17 2023 +0100 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..70edab2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +* +!app.py +!requirements.txt +!.gitignore \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..e758afa --- /dev/null +++ b/app.py @@ -0,0 +1,92 @@ +from io import StringIO +from time import sleep + +import streamlit as st +from bs4 import BeautifulSoup + +st.title("Colorize your Hindenburg project") + +st.markdown( + """ +- Set colors for a few clips on your timeline, idealy at least one clip from +each recording. +- Upload your Hindenburg projet file (ending with *nhsx*) to add the same color +to other clips origination from the same recording. +- Download the modified file *and put it in the same folder as your original project file*. +""" +) + +# Ask for file. +uploaded_file = st.file_uploader( + "*Upload your project file*", label_visibility="hidden", type="nhsx", accept_multiple_files=False +) + +if uploaded_file: + # Make soup. + stringio = StringIO(uploaded_file.getvalue().decode("utf-8")) + soup = BeautifulSoup(stringio.read(), "xml") + + project_name = soup.find("AudioPool")["Path"].replace(" Files", "") + new_clipboard_tag = soup.new_tag("Clipboard") + + # Get colors from clips on timeline. + colors = {} + timline = soup.find("Tracks") + n_regions = len(timline.find_all("Region")) + for region in timline.find_all("Region"): + try: + colors[str(region["Ref"])] = int(region["Colour"]) + except: + pass + + # Area to print things. + s = st.empty() + + # Give colors to clips in clipboard + for group in soup.find_all("Group"): + new_group_tag = group + for region in group.find_all("Region"): + try: + s.markdown(f':green[{region["Name"]}]') + sleep(1/n_regions) + except KeyError: + pass + new_region_tag = region + try: + new_region_tag["Colour"] = colors[region["Ref"]] + except KeyError: + new_region_tag["Colour"] = "0" + new_group_tag.append(new_region_tag) + new_clipboard_tag.append(new_group_tag) + + soup.Session.Clipboard.replace_with(new_clipboard_tag) + + # Give colors to clips on timeline. + new_tracks_tag = soup.find("Tracks") + tracks = soup.find("Tracks") + for track in tracks.find_all("Track"): + try: + s.markdown(f':green[{region["Name"]}]') + sleep(1/n_regions) + except KeyError: + pass + new_track_tag = track + for region in track.find_all("Region"): + new_region_tag = region + try: + new_region_tag["Colour"] = colors[region["Ref"]] + except KeyError: + new_region_tag["Colour"] = "0" + new_track_tag.append(new_region_tag) + new_tracks_tag.append(new_track_tag) + soup.Session.Tracks.replace_with(new_tracks_tag) + + # Allow the user to download file. + with s: + st.markdown(":green[Exporting...]") + sleep(0.7) + st.download_button( + "Download file", + soup.encode("utf-8"), + file_name=f"{project_name}_colors.nhsx", + ) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5bc0166 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,51 @@ +altair==4.2.2 +attrs==22.2.0 +backports.zoneinfo==0.2.1 +beautifulsoup4==4.11.2 +blinker==1.5 +cachetools==5.3.0 +certifi==2022.12.7 +charset-normalizer==3.1.0 +click==8.1.3 +decorator==5.1.1 +entrypoints==0.4 +gitdb==4.0.10 +GitPython==3.1.31 +idna==3.4 +importlib-metadata==6.0.0 +importlib-resources==5.12.0 +Jinja2==3.1.2 +jsonschema==4.17.3 +markdown-it-py==2.2.0 +MarkupSafe==2.1.2 +mdurl==0.1.2 +numpy==1.24.2 +packaging==23.0 +pandas==1.5.3 +Pillow==9.4.0 +pkgutil_resolve_name==1.3.10 +protobuf==3.20.3 +pyarrow==11.0.0 +pydeck==0.8.0 +Pygments==2.14.0 +Pympler==1.0.1 +pyrsistent==0.19.3 +python-dateutil==2.8.2 +pytz==2022.7.1 +pytz-deprecation-shim==0.1.0.post0 +requests==2.28.2 +rich==13.3.2 +semver==2.13.0 +six==1.16.0 +smmap==5.0.0 +soupsieve==2.4 +streamlit==1.20.0 +toml==0.10.2 +toolz==0.12.0 +tornado==6.2 +typing_extensions==4.5.0 +tzdata==2022.7 +tzlocal==4.2 +urllib3==1.26.15 +validators==0.20.0 +zipp==3.15.0