diff --git a/webui.py b/webui.py
index 128a6b4..ffc74a4 100755
--- a/webui.py
+++ b/webui.py
@@ -63,6 +63,8 @@ def generate(
             raise gr.Error("Please provide audio from mic when choosing `microphone` as a voice input")
         mic = load_audio(mic_audio, tts.input_sample_rate)
         voice_samples, conditioning_latents = [mic], None
+    elif voice == "random":
+        voice_samples, conditioning_latents = None, None
     else:
         progress(0, desc="Loading voice...")
         voice_samples, conditioning_latents = load_voice(voice)
@@ -291,7 +293,9 @@ def generate(
     print(f"Generation took {info['time']} seconds, saved to '{output_voices[0]}'\n")
 
     info['seed'] = settings['use_deterministic_seed']
-    del info['latents']
+    if 'latents' in info:
+        del info['latents']
+        
     with open(f'./config/generate.json', 'w', encoding="utf-8") as f:
         f.write(json.dumps(info, indent='\t') )
 
@@ -466,12 +470,12 @@ def cancel_generate():
 
 def get_voice_list():
     voice_dir = get_voice_dir()
-    return [d for d in os.listdir(voice_dir) if os.path.isdir(os.path.join(voice_dir, d))]
+    return sorted([d for d in os.listdir(voice_dir) if os.path.isdir(os.path.join(voice_dir, d))]) + ["microphone", "random"]
 
 def update_voices():
-    return gr.Dropdown.update(choices=sorted(get_voice_list()) + ["microphone"])
+    return gr.Dropdown.update(choices=get_voice_list())
 
-def export_exec_settings( listen, share, check_for_updates, models_from_local_only, low_vram, embed_output_metadata, latents_lean_and_mean, voice_fixer, cond_latent_max_chunk_size, sample_batch_size, concurrency_count, output_sample_rate, output_volume )
+def export_exec_settings( listen, share, check_for_updates, models_from_local_only, low_vram, embed_output_metadata, latents_lean_and_mean, voice_fixer, cond_latent_max_chunk_size, sample_batch_size, concurrency_count, output_sample_rate, output_volume ):
     args.listen = listen
     args.share = share
     args.check_for_updates = check_for_updates
@@ -620,7 +624,7 @@ def setup_gradio():
                     )
                     prompt = gr.Textbox(lines=1, label="Custom Emotion + Prompt (if selected)")
                     voice = gr.Dropdown(
-                        sorted(get_voice_list()) + ["microphone"],
+                        get_voice_list(),
                         label="Voice",
                         type="value",
                     )
@@ -727,7 +731,7 @@ def setup_gradio():
             with gr.Row():
                 with gr.Column():
                     history_voices = gr.Dropdown(
-                        sorted(get_voice_list()) + ["microphone"],
+                        get_voice_list(),
                         label="Voice",
                         type="value",
                     )
@@ -744,7 +748,7 @@ def setup_gradio():
                     results = []
                     files = []
                     outdir = f"./results/{voice}/"
-                    for i, file in enumerate(os.listdir(outdir)):
+                    for i, file in enumerate(sorted(os.listdir(outdir))):
                         if file[-4:] != ".wav":
                             continue