File size: 5,528 Bytes
3bd82ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
from PIL import Image
import glob
import gradio as gr
import warnings
import io
import pandas as pd
import replicate
import json
import requests
import os
from datetime import date
import secrets
import string
import b2sdk.v2 as b2 #Backblaze img2img upload bucket 
import os 
import requests
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())


## Backclaze 
info = b2.InMemoryAccountInfo()
b2_api = b2.B2Api(info)
application_key_id = os.getenv("BB_KeyID")
application_key = os.getenv("BB_AppKey")
#print(application_key_id,application_key)
b2_api.authorize_account("production", application_key_id, application_key)     
BB_bucket_name=os.getenv("BB_bucket")       
BB_bucket=b2_api.get_bucket_by_name(os.getenv("BB_bucket"))
BB_defurl=os.getenv("BB_defurl")


def BB_uploadfile(local_file,file_name,b2_api=b2_api,BB_bucket_name=BB_bucket_name,FRIENDLY_URL=True):
    metadata = {"key": "value"}
    uploaded_file = BB_bucket.upload_local_file(
            local_file=local_file,
            file_name=file_name,
            file_infos=metadata,
    )
    img_url=b2_api.get_download_url_for_fileid(uploaded_file.id_)
    if FRIENDLY_URL: #Get friendly URP
        img_url=BB_defurl+"/file/"+BB_bucket_name+"/"+file_name
    print("backblaze", img_url)
    return img_url


#deepL api

def DeepL(text,source_lang="JA",target_lang="EN",API_KEY= os.getenv("DEEPL_Key")):
# パラメータの指定
  params = {
              'auth_key' : API_KEY,
              'text' : text,
              'source_lang' : source_lang, # 翻訳対象の言語
              "target_lang": target_lang  # 翻訳後の言語
          }
  # リクエストを投げる
  request = requests.post("https://api-free.deepl.com/v2/translate", data=params) # URIは有償版, 無償版で異なるため要注意
  result = request.json()
  return result["translations"][0]["text"]

##Email client 

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.utils import formatdate



def send_email(image_path, recipient_email,prompt=None,email=os.getenv("email"),pw=os.getenv("email_pw")):
    sender_email = email
    password = pw
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = recipient_email
    msg['Subject'] =f"「Saiseisei Generated Image」: {os.path.basename(image_path)}"
    msg['Date'] = formatdate()
    # Attach prompt 
    Text=f"""
    再生成のワークショップをご参加ありがとうございました
    生成したAI画像はこのメールに添付しました。
    --
    file name: {os.path.basename(image_path)}
    prompt: {prompt}  
    --
    再生成について最も知りたいなら、IGで@pp_yokoと@jarvis_labsを連絡してください
    https://www.instagram.com/jarvis_labs/
    https://www.instagram.com/pp_yoko/
    --
    そして、SNSで画像を共有したいなら、ぜひしてお願いいたします
    よろしくお願いいたします。
    Jarvis
    
    """
    msg.attach(MIMEText(Text, 'plain', 'utf-8'))
    # Attach the image
    with open(image_path, 'rb') as f:
        img = MIMEImage(f.read())
    msg.attach(img)
    server = smtplib.SMTP('smtp.gmail.com', 587) #smtp_server = "smtp.gmail.com" Google
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login(sender_email, password)

    server.send_message(msg)
    server.quit()


#Other
def random_str(n=8):
    # Define the characters to choose from
    characters = string.ascii_letters + string.digits
    # Generate the unreplicable string of length 8
    unreplicable_string = ''.join(secrets.choice(characters) for _ in range(n))
    return unreplicable_string


#Replicate img gen
base_model="lucataco/sdxl:c86579ac5193bf45422f1c8b92742135aa859b1850a8e4c531bff222fc75273d"

img_loc="./Tiles/"  
example_data=[]
example_data.append({"img":img_loc+"4tile_20240115.png","promt":"Green garden with a water water fountain and a river","ps":0.6})
example_data.append({"img":img_loc+"Tile_20240123_1.jpg","promt": "Outer space dust cloud","ps":0.6})
example_data.append({"img":img_loc+"Tile_20240404.JPG","promt": "Volcano","ps":0.6})
example_data.append({"img":img_loc+"Tile_20240421_1.jpg","promt": "Outer space dust cloud with a small ship flying through","ps":0.6})

#"jarvissan22/kawasehasui_backgrounds:a4bb8bb1beb503b02c93789381544097dcb70afc92c512ea1500e70ccf704bc4"
def Gen_image(prompt,img=None,ps=0.7,lr=0.8,model=base_model,save_loc="",w=1024,h=1024):
  input={
          "width": w,
          "height": h,
          "prompt": prompt,
          "refine": "no_refiner",
          "scheduler": "K_EULER",
          "lora_scale": lr,
          "num_outputs": 1,
          "guidance_scale": 7.5,
          "apply_watermark": True,
          "high_noise_frac": 0.8,
          "negative_prompt": "",
          "prompt_strength": ps,
          "num_inference_steps": 50
      }

  if img: #Upload image to backblaze 
    img_url=BB_uploadfile(img,os.path.basename(img))
    input["image"]=img_url

  #Gen image
  output = replicate.run(
      model,
      input=input,
  )
  #Get image
  img_url=output[0]
  r=requests.get(img_url)
  image = Image.open(io.BytesIO(r.content))
  #Save image
  file_saveloc=os.path.join(save_loc,f"GenImage_{date.today().strftime('%Y-%m-%d')}_{random_str()}.jpg")
  image.save(file_saveloc)
  #Upload image to backblaze
  _=BB_uploadfile(file_saveloc,os.path.basename(file_saveloc))  

  return image,file_saveloc