python使用免费Agnes AI的api做的ai图片 和视频生成工具代码
代码语言:python
所属分类:其他
代码描述:python使用免费Agnes AI的api做的ai图片 和视频生成工具代码
代码标签: python 使用 免费 Agnes AI api ai 图片 视频 生成 工具 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
"""
#apikey申请地址;https://platform.agnes-ai.com/settings/apiKeys
Agnes AI Studio (Video 2.5 Flash & Image 2.5 Flash)
运行方式: python app.py
访问地址: http://localhost:5000
"""
from flask import Flask, request, jsonify, render_template_string
import requests
import time
import json
import os
app = Flask(__name__)
# ==================== 历史记录持久化 ====================
HISTORY_FILE = 'history.json'
history = []
def load_history():
global history
if os.path.exists(HISTORY_FILE):
try:
with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
history = json.load(f)
except Exception:
history = []
def save_history():
try:
with open(HISTORY_FILE, 'w', encoding='utf-8') as f:
json.dump(history, f, ensure_ascii=False, indent=2)
except Exception:
pass
load_history()
# ==================== 日志工具 ====================
def truncate_for_log(obj, max_str_len=120):
if isinstance(obj, dict):
return {k: truncate_for_log(v, max_str_len) for k, v in obj.items()}
elif isinstance(obj, list):
return [truncate_for_log(i, max_str_len) for i in obj]
elif isinstance(obj, str):
if obj.startswith("data:") and "base64," in obj:
prefix = obj[:obj.index("base64,") + 7]
return f"{prefix}...[BASE64 已截断, 原始长度 {len(obj)}]"
if len(obj) > max_str_len:
return obj[:max_str_len] + f"...[已截断, 长度 {len(obj)}]"
return obj
return obj
def print_api_log(direction, url, status_code=None, headers=None, payload=None, response=None):
line = "═" * 60
print(f"\n\033[96m{line}\033[0m")
if direction == "REQUEST":
print(f"\033[93m📤 API REQUEST\033[0m")
print(f" URL : {url}")
if headers:
safe_headers = {k: (v[:20] + "***" if "Authorization" in k else v) for k, v in headers.items()}
print(f" Headers: {json.dumps(safe_headers, ensure_ascii=False)}")
if payload is not None:
print(f" Payload:")
print(json.dumps(truncate_for_log(payload), indent=4, ensure_ascii=False))
elif direction == "RESPONSE":
print(f"\033[92m📥 API RESPONSE\033[0m")
print(f" URL : {url}")
print(f" Status Code: {status_code}")
if response is not None:
print(f" Body :")
print(json.dumps(truncate_for_log(response), indent=4, ensure_ascii=False))
print(f"\033[96m{line}\033[0m\n")
# ==================== 路由 ====================
@app.route('/')
def index():
return render_template_string(HTML_TEMPLATE)
@app.route('/generate_video', methods=['POST'])
def generate_video():
data = request.json
api_key = data.get('api_key', '')
payload = data.get('payload', {})
url = "https://apihub.agnes-ai.com/v1/videos"
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
print_api_log("REQUEST", url, headers=headers, payload=payload)
try:
res = requests.post(url, headers=headers, json=payload, timeout=30)
try: res_data = res.json()
except: res_data = {"raw": res.text}
print_api_log("RESPONSE", url, status_code=res.status_code, response=res_data)
if res.status_code >= 400:
detail = res_data.get('detail', res_data.get('error', 'Unknown error'))
return jsonify({'error': str(detail)}), 400
video_id = res_data.get('video_id') or res_data.get('id')
task_info = {
'id': video_id, 'video_id': video_id, 'type': 'video',
'prompt': payload.get('prompt', ''), 'mode': payload.get('mode', ''),
'aspect_ratio': payload.get('aspect_ratio', '16:9'), 'seconds': payload.get('seconds', '5'),
'status': 'pending', 'progress': 0, 'url': None, 'error': None, 'created_at': time.time()
}
history.insert(0, task_info)
save_history()
return jsonify({'success': True, 'video_id': video_id})
except Exception as e:
print(f"\033[91m❌ 视频请求异常: {e}\033[0m")
return jsonify({'error': str(e)}), 500
@app.route('/generate_image', methods=['POST'])
def generate_image():
data = request.json
api_key = data.get('api_key', '')
payload = data.get('payload', {})
url = "https://apihub.agnes-ai.com/v1/images/generations"
headers = {'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'}
print_api_log("REQUEST", url, heade.........完整代码请登录后点击上方下载按钮下载查看














网友评论0