|
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) |
|
|
|
|
|
|
|
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/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_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', |
|
|
|
|
|
} |
|
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") |
|
|
|
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.queue(concurrency_count=10).launch() |