|
from aiohttp import web
|
|
from werkzeug.utils import secure_filename
|
|
import os
|
|
import folder_paths
|
|
|
|
@web.middleware
|
|
async def cors_middleware(request, handler):
|
|
response = await handler(request)
|
|
response.headers['Access-Control-Allow-Origin'] = '*'
|
|
return response
|
|
|
|
async def upload_audio(request):
|
|
try:
|
|
data = await request.post()
|
|
file = data['files[]']
|
|
|
|
if not file:
|
|
return web.json_response({"error": "No file provided"}, status=400)
|
|
|
|
|
|
filename = secure_filename(file.filename)
|
|
save_path = os.path.join(folder_paths.get_input_directory(), filename)
|
|
|
|
|
|
valid_extensions = ['.wav', '.mp3', '.ogg', '.m4a', '.flac']
|
|
if not any(filename.lower().endswith(ext) for ext in valid_extensions):
|
|
return web.json_response({"error": "Invalid audio file type"}, status=400)
|
|
|
|
|
|
with open(save_path, 'wb') as f:
|
|
f.write(file.file.read())
|
|
|
|
return web.json_response({"path": save_path})
|
|
|
|
except Exception as e:
|
|
print(f"Error saving audio file: {e}")
|
|
return web.json_response({"error": str(e)}, status=500)
|
|
|
|
|
|
def setup_routes(app):
|
|
app.router.add_post("/upload/audio", upload_audio)
|
|
app.middlewares.append(cors_middleware)
|
|
|
|
@PromptServer.instance.routes.post("/memo/validate_audio")
|
|
async def validate_audio(request):
|
|
try:
|
|
data = await request.json()
|
|
file_path = data.get("path", "")
|
|
|
|
if not file_path:
|
|
return web.json_response({"valid": False, "error": "No path provided"})
|
|
|
|
|
|
if os.path.isfile(file_path):
|
|
ext = os.path.splitext(file_path)[1].lower()
|
|
if ext in ['.wav', '.mp3', '.ogg', '.m4a', '.flac']:
|
|
return web.json_response({"valid": True, "path": file_path})
|
|
|
|
return web.json_response({"valid": False, "error": "Invalid audio file"})
|
|
|
|
except Exception as e:
|
|
return web.json_response({"valid": False, "error": str(e)}) |