# Component Interfaces *(This document will define the interfaces between different components of the system, especially between the frontend and backend.)* ## Backend API (FastAPI) *(To be detailed. Examples below)* ### `/api/tts/generate_single` (POST) - **Request Body:** ```json { "text": "string", "speaker_id": "string", "temperature": "float (optional)", "length_penalty": "float (optional)" } ``` - **Response Body (Success):** ```json { "audio_url": "string (URL to the generated audio file)", "duration_ms": "integer" } ``` - **Response Body (Error):** ```json { "detail": "string (error message)" } ``` ### `/api/tts/generate_dialog` (POST) - **Request Body:** ```json { "dialog_lines": [ { "type": "speech", // or "silence" "speaker_id": "string (required if type is speech)", "text": "string (required if type is speech)", "duration_s": "float (required if type is silence)" } ], "output_base_name": "string (optional)" } ``` - **Response Body (Success):** ```json { "dialog_audio_url": "string (URL to the concatenated dialog audio file)", "individual_files_zip_url": "string (URL to zip of individual lines)", "total_duration_ms": "integer" } ``` ### `/api/speakers` (GET) - **Response Body (Success):** ```json [ { "id": "string", "name": "string", "sample_url": "string (optional)" } ] ``` ### `/api/speakers` (POST) - **Request Body:** (Multipart form-data) - `name`: "string" - `audio_sample`: file (WAV) - **Response Body (Success):** ```json { "id": "string", "name": "string", "message": "Speaker added successfully" } ``` ## Frontend Components (Vanilla JS) *(To be detailed as frontend development progresses.)* - **DialogLine Component:** Manages input for a single line of dialog (speaker, text). - **AudioPlayer Component:** Handles playback of generated audio. - **ProjectManager Component:** Manages overall project state, dialog lines, and interaction with the backend.