|
from g4f.Provider.hf_space import BlackForestLabsFlux1Dev, G4F, BlackForestLabsFlux1Schnell |
|
import asyncio |
|
from flask import Flask, request, jsonify, Response, render_template |
|
|
|
app = Flask(__name__) |
|
|
|
|
|
class IMG: |
|
def __init__(self, prompt: str, width: int = 1024, height: int = 1024, guidance_scale: float = 3.5, seed: int = 0): |
|
self.prompt = prompt |
|
self.width = width |
|
self.height = height |
|
self.guidance_scale = guidance_scale |
|
self.seed = seed |
|
self.messages = [{"role": "user", "content": self.prompt}] |
|
|
|
async def _run_async_generator(self, generator): |
|
"""Runs the async generator and extracts image URLs safely.""" |
|
results = [] |
|
try: |
|
async for result in generator: |
|
if hasattr(result, "images") and isinstance(result.images, list): |
|
results.extend(result.images) |
|
else: |
|
results.append(str(result)) |
|
except Exception as e: |
|
print("Error processing response:", e) |
|
return results |
|
|
|
def _generate_images(self, provider_class, model): |
|
"""Generic method to fetch images from any provider.""" |
|
async def main(): |
|
try: |
|
async for result in provider_class.create_async_generator( |
|
model=model, messages=self.messages, |
|
width=self.width, height=self.height, |
|
guidance_scale=self.guidance_scale, seed=self.seed |
|
): |
|
yield result |
|
except Exception as e: |
|
print(f"Error generating images from {model}:", e) |
|
yield f"Error: {e}" |
|
|
|
return asyncio.run(self._run_async_generator(main())) |
|
|
|
def BlackForest(self,model="black-forest-labs-flux-1-dev"): |
|
if model in BlackForestLabsFlux1Dev.get_models(): |
|
pass |
|
else: |
|
model = "black-forest-labs-flux-1-dev" |
|
return self._generate_images(BlackForestLabsFlux1Dev, model) |
|
|
|
def FluxMidJourny(self,model="flux"): |
|
if model in G4F.get_models(): |
|
pass |
|
else: |
|
model = "flux" |
|
return self._generate_images(G4F, model) |
|
|
|
def BlackForestSchnell(self,model="black-forest-labs-flux-1-schnell"): |
|
if model in BlackForestLabsFlux1Schnell.get_models(): |
|
pass |
|
else: |
|
model = "black-forest-labs-flux-1-schnell" |
|
return self._generate_images(BlackForestLabsFlux1Schnell, model) |
|
|
|
|
|
@app.route("/generate/image", methods=["POST"]) |
|
def generate_image(): |
|
data = request.json |
|
prompt = data.get("prompt") |
|
model = data.get("model", "black-forest-labs-flux-1-dev") |
|
width = data.get("width", 1024) |
|
height = data.get("height", 1024) |
|
guidance_scale = data.get("guidance_scale", 3.5) |
|
seed = data.get("seed", 0) |
|
provider = data.get("provider", "flux") |
|
|
|
if not prompt: |
|
return jsonify({"error": "prompt is required"}), 400 |
|
|
|
img = IMG(prompt, width, height, guidance_scale, seed) |
|
|
|
|
|
def GenerateImage(): |
|
if provider == "blackforestlabs": |
|
return img.BlackForest(model) |
|
elif provider == "flux": |
|
return img.FluxMidJourny(model) |
|
elif provider == "blackforestlabs-schnell": |
|
return img.BlackForestSchnell(model) |
|
|
|
result = GenerateImage() |
|
print(result) |
|
return jsonify({"Result" : result}), 200 |
|
|
|
@app.route("/providers", methods=["GET"]) |
|
def get_providers(): |
|
return jsonify({"providers": ["blackforestlabs", "flux", "blackforestlabs-schnell"]}), 200 |
|
|
|
@app.route("/generate/image/model", methods=["POST"]) |
|
def get_models(): |
|
data = request.json |
|
provider = data.get("provider", "blackforestlabs") |
|
|
|
if provider == "blackforestlabs": |
|
return jsonify({"models": BlackForestLabsFlux1Dev.get_models()}), 200 |
|
elif provider == "flux": |
|
return jsonify({"models": G4F.get_models()}), 200 |
|
elif provider == "blackforestlabs-schnell": |
|
return jsonify({"models": BlackForestLabsFlux1Schnell.get_models()}), 200 |
|
return jsonify({"error": "provider not found"}), 404 |
|
|
|
@app.route("/", methods=["GET"]) |
|
def index(): |
|
return render_template("index.html") |
|
|
|
if __name__ == "__main__": |
|
app.run(port=7860) |