File size: 3,483 Bytes
6415f78
 
f9bd988
6415f78
 
f9bd988
 
 
 
 
6415f78
 
 
f9bd988
6415f78
f9bd988
 
 
 
 
 
 
 
6415f78
 
 
 
f9bd988
6415f78
f9bd988
6415f78
 
 
 
 
 
f9bd988
 
 
6415f78
 
 
f9bd988
 
 
 
 
 
 
 
 
6415f78
f9bd988
 
6415f78
 
 
 
f9bd988
 
6415f78
 
 
 
 
 
f9bd988
6415f78
f9bd988
 
 
 
 
6415f78
f9bd988
 
6415f78
 
f9bd988
 
 
6415f78
 
 
f9bd988
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import base64
import io
import os
import re
import requests
import dotenv
from PIL import Image
import pollinations as ai

dotenv.load_dotenv()

def extract_summary(text):
    text = text.replace("#", "").strip().lower()
    match = re.search(r"summary(.*?)highlights", text, re.DOTALL)
    if match:
        return match.group(1).strip()
    return text

def fix_base64_padding(data):
    missing_padding = len(data) % 4
    if missing_padding:
        data += "=" * (4 - missing_padding)
    return data

def generate_image(title, summary):
    try:
        extracted_summary = extract_summary(summary)
        prompt = f"{title.strip()}: {extracted_summary.strip()}"
        model_obj = ai.ImageModel(
            model=ai.flux_pro,
            width=1280,
            height=720,
            seed=2342342340,
            enhance=True,
            nologo=True
        )
        image = model_obj.generate(
            prompt=prompt,
            negative="low quality, blurry, pixelated",
            save=True,
            file="image.png"
        )
        if type(image) == str:
            print(f"An error occurred during image generation: {image}")
            return None
        image_url = image.params.get("url")
        if image_url:
            img_data = requests.get(image_url).content
            base64_encoded = base64.b64encode(img_data).decode("utf-8")
            return f"data:image/png;base64,{base64_encoded}"
        return None
    except Exception as e:
        print(f"An error occurred during image generation: {e}")
        return None

def verify_image(image_data):
    try:
        image_stream = io.BytesIO(image_data)
        img = Image.open(image_stream)
        img.verify()
        return True
    except Exception as e:
        print(f"Error verifying image: {e}")
        return False

def upload_image(data_uri, api_key):
    image_url = "https://i.ibb.co/qdC1nSx/landscape-placeholder-e1608289113759.png"
    try:
        base64_image = fix_base64_padding(data_uri.split(",")[1])
        url = f"https://api.imgbb.com/1/upload?key={api_key}"
        response = requests.post(url, data={"image": base64_image}).json()
        if response.get("status") == 200:
            image_url = response["data"]["display_url"]
        else:
            print(f"Error uploading image: {response}")
            image_url = "https://i.ibb.co/qdC1nSx/landscape-placeholder-e1608289113759.png"
    except Exception as e:
        print(f"Error uploading image: {e}")
        image_url = "https://i.ibb.co/qdC1nSx/landscape-placeholder-e1608289113759.png"
    finally:
        return image_url

def fetch_image(title, summary, api_key):
    image_url = "https://i.ibb.co/qdC1nSx/landscape-placeholder-e1608289113759.png"
    try:
        data_uri = generate_image(title, summary)
        if data_uri:
            base64_image = fix_base64_padding(data_uri.split(",")[1])
            image_data = base64.b64decode(base64_image)
            if verify_image(image_data):
                image_url = upload_image(data_uri, api_key)
        else:
            image_url = "https://i.ibb.co/qdC1nSx/landscape-placeholder-e1608289113759.png"
    except Exception as e:
        print(f"Error fetching image: {e}")
        image_url = "https://i.ibb.co/qdC1nSx/landscape-placeholder-e1608289113759.png"
    finally:
        os.remove("image.png")
        return image_url