Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
import shutil | |
import subprocess | |
# Declare the global variable | |
gradio_input_file = None | |
def process_ebook(ebook_file): | |
#This will pre-download the xtts TOS agreed file | |
import download_tos_agreed_file | |
import nltk | |
nltk.download('averaged_perceptron_tagger_eng') | |
nltk.download('punkt_tab') | |
#download the en_core_web_sm spacy model | |
subprocess.run(["python", "-m", "spacy", "download", "en_core_web_sm"]) | |
global gradio_input_file # Use the global variable to store the ebook file path | |
# Create input_files directory if it doesn't exist | |
input_dir = "input_files" | |
if not os.path.exists(input_dir): | |
os.mkdir(input_dir) | |
# Copy the uploaded file to input_files folder | |
input_file_path = os.path.join(input_dir, os.path.basename(ebook_file)) | |
shutil.copy(ebook_file, input_file_path) | |
# Set the file path to the global variable | |
gradio_input_file = input_file_path | |
# Print the name of the uploaded file | |
ebook_file_name = os.path.basename(ebook_file) | |
print(f"Uploaded file: {ebook_file_name}") | |
# Call the Auto_VoxNovel.py script and pass the file path as an argument | |
try: | |
process = subprocess.Popen( | |
["python3", "Auto_VoxNovel.py", gradio_input_file], # Pass gradio_input_file as an argument | |
stdout=subprocess.PIPE, | |
stderr=subprocess.STDOUT, | |
text=True | |
) | |
# Print output in real-time | |
for line in process.stdout: | |
print(line, end='') | |
process.wait() | |
if process.returncode == 0: | |
return f"Audiobook is ready! You can now download your files." | |
else: | |
return "Error occurred during audiobook processing." | |
except Exception as e: | |
return f"Failed to run audiobook script: {str(e)}" | |
def list_output_files(): | |
# List all files in the output directory for downloading | |
output_dir = "output_audiobooks" | |
if os.path.exists(output_dir): | |
files = [ | |
os.path.join(output_dir, f) | |
for f in os.listdir(output_dir) | |
if os.path.isfile(os.path.join(output_dir, f)) | |
] | |
return files | |
return [] | |
# Gradio Interface | |
with gr.Blocks() as gui: | |
gr.Markdown("### VoxNovel Ebook to Audiobook Converter: Give each character a separate voice. <br>This interface is based on [VoxNovel](https://github.com/DrewThomasson/VoxNovel).") | |
with gr.Row(): | |
with gr.Column(): | |
ebook_input = gr.File( | |
label="Upload your ebook file (epub, pdf, etc.)", | |
type='filepath' # Specify that we want the file path | |
) | |
process_button = gr.Button("Start Processing") | |
status_output = gr.Textbox(label="Status") | |
process_button.click(process_ebook, inputs=ebook_input, outputs=status_output) | |
with gr.Column(): | |
gr.Markdown("### Download Generated Audiobook Files") | |
download_button = gr.Button("Reload Files") | |
file_output = gr.Files( | |
label="Generated Audiobook Files", | |
type='filepath' # Use 'filepath' type for gr.Files component | |
) | |
# Update the file_output component with the list of output files | |
def update_output_files(): | |
files = list_output_files() | |
return files | |
download_button.click(fn=update_output_files, inputs=[], outputs=file_output) | |
gui.launch() | |