Update app.py
Browse files
app.py
CHANGED
@@ -136,7 +136,7 @@ if 'transcript_history' not in st.session_state:
|
|
136 |
if 'last_transcript' not in st.session_state:
|
137 |
st.session_state.last_transcript = ""
|
138 |
if 'image_hashes' not in st.session_state:
|
139 |
-
st.session_state.image_hashes = set()
|
140 |
|
141 |
# Timestamp wizardry - clock ticks with flair! β°π©
|
142 |
def format_timestamp_prefix(username):
|
@@ -146,13 +146,12 @@ def format_timestamp_prefix(username):
|
|
146 |
# Compute image hash from binary data
|
147 |
def compute_image_hash(image_data):
|
148 |
if isinstance(image_data, Image.Image):
|
149 |
-
# Convert PIL Image to bytes
|
150 |
img_byte_arr = io.BytesIO()
|
151 |
image_data.save(img_byte_arr, format='PNG')
|
152 |
img_bytes = img_byte_arr.getvalue()
|
153 |
else:
|
154 |
-
img_bytes = image_data
|
155 |
-
return hashlib.md5(img_bytes).hexdigest()[:8]
|
156 |
|
157 |
# Node naming - christening the beast! ππΌ
|
158 |
def get_node_name():
|
@@ -192,7 +191,7 @@ async def save_chat_entry(username, message, is_markdown=False):
|
|
192 |
else:
|
193 |
entry = f"[{timestamp}] {username}: {message}"
|
194 |
await asyncio.to_thread(lambda: open(CHAT_FILE, 'a').write(f"{entry}\n"))
|
195 |
-
voice = FUN_USERNAMES.get(username, "en-US-AriaNeural")
|
196 |
cleaned_message = clean_text_for_tts(message)
|
197 |
audio_file = await async_edge_tts_generate(cleaned_message, voice)
|
198 |
if audio_file:
|
@@ -310,7 +309,7 @@ async def save_pasted_image(image, username):
|
|
310 |
await asyncio.to_thread(log_action, username, "πΈπΎ - Image saver - pics preserved!")
|
311 |
img_hash = compute_image_hash(image)
|
312 |
if img_hash in st.session_state.image_hashes:
|
313 |
-
return None
|
314 |
timestamp = format_timestamp_prefix(username)
|
315 |
filename = f"{timestamp}-{img_hash}.png"
|
316 |
filepath = os.path.join(MEDIA_DIR, filename)
|
@@ -574,6 +573,8 @@ def main():
|
|
574 |
chat_content = await load_chat()
|
575 |
available_names = [name for name in FUN_USERNAMES if not any(f"{name} has joined" in line for line in chat_content.split('\n'))]
|
576 |
st.session_state.username = random.choice(available_names) if available_names else random.choice(list(FUN_USERNAMES.keys()))
|
|
|
|
|
577 |
|
578 |
st.title(f"π€π§ MMO {st.session_state.username}ππ¬")
|
579 |
st.markdown(f"Welcome to {START_ROOM} - chat, vote, upload, paste images, and enjoy quoting! π")
|
@@ -613,7 +614,6 @@ def main():
|
|
613 |
col1, col2, col3, col4 = st.columns([3, 1, 1, 2])
|
614 |
with col1:
|
615 |
if "```markdown" in line:
|
616 |
-
# Extract Markdown content
|
617 |
markdown_content = re.search(r'```markdown\n(.*?)```', line, re.DOTALL)
|
618 |
if markdown_content:
|
619 |
st.markdown(markdown_content.group(1))
|
@@ -669,9 +669,9 @@ def main():
|
|
669 |
quote_response = st.text_area("Add your response", key="quote_response", value=st.session_state.message_text)
|
670 |
paste_result_quote = paste_image_button("π Paste Image or Text with Quote", key="paste_button_quote")
|
671 |
if paste_result_quote.image_data is not None:
|
672 |
-
if isinstance(paste_result_quote.image_data, str):
|
673 |
st.session_state.message_text = paste_result_quote.image_data
|
674 |
-
else:
|
675 |
st.image(paste_result_quote.image_data, caption="Received Image for Quote")
|
676 |
filename = await save_pasted_image(paste_result_quote.image_data, st.session_state.username)
|
677 |
if filename:
|
@@ -691,14 +691,16 @@ def main():
|
|
691 |
if new_username and new_username != st.session_state.username:
|
692 |
await save_chat_entry("System π", f"{st.session_state.username} changed name to {new_username}")
|
693 |
st.session_state.username = new_username
|
|
|
|
|
694 |
st.rerun()
|
695 |
|
696 |
message = st.text_input(f"Message as {st.session_state.username}", key="message_input", value=st.session_state.message_text, on_change=lambda: st.session_state.update(message_text=st.session_state.message_input))
|
697 |
paste_result_msg = paste_image_button("π Paste Image or Text with Message", key="paste_button_msg")
|
698 |
if paste_result_msg.image_data is not None:
|
699 |
-
if isinstance(paste_result_msg.image_data, str):
|
700 |
st.session_state.message_text = paste_result_msg.image_data
|
701 |
-
else:
|
702 |
st.image(paste_result_msg.image_data, caption="Received Image for Message")
|
703 |
filename = await save_pasted_image(paste_result_msg.image_data, st.session_state.username)
|
704 |
if filename:
|
|
|
136 |
if 'last_transcript' not in st.session_state:
|
137 |
st.session_state.last_transcript = ""
|
138 |
if 'image_hashes' not in st.session_state:
|
139 |
+
st.session_state.image_hashes = set()
|
140 |
|
141 |
# Timestamp wizardry - clock ticks with flair! β°π©
|
142 |
def format_timestamp_prefix(username):
|
|
|
146 |
# Compute image hash from binary data
|
147 |
def compute_image_hash(image_data):
|
148 |
if isinstance(image_data, Image.Image):
|
|
|
149 |
img_byte_arr = io.BytesIO()
|
150 |
image_data.save(img_byte_arr, format='PNG')
|
151 |
img_bytes = img_byte_arr.getvalue()
|
152 |
else:
|
153 |
+
img_bytes = image_data
|
154 |
+
return hashlib.md5(img_bytes).hexdigest()[:8]
|
155 |
|
156 |
# Node naming - christening the beast! ππΌ
|
157 |
def get_node_name():
|
|
|
191 |
else:
|
192 |
entry = f"[{timestamp}] {username}: {message}"
|
193 |
await asyncio.to_thread(lambda: open(CHAT_FILE, 'a').write(f"{entry}\n"))
|
194 |
+
voice = FUN_USERNAMES.get(username, "en-US-AriaNeural") # Use username-specific voice
|
195 |
cleaned_message = clean_text_for_tts(message)
|
196 |
audio_file = await async_edge_tts_generate(cleaned_message, voice)
|
197 |
if audio_file:
|
|
|
309 |
await asyncio.to_thread(log_action, username, "πΈπΎ - Image saver - pics preserved!")
|
310 |
img_hash = compute_image_hash(image)
|
311 |
if img_hash in st.session_state.image_hashes:
|
312 |
+
return None
|
313 |
timestamp = format_timestamp_prefix(username)
|
314 |
filename = f"{timestamp}-{img_hash}.png"
|
315 |
filepath = os.path.join(MEDIA_DIR, filename)
|
|
|
573 |
chat_content = await load_chat()
|
574 |
available_names = [name for name in FUN_USERNAMES if not any(f"{name} has joined" in line for line in chat_content.split('\n'))]
|
575 |
st.session_state.username = random.choice(available_names) if available_names else random.choice(list(FUN_USERNAMES.keys()))
|
576 |
+
st.session_state.voice = FUN_USERNAMES[st.session_state.username]
|
577 |
+
st.markdown(f"**ποΈ Voice Selected**: {st.session_state.voice} π£οΈ")
|
578 |
|
579 |
st.title(f"π€π§ MMO {st.session_state.username}ππ¬")
|
580 |
st.markdown(f"Welcome to {START_ROOM} - chat, vote, upload, paste images, and enjoy quoting! π")
|
|
|
614 |
col1, col2, col3, col4 = st.columns([3, 1, 1, 2])
|
615 |
with col1:
|
616 |
if "```markdown" in line:
|
|
|
617 |
markdown_content = re.search(r'```markdown\n(.*?)```', line, re.DOTALL)
|
618 |
if markdown_content:
|
619 |
st.markdown(markdown_content.group(1))
|
|
|
669 |
quote_response = st.text_area("Add your response", key="quote_response", value=st.session_state.message_text)
|
670 |
paste_result_quote = paste_image_button("π Paste Image or Text with Quote", key="paste_button_quote")
|
671 |
if paste_result_quote.image_data is not None:
|
672 |
+
if isinstance(paste_result_quote.image_data, str):
|
673 |
st.session_state.message_text = paste_result_quote.image_data
|
674 |
+
else:
|
675 |
st.image(paste_result_quote.image_data, caption="Received Image for Quote")
|
676 |
filename = await save_pasted_image(paste_result_quote.image_data, st.session_state.username)
|
677 |
if filename:
|
|
|
691 |
if new_username and new_username != st.session_state.username:
|
692 |
await save_chat_entry("System π", f"{st.session_state.username} changed name to {new_username}")
|
693 |
st.session_state.username = new_username
|
694 |
+
st.session_state.voice = FUN_USERNAMES[new_username]
|
695 |
+
st.markdown(f"**ποΈ Voice Changed**: {st.session_state.voice} π£οΈ")
|
696 |
st.rerun()
|
697 |
|
698 |
message = st.text_input(f"Message as {st.session_state.username}", key="message_input", value=st.session_state.message_text, on_change=lambda: st.session_state.update(message_text=st.session_state.message_input))
|
699 |
paste_result_msg = paste_image_button("π Paste Image or Text with Message", key="paste_button_msg")
|
700 |
if paste_result_msg.image_data is not None:
|
701 |
+
if isinstance(paste_result_msg.image_data, str):
|
702 |
st.session_state.message_text = paste_result_msg.image_data
|
703 |
+
else:
|
704 |
st.image(paste_result_msg.image_data, caption="Received Image for Message")
|
705 |
filename = await save_pasted_image(paste_result_msg.image_data, st.session_state.username)
|
706 |
if filename:
|