deepsync commited on
Commit
0d640d9
·
verified ·
1 Parent(s): 5b2c1fc

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -0
app.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ import json
4
+ import asyncio
5
+ import aiohttp
6
+ import requests
7
+ from tqdm.asyncio import tqdm
8
+
9
+ API_BASE_URL = os.environ.get("DUBPRO_API_BASE_URL")
10
+
11
+ def fetch_data_from_db(_id, details="GET_ADVANCE_DETAILS"):
12
+ API_URL = f"{API_BASE_URL}/video-service/videos/{_id}/get_details"
13
+ headers = {
14
+ "Accept": "*/*",
15
+ "Authorization": os.environ.get("DUBPRO_API_HEADER_KEY")
16
+ }
17
+ params = {"type": details}
18
+ response = requests.get(API_URL, headers=headers, params=params)
19
+ if response.status == 200:
20
+ data = response.json()
21
+ return data["data"]
22
+ else:
23
+ raise Exception(response.text)
24
+
25
+
26
+ async def generate_audio(session, video_id, segment_id, text, progress_bar):
27
+ payload = {"type": "EDIT_TEXT", "updatedText": text}
28
+ headers = {"Authorization": os.environ.get("DUBPRO_API_HEADER_KEY")}
29
+ API_URL = f"{API_BASE_URL}/video-service/videos/{video_id}/segment/{segment_id}"
30
+
31
+ async with session.put(API_URL, headers=headers, json=payload) as response:
32
+ if response.status != 200:
33
+ print(segment_id, text, await response.text())
34
+ progress_bar.update(1)
35
+
36
+
37
+ async def generate_audios(video_id, segments=[]):
38
+ async with aiohttp.ClientSession() as session:
39
+ progress_bar = tqdm(total=len(segments), desc="Generating Audios", unit="segment")
40
+ tasks = [
41
+ generate_audio(session, video_id, segment["id"], segment["updatedText"], progress_bar)
42
+ for segment in segments
43
+ ]
44
+ await asyncio.gather(*tasks)
45
+ progress_bar.close()
46
+
47
+
48
+ def perform_generation(video_id, gen_choice, progress_bar=gr.Progress(track_tqdm=True)):
49
+ data = fetch_data_from_db(video_id)
50
+ segments = data["targetTranscriptData"]
51
+ if gen_choice == "Generate only non-generated segments":
52
+ segments = [s for s in segments if s["audioUrl"] is None or "updated" not in s["audioUrl"]]
53
+ elif gen_choice == "Re-generate generated only segments":
54
+ segments = [s for s in segments if s["audioUrl"] is not None and "updated" in s["audioUrl"]]
55
+ asyncio.run(generate_audios(video_id, segments=segments))
56
+ return "Done"
57
+
58
+
59
+ def check_details(video_id):
60
+ data = fetch_data_from_db(video_id)
61
+ segments = data["targetTranscriptData"]
62
+ results = json.loads(segments[0]) + "\n" + json.loads(segments[-1])
63
+ return results, gr.update(visible=True)
64
+
65
+
66
+ with gr.Blocks() as demo:
67
+ video_id_txt = gr.Text(label="Video ID")
68
+ gen_choice_radio = gr.Radio(["Generate only non-generated segments", "Re-generate generated only segments", "Generate all the segments"], label="Audio generation style")
69
+ check_settings_btn = gr.Button("Check settings")
70
+ logs_txt = gr.Textbox(label="Logs")
71
+ generate_btn = gr.Button("Generate audio", visible=False)
72
+
73
+ check_settings_btn.click(check_details, video_id_txt, [logs_txt, generate_btn])
74
+ generate_btn.click(perform_generation, [video_id_txt, gen_choice_radio], logs_txt)
75
+
76
+
77
+ demo.queue().launch(auth=(os.environ.get("GRADIO_USERNAME"), os.environ.get("GRADIO_PASSWORD")))