from flask import Flask, render_template,request,jsonify,Response import sys import os import warnings import logging import urllib3 import json import requests from flask_cors import CORS import time from flask_limiter import Limiter from flask_limiter.util import get_remote_address from hf import * app = Flask(__name__) CORS(app) import logging total = 0 pending = 0 limiter = Limiter( key_func=get_remote_address, default_limits=["8 per minute"] ) limiter.init_app(app) @app.route("/") def index(): message = {'Total Requests: ': total, 'Pending Requests: ': pending} return jsonify(message) @limiter.limit("6 per minute") @app.route('/gen', methods=['POST']) def Hf(): global total, pending total += 1 pending += 1 prompt = request.json.get('prompt', '') negative = request.json.get('negative', '') steps = request.json.get('steps', 20) width = request.json.get('width',1024) height = request.json.get('height',1024) scale = request.json.get('scale',7) model = request.json.get('model','sd3') style = request.json.get('style', 'Cinematic') shash = request.json.get('hash') if model == 'rvs4': def generator(): global pending while True: try: for info in rvx(prompt=prompt, negative=negative, width=width, height=height, scale=scale, steps=steps, style=style, shash=shash): if "error" in json.dumps(info): raise ValueError("Error in response, retrying...") else: yield f'data: {json.dumps(info)}\n\n' pending -= 1 break except ValueError as e: continue return Response(generator(), mimetype="text/event-stream") elif model == 'mobius': def generator(): global pending while True: try: for info in mobius(prompt=prompt, negative=negative, width=width, height=height, scale=scale, steps=steps, style=style, shash=shash): if "error" in json.dumps(info): raise ValueError("Error in response, retrying...") else: yield f'data: {json.dumps(info)}\n\n' pending -= 1 break except ValueError as e: continue return Response(generator(), mimetype="text/event-stream") elif model == 'sd3': def generator(): global pending while True: try: for info in sd3(prompt=prompt, negative=negative, width=width, height=height, scale=scale, steps=steps, style=style, shash=shash): if "error" in json.dumps(info): raise ValueError("Error in response, retrying...") else: yield f'data: {json.dumps(info)}\n\n' pending -= 1 break except ValueError as e: continue return Response(generator(), mimetype="text/event-stream") elif model == 'sdflash': def generator(): global pending while True: try: for info in sdflash(prompt=prompt, negative=negative, width=width, height=height, scale=scale, steps=steps, style=style, shash=shash): if "error" in json.dumps(info): raise ValueError("Error in response, retrying...") else: yield f'data: {json.dumps(info)}\n\n' pending -= 1 break except ValueError as e: continue return Response(generator(), mimetype="text/event-stream") elif model == 'kivotos': def generator(): global pending while True: try: for info in kivotos(prompt=prompt, negative=negative, width=width, height=height, scale=scale, steps=steps, style=style, shash=shash): if "error" in json.dumps(info): raise ValueError("Error in response, retrying...") else: yield f'data: {json.dumps(info)}\n\n' pending -= 1 break except ValueError as e: continue return Response(generator(), mimetype="text/event-stream") elif model == 'OpenDalle': def generator(): global pending while True: try: for info in OpenDalle(prompt=prompt, negative=negative, width=width, height=height, scale=scale, steps=steps, style=style, shash=shash): if "error" in json.dumps(info): raise ValueError("Error in response, retrying...") else: yield f'data: {json.dumps(info)}\n\n' pending -= 1 break except ValueError as e: continue return Response(generator(), mimetype="text/event-stream") else: pending-=1 return jsonify('model not found'), 404 if __name__ == '__main__': #socketio.start_background_task(background_task) app.run(debug=False, host='0.0.0.0', port=7860)