Game-Creator / app.py
Omnibus's picture
Update app.py
c582bb6
raw
history blame
8.21 kB
import gradio as gr
import diff
import os
from PIL import Image
import uuid
import random
import bg
from rembg import remove as rm
import datetime
from huggingface_hub import (HfApi)
import uuid
import json
import requests
uid=uuid.uuid4()
proc1=diff
proc2=diff
save_data='https://huggingface.co/datasets/Omnibus/game-data-1/raw/main/'
token_self = os.environ['HF_TOKEN']
api=HfApi(token=token_self)
#bg1=gr.Interface.load("spaces/Omnibus/fast-bg-remove-mod")
#proc2=gr.Interface.load("spaces/Omnibus/fast-diff")
sky = "https://huggingface.co/spaces/Omnibus/game-test/resolve/main/assets/sky.png"
platform = 'https://huggingface.co/spaces/Omnibus/game-test/resolve/main/assets/platform.png'
star = 'https://huggingface.co/spaces/Omnibus/game-test/resolve/main/assets/star.png'
bomb = 'https://huggingface.co/spaces/Omnibus/game-test/resolve/main/assets/bomb.png'
dude = 'https://huggingface.co/spaces/Omnibus/game-test/resolve/main/assets/dude.png'
def game_fn(sky=sky,star=star,bomb=bomb,platform=platform,dude=dude):
html_mod=f"""
<div id="my_game" style="height:600px">
<iframe
id="myIframe"
src="https://omnibus-game-test.hf.space/file=index.html?sky={sky}&platform={platform}&star={star}&bomb={bomb}&dude={dude}"
frameborder="0"
width="100%"
height="100%"
></iframe>
</div>"""
return html_mod
def update_game(inp):
return game_fn(sky=sky)
def sky_fn(inp):
rand = random.randint(1,200)
for i in range(rand):
inp+=" "
uid=uuid.uuid4()
output=proc1.send_it(inp,5,1)
print(output)
outp=Image.open(output[0])
width, height = outp.size
rat = width/height
if width > height:
outp = outp.resize((600*rat,600))
elif width < height:
outp = outp.resize((800,800*rat))
else:
outp = outp.resize((800,536))
outp.save(f"{uid}_sky.png")
out = os.path.abspath(f"{uid}_sky.png")
#out = os.path.abspath(outp)
out_url = f'https://omnibus-game-test.hf.space/file={out}'
return output[0],out_url
def star_fn(inp):
rand = random.randint(1,200)
for i in range(rand):
inp+=" "
uid=uuid.uuid4()
output=proc2.send_it(inp,5,1)
outp=Image.open(output[0])
out=rm(outp)
outrs = out.resize((36,36))
outrs.save(f"{uid}_star.png")
out_file = os.path.abspath(f"{uid}_star.png")
out_url = f'https://omnibus-game-test.hf.space/file={out_file}'
return out,out_url
def enemy_fn(inp):
rand = random.randint(1,200)
for i in range(rand):
inp+=" "
uid=uuid.uuid4()
output=proc2.send_it(inp,5,1)
outp=Image.open(output[0])
out=rm(outp)
outrs = out.resize((24,24))
outrs.save(f"{uid}_enemy.png")
out_file = os.path.abspath(f"{uid}_enemy.png")
out_url = f'https://omnibus-game-test.hf.space/file={out_file}'
return out,out_url
def save_game(background_img,star_img,enemy_img,platform_img,dude_img):
user_repo=save_data.split('datasets/',1)[1].split('/raw',1)[0]
out_lod=[]
try:
r = requests.get(f'{save_data}game_data.json')
lod = json.loads(r.text)
out_lod.append(lod)
print (out_lod)
except:
pass
timestamp=str(datetime.datetime.now())
timename=timestamp.replace(" ","--").replace(":","-").replace(".","-")
print(timestamp)
try:
api.upload_file(
path_or_fileobj=background_img,
path_in_repo=f"{save_data.split('main/',1)[1]}/images/background/{timename}-background_img.png",
repo_id=save_data.split('datasets/',1)[1].split('/raw',1)[0],
token=token_self,
repo_type="dataset",
)
except Exception as e:
print (e)
pass
try:
api.upload_file(
path_or_fileobj=star_img,
path_in_repo=f"{save_data.split('main/',1)[1]}/images/star/{timename}-star_img.png",
repo_id=save_data.split('datasets/',1)[1].split('/raw',1)[0],
token=token_self,
repo_type="dataset",
)
except Exception as e:
print (e)
pass
try:
api.upload_file(
path_or_fileobj=enemy_img,
path_in_repo=f"{save_data.split('main/',1)[1]}/images/enemy/{timename}-enemy_img.png",
repo_id=save_data.split('datasets/',1)[1].split('/raw',1)[0],
token=token_self,
repo_type="dataset",
)
except Exception as e:
print (e)
pass
block = {'index': len(out_lod) + 1,
'timestamp': timestamp,
'background_url': f'https://huggingface.co/datasets/{user_repo}/resolve/main/images/background/{timename}-background_img.png',
'star_url': f'https://huggingface.co/datasets/{user_repo}/resolve/main/images/star/{timename}-star_img.png',
'enemy_url': f'https://huggingface.co/datasets/{user_repo}/resolve/main/images/enemy/{timename}-enemy_img.png',
#'platform_url': f'https://huggingface.co/datasets/{repo}/{space}/raw/main/{platform_img}',
#'dude_url': f'https://huggingface.co/datasets/{repo}/{space}/raw/main/{dude_img}',
}
print(block)
out_lod.append(block)
json_object = json.dumps(out_lod, indent=4)
with open("tmp1.json", "w") as outfile:
outfile.write(json_object)
try:
api.upload_file(
path_or_fileobj="tmp1.json",
path_in_repo=f"{save_data.split('main/',1)[1]}/game_data.json",
repo_id=save_data.split('datasets/',1)[1].split('/raw',1)[0],
token=token_self,
repo_type="dataset",
)
os.remove("tmp1.json")
print("success")
except Exception as e:
print (e)
pass
score_js="""
function(text_input,url_params) {
console.log(text_input, url_params);
const iframe = document.getElementById("myIframe").contentWindow.document.getElementById('my_score');
text_input = Object.fromEntries(iframe);
console.log(text_input);
return [text_input,url_params];
}
"""
with gr.Blocks() as app:
with gr.Row():
with gr.Column():
prompt_sky=gr.Textbox(label="Background",value="beautiful landscape, real, 8k")
btn_sky=gr.Button("Make")
out_im_sky=gr.Image(type='filepath')
out_sky_url=gr.Textbox(visible=False)
with gr.Column():
prompt_star=gr.Textbox(label="Star",value="Colorful Star, blank background")
btn_star=gr.Button("Make")
out_im_star=gr.Image(type='filepath')
out_star_url=gr.Textbox(visible=False)
with gr.Column():
prompt_enemy=gr.Textbox(label="Enemy",value="Ball on fire, blank background")
btn_enemy=gr.Button("Make")
out_im_enemy=gr.Image(type='filepath')
out_enemy_url=gr.Textbox(visible=False)
gr.Column()
gr.Column()
with gr.Row():
update_game=gr.Button("Make Game")
#start_prompt=gr.Textbox(value="beautiful landscape, real, 8k",visible=False)
html_game = gr.HTML()
save_btn=gr.Button("Save")
get_score=gr.Button("Get Score")
with gr.Row():
text_input=gr.Textbox()
url_params=gr.Textbox()
def return_score(text, url_params):
'''if url_params.get('url') ==check_acc:
out = gr.update(visible=True)
else:
out=gr.update(visible=False)
#out=gr.HTML.update("""<head><meta http-equiv="refresh" content="0;URL='https://huggingface.co/spaces"></head>""")'''
return ["" + text + "", url_params]
get_score.click(return_score,text_input,text_input,_js=score_js)
save_btn.click(save_game,[out_im_sky,out_im_star,out_im_enemy,out_im_enemy,out_im_enemy],None)
update_game.click(game_fn,[out_sky_url,out_star_url,out_enemy_url],html_game)
btn_sky.click(sky_fn,prompt_sky,[out_im_sky,out_sky_url])
btn_star.click(star_fn,prompt_star,[out_im_star,out_star_url])
btn_enemy.click(enemy_fn,prompt_enemy,[out_im_enemy,out_enemy_url])
#app.load(sky_fn,prompt_sky,[out_im_sky,out_sky_url]).then(game_fn,[out_sky_url],html_game)
app.queue(concurrency_count=10).launch()