Spaces:
Running
Running
fabiogra
commited on
Commit
ยท
a4f7be2
1
Parent(s):
59e9730
fix: session error between pages, improve logs
Browse files- app/header.py +4 -9
- app/helpers.py +1 -0
- app/pages/Karaoke.py +7 -1
- app/service/youtube.py +4 -2
app/header.py
CHANGED
|
@@ -1,15 +1,9 @@
|
|
| 1 |
-
import logging
|
| 2 |
-
|
| 3 |
import streamlit as st
|
| 4 |
-
from
|
| 5 |
from streamlit_option_menu import option_menu
|
| 6 |
-
from style import CSS
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
level=logging.INFO,
|
| 11 |
-
datefmt="%Y-%m-%d %H:%M:%S",
|
| 12 |
-
)
|
| 13 |
|
| 14 |
DEFAULT_PAGE = "Separate"
|
| 15 |
|
|
@@ -56,6 +50,7 @@ def header(logo_and_title=True):
|
|
| 56 |
key="",
|
| 57 |
)
|
| 58 |
if page != st.session_state.get("page", DEFAULT_PAGE):
|
|
|
|
| 59 |
switch_page(page)
|
| 60 |
|
| 61 |
if logo_and_title:
|
|
|
|
|
|
|
|
|
|
| 1 |
import streamlit as st
|
| 2 |
+
from loguru import logger as log
|
| 3 |
from streamlit_option_menu import option_menu
|
|
|
|
| 4 |
|
| 5 |
+
from helpers import switch_page
|
| 6 |
+
from style import CSS
|
|
|
|
|
|
|
|
|
|
| 7 |
|
| 8 |
DEFAULT_PAGE = "Separate"
|
| 9 |
|
|
|
|
| 50 |
key="",
|
| 51 |
)
|
| 52 |
if page != st.session_state.get("page", DEFAULT_PAGE):
|
| 53 |
+
log.info(f"Go to {page}")
|
| 54 |
switch_page(page)
|
| 55 |
|
| 56 |
if logo_and_title:
|
app/helpers.py
CHANGED
|
@@ -130,6 +130,7 @@ def _standardize_name(name: str) -> str:
|
|
| 130 |
|
| 131 |
@st.cache_data(show_spinner=False)
|
| 132 |
def switch_page(page_name: str):
|
|
|
|
| 133 |
st.session_state.page = page_name
|
| 134 |
|
| 135 |
page_name = _standardize_name(page_name)
|
|
|
|
| 130 |
|
| 131 |
@st.cache_data(show_spinner=False)
|
| 132 |
def switch_page(page_name: str):
|
| 133 |
+
st.session_state.executed = False
|
| 134 |
st.session_state.page = page_name
|
| 135 |
|
| 136 |
page_name = _standardize_name(page_name)
|
app/pages/Karaoke.py
CHANGED
|
@@ -66,7 +66,7 @@ def show_karaoke(pathname):
|
|
| 66 |
with st.columns([1, 4, 1])[1]:
|
| 67 |
if events.name == "onPlay":
|
| 68 |
sess.player_restart = True
|
| 69 |
-
log.info(f"Play Karaoke - {sess.selected_value}")
|
| 70 |
|
| 71 |
elif (
|
| 72 |
events.name == "onProgress"
|
|
@@ -140,7 +140,9 @@ def body():
|
|
| 140 |
if selected_value is None or selected_value == "":
|
| 141 |
with yt_cols[2]:
|
| 142 |
if st.button("๐ฒ Random song", use_container_width=True):
|
|
|
|
| 143 |
sess.last_dir, sess.url = get_random_song()
|
|
|
|
| 144 |
sess.selected_value = sess.last_dir
|
| 145 |
sess.random_song = True
|
| 146 |
sess.video_options = []
|
|
@@ -182,6 +184,7 @@ def body():
|
|
| 182 |
with st.spinner(
|
| 183 |
"Separating vocals from music, it could take a few minutes... Don't close this page!"
|
| 184 |
):
|
|
|
|
| 185 |
sess.filename = download_audio_from_youtube(sess.url, in_path)
|
| 186 |
if sess.filename is None:
|
| 187 |
st.stop()
|
|
@@ -193,6 +196,7 @@ def body():
|
|
| 193 |
if cancel_button.button(
|
| 194 |
"Cancel", use_container_width=True, type="secondary"
|
| 195 |
):
|
|
|
|
| 196 |
st.experimental_rerun()
|
| 197 |
separate(
|
| 198 |
input=in_path / filename,
|
|
@@ -205,6 +209,8 @@ def body():
|
|
| 205 |
sess.last_dir = ".".join(sess.filename.split(".")[:-1])
|
| 206 |
sess.executed = True
|
| 207 |
cancel_button.empty()
|
|
|
|
|
|
|
| 208 |
else:
|
| 209 |
sess.executed = True
|
| 210 |
|
|
|
|
| 66 |
with st.columns([1, 4, 1])[1]:
|
| 67 |
if events.name == "onPlay":
|
| 68 |
sess.player_restart = True
|
| 69 |
+
log.info(f"Play Karaoke - {sess.selected_value} - {sess.delay}s delay")
|
| 70 |
|
| 71 |
elif (
|
| 72 |
events.name == "onProgress"
|
|
|
|
| 140 |
if selected_value is None or selected_value == "":
|
| 141 |
with yt_cols[2]:
|
| 142 |
if st.button("๐ฒ Random song", use_container_width=True):
|
| 143 |
+
reset_karaoke()
|
| 144 |
sess.last_dir, sess.url = get_random_song()
|
| 145 |
+
log.info(f"Random song - {sess.last_dir}")
|
| 146 |
sess.selected_value = sess.last_dir
|
| 147 |
sess.random_song = True
|
| 148 |
sess.video_options = []
|
|
|
|
| 184 |
with st.spinner(
|
| 185 |
"Separating vocals from music, it could take a few minutes... Don't close this page!"
|
| 186 |
):
|
| 187 |
+
log.info(f"Separating vocals from {sess.selected_value}")
|
| 188 |
sess.filename = download_audio_from_youtube(sess.url, in_path)
|
| 189 |
if sess.filename is None:
|
| 190 |
st.stop()
|
|
|
|
| 196 |
if cancel_button.button(
|
| 197 |
"Cancel", use_container_width=True, type="secondary"
|
| 198 |
):
|
| 199 |
+
log.info(f"Cancel separation of vocals from {filename}")
|
| 200 |
st.experimental_rerun()
|
| 201 |
separate(
|
| 202 |
input=in_path / filename,
|
|
|
|
| 209 |
sess.last_dir = ".".join(sess.filename.split(".")[:-1])
|
| 210 |
sess.executed = True
|
| 211 |
cancel_button.empty()
|
| 212 |
+
log.info(f"Separating Done - {sess.selected_value}")
|
| 213 |
+
|
| 214 |
else:
|
| 215 |
sess.executed = True
|
| 216 |
|
app/service/youtube.py
CHANGED
|
@@ -4,6 +4,7 @@ import re
|
|
| 4 |
import string
|
| 5 |
from typing import List
|
| 6 |
|
|
|
|
| 7 |
import streamlit as st
|
| 8 |
import yt_dlp
|
| 9 |
from pytube import Search
|
|
@@ -26,7 +27,7 @@ def download_audio_from_youtube(url, output_path):
|
|
| 26 |
if not os.path.exists(output_path):
|
| 27 |
os.makedirs(output_path)
|
| 28 |
|
| 29 |
-
with yt_dlp.YoutubeDL() as ydl:
|
| 30 |
info_dict = ydl.extract_info(url, download=False)
|
| 31 |
if info_dict.get("duration", 0) > 360:
|
| 32 |
st.error("Song is too long. Please use a song no longer than 6 minutes.")
|
|
@@ -43,7 +44,7 @@ def download_audio_from_youtube(url, output_path):
|
|
| 43 |
}
|
| 44 |
],
|
| 45 |
"outtmpl": os.path.join(output_path, video_title),
|
| 46 |
-
|
| 47 |
}
|
| 48 |
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
| 49 |
ydl.download([url])
|
|
@@ -56,6 +57,7 @@ def query_youtube(query: str) -> Search:
|
|
| 56 |
|
| 57 |
|
| 58 |
def search_youtube(query: str, limit=5) -> List:
|
|
|
|
| 59 |
if len(query) > 3:
|
| 60 |
search = query_youtube(query + " lyrics")
|
| 61 |
st.session_state.search_results = search.results
|
|
|
|
| 4 |
import string
|
| 5 |
from typing import List
|
| 6 |
|
| 7 |
+
from loguru import logger as log
|
| 8 |
import streamlit as st
|
| 9 |
import yt_dlp
|
| 10 |
from pytube import Search
|
|
|
|
| 27 |
if not os.path.exists(output_path):
|
| 28 |
os.makedirs(output_path)
|
| 29 |
|
| 30 |
+
with yt_dlp.YoutubeDL({"quiet": True}) as ydl:
|
| 31 |
info_dict = ydl.extract_info(url, download=False)
|
| 32 |
if info_dict.get("duration", 0) > 360:
|
| 33 |
st.error("Song is too long. Please use a song no longer than 6 minutes.")
|
|
|
|
| 44 |
}
|
| 45 |
],
|
| 46 |
"outtmpl": os.path.join(output_path, video_title),
|
| 47 |
+
"quiet": True,
|
| 48 |
}
|
| 49 |
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
| 50 |
ydl.download([url])
|
|
|
|
| 57 |
|
| 58 |
|
| 59 |
def search_youtube(query: str, limit=5) -> List:
|
| 60 |
+
log.info(f"{query}")
|
| 61 |
if len(query) > 3:
|
| 62 |
search = query_youtube(query + " lyrics")
|
| 63 |
st.session_state.search_results = search.results
|