YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

import os import cv2 import gradio as gr import numpy as np import random import base64 import requests import json import time

MAX_SEED = 999999

example_path = os.path.join(os.path.dirname(file), 'assets')

refer_list = sorted(os.listdir(os.path.join(example_path, "refer_imgs"))) refer_list_path = [os.path.join(example_path, "refer_imgs", img) for img in refer_list]

human_list = sorted(os.listdir(os.path.join(example_path, "id_imgs"))) human_list_path = [os.path.join(example_path, "id_imgs", img) for img in human_list]

prompt_list = [ # ... 這裡放你的 prompt_list ... ]

prompt_list_single = [ 'hold a sign writing "Kolors Portrait with Flux"', "A beautiful girl reading book, high quality.", "Full body shot of young Asian face woman in sun hat and white dress standing on sunny beach with sea and mountains in background, high quality, sharp focus,", ]

def imgpath_to_prompt(img_path): if img_path is None: return None img_name = os.path.basename(img_path) if img_name in refer_list: prompt_id = refer_list.index(img_name) return prompt_list[prompt_id] else: return None

def portrait_gen(person_img, template_img, prompt, seed, randomize_seed): if person_img is None: raise gr.Error("Empty person image")

if randomize_seed:
    seed = random.randint(0, MAX_SEED)

encoded_person_img = cv2.imencode('.jpg', cv2.cvtColor(person_img, cv2.COLOR_RGB2BGR))[1].tobytes()
encoded_person_img = base64.b64encode(encoded_person_img).decode('utf-8')

encoded_template_img = None
if template_img is not None and template_img != "":
    prompt_temp = imgpath_to_prompt(template_img)
    if prompt_temp is not None:
        prompt = prompt_temp
    template_bgr = cv2.imread(template_img)
    if template_bgr is not None:
        encoded_template_img = cv2.imencode('.jpg', template_bgr)[1].tobytes()
        encoded_template_img = base64.b64encode(encoded_template_img).decode('utf-8')

url = "http://" + os.environ.get('avatar_url', '') + "Submit"
token = os.environ.get('token', '')
referer = os.environ.get('referer', '')
headers = {'Content-Type': 'application/json', 'token': token, 'referer': referer}
data = {
    "templateImage": encoded_template_img,
    "humanImage": encoded_person_img,
    "seed": seed,
    "prompt": prompt
}

try:
    response = requests.post(url, headers=headers, data=json.dumps(data), timeout=50)
    if response.status_code == 200:
        result = response.json()['result']
        status = result['status']
        if status == "success":
            uuid = result['result']
        else:
            raise gr.Error(f"Submit error status: {status}")
    else:
        raise gr.Error(f"Submit request failed with status code {response.status_code}")
except Exception as e:
    raise gr.Error(f"Post Exception: {e}")

time.sleep(9)  # 等待模型生成

Max_Retry = 12
result_img = None
info = ""
for _ in range(Max_Retry):
    try:
        query_url = "http://" + os.environ.get('avatar_url', '') + "Query?taskId=" + uuid
        response = requests.get(query_url, headers=headers, timeout=20)
        if response.status_code == 200:
            result = response.json()['result']
            status = result['status']
            if status == "success":
                result_b64 = result['result']
                result_decoded = base64.b64decode(result_b64)
                result_np = np.frombuffer(result_decoded, np.uint8)
                result_img = cv2.imdecode(result_np, cv2.IMREAD_UNCHANGED)
                if result_img is not None:
                    result_img = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)  # OpenCV 是BGR要轉RGB給Gradio
                info = "Success"
                break
            elif status == "error":
                info = "Error from server"
                break
        else:
            info = f"Query failed with status {response.status_code}"
            break
    except requests.exceptions.ReadTimeout:
        info = "Timeout, please try later"
    except Exception as e:
        info = f"Exception during query: {e}"
    time.sleep(1)

if info != "Success":
    raise gr.Error(info)

return result_img, seed, info

css = """ #col-left { max-width: 270px; margin: 0 auto;} #col-mid { max-width: 270px; margin: 0 auto;} #col-right { max-width: 550px; margin: 0 auto;} #col-showcase { max-width: 1100px; margin: 0 auto;} #button { color: blue;} """

def change_mode(mode: str): if mode == "Input prompt": return gr.update(visible=True), gr.update(visible=False, value=None) elif mode == "Ref. image": return gr.update(visible=False, value=""), gr.update(visible=True) else: raise gr.Error("no such mode!")

change_mode_js = """ function change_mode_js(mode){ const text_examples = document.querySelector("#text_examples"); const image_examples = document.querySelector("#image_examples"); const ref_examples = document.querySelector("#ref_examples"); const prompt_examples = document.querySelector("#prompt_examples"); if (mode === "Input prompt"){ text_examples.hidden = false; prompt_examples.hidden = false; image_examples.hidden = true; ref_examples.hidden = true; } else { text_examples.hidden = true; prompt_examples.hidden = true; image_examples.hidden = false; ref_examples.hidden = false; } return [mode]; } """

with gr.Blocks(css=css) as Portrait: gr.HTML("

Kolors Portrait with Flux

") with gr.Row(): with gr.Column(elem_id="col-left"): gr.HTML("

Step 1. Upload a portrait image ⬇️

") with gr.Column(elem_id="col-mid"): gr.HTML("

Step 2. Set a style reference ⬇️

") with gr.Column(elem_id="col-right"): gr.HTML("

Step 3. Press “Run” to get results ⬇️

")

with gr.Row():
    with gr.Column(elem_id="col-left"):
        imgs = gr.Image(label="Person Images", source='upload', type="numpy", width=400)
        gr.Examples(
            examples=human_list_path,
            inputs=imgs,
            label="Person Images Examples",
            examples_per_page=10
        )
    with gr.Column(elem_id="col-mid"):
        mode = gr.Radio(label="Set a reference image or input prompt",
                        choices=["Ref. image", "Input prompt"],
                        value="Input prompt")
        refer_img = gr.Image(label="Reference images", source='upload', type="filepath")
        gr.Examples(
            examples=refer_list_path,
            inputs=refer_img,
            label='Reference images Examples',
            elem_id="ref_examples",
            examples_per_page=9
        )
        prompt = gr.Textbox(
            label="Input prompts",
            placeholder="Enter your prompt",
            max_lines=1,
            visible=True,
        )
        gr.Examples(
            examples=prompt_list_single,
            inputs=prompt,
            label='Prompt Examples',
            elem_id="prompt_examples",
        )
        mode.change(
            fn=change_mode,
            inputs=mode,
            outputs=[prompt, refer_img],
            js=change_mode_js
        )
    with gr.Column(elem_id="col-right"):
        image_out = gr.Image(label="Results", show_share_button=False)
        with gr.Row():
            seed = gr.Slider(minimum=0, maximum=MAX_SEED, step=1, value=0, label="Seed")
            randomize_seed = gr.Checkbox(label="Random seed", value=True)
        with gr.Row():
            seed_used = gr.Number(label="Seed used", interactive=False)
            result_info = gr.Textbox(label="Response", interactive=False)
        test_button = gr.Button(value="Run", elem_id="button")

test_button.click(
    fn=portrait_gen,
    inputs=[imgs, refer_img, prompt, seed, randomize_seed],
    outputs=[image_out, seed_used, result_info],
    api_name=False,
    concurrency_limit=10
)

Portrait.queue(api_open=False).launch(show_api=False)

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support