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