## S3 and File Handling

All S3 interactions are centralized in `FileService` (`app/services/file_service.py`) backed by `AWSService`.

### Why
- Deduplicate S3 logic previously repeated in processors.
- Single place to handle retries, errors, and presigned URLs.

### Common Operations
- Download: `await FileService().download_file_from_s3(bucket, key, local_path)`
- Upload: `await FileService().upload_file_to_s3(file_path, bucket, key, content_type)`
- Presigned URL: `await FileService().get_file_url(bucket, key, expires_in=3600)`

### Processors
- `AudioProcessor` and `VideoProcessor` now depend on `FileService` for S3 downloads.
- Local temp files are created under `/tmp` and cleaned up after processing.

### Configuration
- Buckets/regions are read from environment via `app.core.config.settings`.

