media-agent-mcp 2.7.0__tar.gz → 2.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/PKG-INFO +2 -1
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/pyproject.toml +2 -1
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/omni_human.py +2 -2
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/async_server.py +10 -18
- media_agent_mcp-2.7.2/src/media_agent_mcp/be/__pycache__/__init__.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.2/src/media_agent_mcp/be/__pycache__/app.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.2/src/media_agent_mcp/be/__pycache__/routes_media.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.2/src/media_agent_mcp/be/__pycache__/routes_omni_human.cpython-312.pyc +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/__pycache__/routes_subtitles.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.2/src/media_agent_mcp/be/__pycache__/utils.cpython-312.pyc +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/app.py +2 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/routes_media.py +7 -4
- media_agent_mcp-2.7.2/src/media_agent_mcp/be/routes_omni_human.py +34 -0
- media_agent_mcp-2.7.2/src/media_agent_mcp/video/omni_human.py +118 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/PKG-INFO +2 -1
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/SOURCES.txt +3 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/requires.txt +1 -0
- media_agent_mcp-2.7.0/src/media_agent_mcp/be/__pycache__/__init__.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.0/src/media_agent_mcp/be/__pycache__/app.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.0/src/media_agent_mcp/be/__pycache__/routes_media.cpython-312.pyc +0 -0
- media_agent_mcp-2.7.0/src/media_agent_mcp/be/__pycache__/utils.cpython-312.pyc +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/README.md +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/setup.cfg +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/openaiedit.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/seed16.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/seedance.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/seededit.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/seedream.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/ai_models/tts.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/async_wrapper.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/audio/combiner.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/audio/speed_controller.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/audio/tts.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/README.md +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/__pycache__/routes_omni.cpython-312.pyc +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/fonts/en/EduNSWACTCursive-VariableFont_wght.ttf +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/fonts/en/MozillaText-VariableFont_wght.ttf +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/fonts/en/Roboto_Condensed-Regular.ttf +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/fonts/zh/MaShanZheng-Regular.ttf +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/fonts/zh/NotoSerifSC-VariableFont_wght.ttf +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/fonts/zh/ZCOOLXiaoWei-Regular.ttf +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/pyproject.toml +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/routes_subtitles.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/utils.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/be/uv.lock +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/install_tools/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/install_tools/installer.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/media_selectors/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/media_selectors/image_selector.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/media_selectors/video_selector.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/storage/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/storage/tos_client.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/video/__init__.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/video/processor.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/video/stack.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/video/subtitle.py +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/dependency_links.txt +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/entry_points.txt +0 -0
- {media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: media-agent-mcp
|
3
|
-
Version: 2.7.
|
3
|
+
Version: 2.7.2
|
4
4
|
Summary: A Model Context Protocol server for media processing with AI tools
|
5
5
|
Author-email: Media Agent Team <team@mediaagent.com>
|
6
6
|
Keywords: mcp,ai,media,video,image,processing
|
@@ -26,6 +26,7 @@ Requires-Dist: loguru>=0.7.3
|
|
26
26
|
Requires-Dist: imageio-ffmpeg>=0.4.0
|
27
27
|
Requires-Dist: Flask>=3.0.0
|
28
28
|
Requires-Dist: pydub>=0.25.1
|
29
|
+
Requires-Dist: gunicorn>=22.0.0
|
29
30
|
Requires-Dist: audioop-lts; python_version >= "3.13"
|
30
31
|
Requires-Dist: google-genai>=1.33.0
|
31
32
|
Requires-Dist: mcp==1.11.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "media-agent-mcp"
|
3
|
-
version = "2.7.
|
3
|
+
version = "2.7.2"
|
4
4
|
description = "A Model Context Protocol server for media processing with AI tools"
|
5
5
|
readme = "README.md"
|
6
6
|
requires-python = ">=3.12"
|
@@ -31,6 +31,7 @@ dependencies = [
|
|
31
31
|
"imageio-ffmpeg>=0.4.0",
|
32
32
|
"Flask>=3.0.0",
|
33
33
|
"pydub>=0.25.1",
|
34
|
+
"gunicorn>=22.0.0",
|
34
35
|
"audioop-lts; python_version >= '3.13'",
|
35
36
|
"google-genai>=1.33.0",
|
36
37
|
"mcp==1.11.0",
|
@@ -122,8 +122,8 @@ if __name__ == '__main__':
|
|
122
122
|
time1 = time.time()
|
123
123
|
|
124
124
|
print(generate_video_from_omni_human(
|
125
|
-
image_url="https://
|
126
|
-
audio_url="https://carey.tos-ap-southeast-1.bytepluses.com/media_agent/2025-
|
125
|
+
image_url="https://carey.tos-ap-southeast-1.bytepluses.com/Art%20Portrait/Art%20Portrait/Art%20Portrait/Art%20Portrait%20(1).jpg",
|
126
|
+
audio_url="https://carey.tos-ap-southeast-1.bytepluses.com/media_agent/2025-09-02/66620bed2a5f4b2cbc641559ff93a2ed.mp3"
|
127
127
|
))
|
128
128
|
|
129
129
|
print(time.time() - time1)
|
@@ -449,8 +449,6 @@ def main():
|
|
449
449
|
help='Host for SSE transport (default: 127.0.0.1)')
|
450
450
|
parser.add_argument('--port', type=int, default=8000,
|
451
451
|
help='Port for SSE transport (default: 8000)')
|
452
|
-
parser.add_argument('--version', action='store_true',
|
453
|
-
help='Show version information')
|
454
452
|
parser.add_argument('--run-be', action='store_true',
|
455
453
|
help='Run the backend server')
|
456
454
|
parser.add_argument('--be-host', type=str, default='0.0.0.0',
|
@@ -460,10 +458,6 @@ def main():
|
|
460
458
|
|
461
459
|
args = parser.parse_args()
|
462
460
|
|
463
|
-
if args.version:
|
464
|
-
print("Async Media Agent MCP Server v0.1.0")
|
465
|
-
return
|
466
|
-
|
467
461
|
if args.run_be:
|
468
462
|
logger.info(f"Starting backend server on {args.be_host}:{args.be_port}...")
|
469
463
|
be_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'be'))
|
@@ -473,22 +467,20 @@ def main():
|
|
473
467
|
try:
|
474
468
|
subprocess.run(
|
475
469
|
[
|
476
|
-
|
477
|
-
"
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
args.be_host,
|
485
|
-
str(args.be_port),
|
470
|
+
"gunicorn",
|
471
|
+
"--workers",
|
472
|
+
"4",
|
473
|
+
"--bind",
|
474
|
+
f"{args.be_host}:{args.be_port}",
|
475
|
+
"--log-level",
|
476
|
+
"debug",
|
477
|
+
"app:app",
|
486
478
|
],
|
487
479
|
cwd=be_path,
|
488
480
|
check=True
|
489
481
|
)
|
490
482
|
except FileNotFoundError:
|
491
|
-
logger.error("`
|
483
|
+
logger.error("`gunicorn` command not found. Please ensure it is installed in your environment.")
|
492
484
|
except subprocess.CalledProcessError as e:
|
493
485
|
logger.error(f"Failed to start backend server: {e}")
|
494
486
|
return
|
@@ -528,7 +520,7 @@ def main():
|
|
528
520
|
mcp.sse_app(),
|
529
521
|
host=args.host,
|
530
522
|
port=args.port,
|
531
|
-
timeout_keep_alive=
|
523
|
+
timeout_keep_alive=300
|
532
524
|
)
|
533
525
|
else:
|
534
526
|
# Default stdio transport
|
Binary file
|
Binary file
|
Binary file
|
@@ -6,6 +6,7 @@ from flask import Flask
|
|
6
6
|
# Register blueprints from modularized routes
|
7
7
|
from media_agent_mcp.be.routes_media import media_bp
|
8
8
|
from media_agent_mcp.be.routes_subtitles import subtitles_bp
|
9
|
+
from media_agent_mcp.be.routes_omni_human import omni_human_bp
|
9
10
|
|
10
11
|
|
11
12
|
logger = logging.getLogger(__name__)
|
@@ -14,6 +15,7 @@ app = Flask(__name__)
|
|
14
15
|
# Register blueprints (keep original paths unchanged)
|
15
16
|
app.register_blueprint(media_bp)
|
16
17
|
app.register_blueprint(subtitles_bp)
|
18
|
+
app.register_blueprint(omni_human_bp)
|
17
19
|
|
18
20
|
|
19
21
|
if __name__ == "__main__":
|
@@ -5,6 +5,7 @@ import subprocess
|
|
5
5
|
import tempfile
|
6
6
|
from pathlib import Path
|
7
7
|
from typing import List, Optional, Dict, Any
|
8
|
+
from concurrent.futures import ThreadPoolExecutor
|
8
9
|
|
9
10
|
from flask import Blueprint, jsonify, request, send_file, after_this_request
|
10
11
|
|
@@ -160,13 +161,15 @@ def concat_videos():
|
|
160
161
|
pass
|
161
162
|
return response
|
162
163
|
|
163
|
-
logger.info('Downloading videos')
|
164
|
+
logger.info('Downloading videos concurrently')
|
164
165
|
video_paths = []
|
165
|
-
|
166
|
-
|
166
|
+
with ThreadPoolExecutor(max_workers=min(len(video_urls), 5)) as executor:
|
167
|
+
download_results = list(executor.map(download_video_from_url, video_urls))
|
168
|
+
|
169
|
+
for dl in download_results:
|
167
170
|
if dl.get("status") == "error":
|
168
171
|
return jsonify(dl), 400
|
169
|
-
path = Path(dl["data"]["file_path"])
|
172
|
+
path = Path(dl["data"]["file_path"])
|
170
173
|
temp_files.append(path)
|
171
174
|
video_paths.append(path)
|
172
175
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
from flask import Blueprint, request, jsonify
|
2
|
+
from media_agent_mcp.video.omni_human import generate_video_from_omni_human
|
3
|
+
|
4
|
+
omni_human_bp = Blueprint("omni_human", __name__)
|
5
|
+
|
6
|
+
@omni_human_bp.post("/generate-video-from-omni-human")
|
7
|
+
def generate_video():
|
8
|
+
"""
|
9
|
+
Generates a video from an image and audio using the Omni Human API.
|
10
|
+
"""
|
11
|
+
try:
|
12
|
+
data = request.get_json(silent=True) or {}
|
13
|
+
image_url = data.get("image_url")
|
14
|
+
audio_url = data.get("audio_url")
|
15
|
+
|
16
|
+
if not image_url or not audio_url:
|
17
|
+
return jsonify({
|
18
|
+
"status": "error",
|
19
|
+
"data": None,
|
20
|
+
"message": "Fields image_url and audio_url are required"
|
21
|
+
}), 400
|
22
|
+
|
23
|
+
video_url = generate_video_from_omni_human(image_url, audio_url)
|
24
|
+
|
25
|
+
return jsonify({
|
26
|
+
"status": "success",
|
27
|
+
"data": {
|
28
|
+
"video_url": video_url
|
29
|
+
},
|
30
|
+
"message": "Video generated successfully"
|
31
|
+
})
|
32
|
+
|
33
|
+
except Exception as e:
|
34
|
+
return jsonify({"status": "error", "data": None, "message": str(e)}), 500
|
@@ -0,0 +1,118 @@
|
|
1
|
+
import hashlib
|
2
|
+
import json
|
3
|
+
import os
|
4
|
+
import random
|
5
|
+
import time
|
6
|
+
from typing import Dict, Any
|
7
|
+
import requests
|
8
|
+
|
9
|
+
|
10
|
+
def _generate_signature(nonce: int, timestamp: int, security_key: str) -> str:
|
11
|
+
"""
|
12
|
+
Generates a signature for the API request.
|
13
|
+
"""
|
14
|
+
keys = [str(nonce), str(security_key), str(timestamp)]
|
15
|
+
keys.sort()
|
16
|
+
key_str = "".join(keys).encode("utf-8")
|
17
|
+
signature = hashlib.sha1(key_str).hexdigest()
|
18
|
+
return signature.lower()
|
19
|
+
|
20
|
+
|
21
|
+
def _submit_task(image_url: str, audio_url: str, api_key: str, security_key: str) -> str:
|
22
|
+
"""
|
23
|
+
Submits a video generation task.
|
24
|
+
"""
|
25
|
+
submit_task_url = "https://cv-api.byteintlapi.com/api/common/v2/submit_task"
|
26
|
+
timestamp = int(time.time())
|
27
|
+
nonce = random.randint(0, (1 << 31) - 1)
|
28
|
+
signature = _generate_signature(nonce, timestamp, security_key)
|
29
|
+
|
30
|
+
params = {
|
31
|
+
"api_key": api_key,
|
32
|
+
"timestamp": str(timestamp),
|
33
|
+
"nonce": str(nonce),
|
34
|
+
"sign": signature,
|
35
|
+
}
|
36
|
+
headers = {"Content-Type": "application/json"}
|
37
|
+
body = {
|
38
|
+
"req_key": "realman_avatar_picture_omni_cv",
|
39
|
+
"image_url": image_url,
|
40
|
+
"audio_url": audio_url,
|
41
|
+
}
|
42
|
+
|
43
|
+
response = requests.post(submit_task_url, params=params, headers=headers, json=body)
|
44
|
+
response.raise_for_status()
|
45
|
+
data = response.json()
|
46
|
+
if data["code"] != 10000:
|
47
|
+
raise Exception(f"Failed to submit task: {data['message']}")
|
48
|
+
return data["data"]["task_id"]
|
49
|
+
|
50
|
+
|
51
|
+
def _get_task_result(task_id: str, api_key: str, security_key: str) -> Dict[str, Any]:
|
52
|
+
"""
|
53
|
+
Gets the result of a video generation task.
|
54
|
+
"""
|
55
|
+
get_result_url = "https://cv-api.byteintlapi.com/api/common/v2/get_result"
|
56
|
+
timestamp = int(time.time())
|
57
|
+
nonce = random.randint(0, (1 << 31) - 1)
|
58
|
+
signature = _generate_signature(nonce, timestamp, security_key)
|
59
|
+
|
60
|
+
params = {
|
61
|
+
"api_key": api_key,
|
62
|
+
"timestamp": str(timestamp),
|
63
|
+
"nonce": str(nonce),
|
64
|
+
"sign": signature,
|
65
|
+
}
|
66
|
+
headers = {"Content-Type": "application/json"}
|
67
|
+
body = {
|
68
|
+
"req_key": "realman_avatar_picture_omni_cv",
|
69
|
+
"task_id": task_id,
|
70
|
+
}
|
71
|
+
|
72
|
+
response = requests.post(get_result_url, params=params, headers=headers, json=body)
|
73
|
+
print(response.text)
|
74
|
+
response.raise_for_status()
|
75
|
+
return response.json()
|
76
|
+
|
77
|
+
|
78
|
+
def generate_video_from_omni_human(image_url: str, audio_url: str) -> str:
|
79
|
+
"""
|
80
|
+
Generates a video from an image and audio using the Omni Human API.
|
81
|
+
|
82
|
+
Args:
|
83
|
+
image_url: The URL of the portrait image.
|
84
|
+
audio_url: The URL of the audio.
|
85
|
+
|
86
|
+
Returns:
|
87
|
+
The URL of the generated video.
|
88
|
+
"""
|
89
|
+
api_key = os.environ.get("OMNI_HUMAN_AK")
|
90
|
+
security_key = os.environ.get("OMNI_HUMAN_SK")
|
91
|
+
|
92
|
+
if not api_key or not security_key:
|
93
|
+
raise ValueError("OMNI_HUMAN_AK and OMNI_HUMAN_SK environment variables must be set")
|
94
|
+
|
95
|
+
task_id = _submit_task(image_url, audio_url, api_key, security_key)
|
96
|
+
print('Submitted task, task_id:', task_id)
|
97
|
+
while True:
|
98
|
+
result = _get_task_result(task_id, api_key, security_key)
|
99
|
+
if result["code"] != 10000:
|
100
|
+
raise Exception(f"Failed to get task result: {result['message']}")
|
101
|
+
|
102
|
+
status = result.get("data", {}).get("status")
|
103
|
+
if status == "done":
|
104
|
+
# Parse resp_data JSON string to get video_url
|
105
|
+
resp_data_str = result["data"].get("resp_data", "{}")
|
106
|
+
try:
|
107
|
+
resp_data = json.loads(resp_data_str)
|
108
|
+
video_url = resp_data.get("video_url")
|
109
|
+
if video_url:
|
110
|
+
return video_url
|
111
|
+
else:
|
112
|
+
raise Exception(f"No video_url found in response: {resp_data}")
|
113
|
+
except json.JSONDecodeError as e:
|
114
|
+
raise Exception(f"Failed to parse resp_data JSON: {e}")
|
115
|
+
elif status in ["failed", "error"]:
|
116
|
+
raise Exception(f"Video generation failed: {result}")
|
117
|
+
|
118
|
+
time.sleep(5)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: media-agent-mcp
|
3
|
-
Version: 2.7.
|
3
|
+
Version: 2.7.2
|
4
4
|
Summary: A Model Context Protocol server for media processing with AI tools
|
5
5
|
Author-email: Media Agent Team <team@mediaagent.com>
|
6
6
|
Keywords: mcp,ai,media,video,image,processing
|
@@ -26,6 +26,7 @@ Requires-Dist: loguru>=0.7.3
|
|
26
26
|
Requires-Dist: imageio-ffmpeg>=0.4.0
|
27
27
|
Requires-Dist: Flask>=3.0.0
|
28
28
|
Requires-Dist: pydub>=0.25.1
|
29
|
+
Requires-Dist: gunicorn>=22.0.0
|
29
30
|
Requires-Dist: audioop-lts; python_version >= "3.13"
|
30
31
|
Requires-Dist: google-genai>=1.33.0
|
31
32
|
Requires-Dist: mcp==1.11.0
|
@@ -25,6 +25,7 @@ src/media_agent_mcp/be/__init__.py
|
|
25
25
|
src/media_agent_mcp/be/app.py
|
26
26
|
src/media_agent_mcp/be/pyproject.toml
|
27
27
|
src/media_agent_mcp/be/routes_media.py
|
28
|
+
src/media_agent_mcp/be/routes_omni_human.py
|
28
29
|
src/media_agent_mcp/be/routes_subtitles.py
|
29
30
|
src/media_agent_mcp/be/utils.py
|
30
31
|
src/media_agent_mcp/be/uv.lock
|
@@ -32,6 +33,7 @@ src/media_agent_mcp/be/__pycache__/__init__.cpython-312.pyc
|
|
32
33
|
src/media_agent_mcp/be/__pycache__/app.cpython-312.pyc
|
33
34
|
src/media_agent_mcp/be/__pycache__/routes_media.cpython-312.pyc
|
34
35
|
src/media_agent_mcp/be/__pycache__/routes_omni.cpython-312.pyc
|
36
|
+
src/media_agent_mcp/be/__pycache__/routes_omni_human.cpython-312.pyc
|
35
37
|
src/media_agent_mcp/be/__pycache__/routes_subtitles.cpython-312.pyc
|
36
38
|
src/media_agent_mcp/be/__pycache__/utils.cpython-312.pyc
|
37
39
|
src/media_agent_mcp/be/fonts/en/EduNSWACTCursive-VariableFont_wght.ttf
|
@@ -48,6 +50,7 @@ src/media_agent_mcp/media_selectors/video_selector.py
|
|
48
50
|
src/media_agent_mcp/storage/__init__.py
|
49
51
|
src/media_agent_mcp/storage/tos_client.py
|
50
52
|
src/media_agent_mcp/video/__init__.py
|
53
|
+
src/media_agent_mcp/video/omni_human.py
|
51
54
|
src/media_agent_mcp/video/processor.py
|
52
55
|
src/media_agent_mcp/video/stack.py
|
53
56
|
src/media_agent_mcp/video/subtitle.py
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/audio/speed_controller.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/install_tools/__init__.py
RENAMED
File without changes
|
{media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/install_tools/installer.py
RENAMED
File without changes
|
{media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp/media_selectors/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/dependency_links.txt
RENAMED
File without changes
|
{media_agent_mcp-2.7.0 → media_agent_mcp-2.7.2}/src/media_agent_mcp.egg-info/entry_points.txt
RENAMED
File without changes
|
File without changes
|