add prompt and title to render events
This commit is contained in:
parent
8a5058dbec
commit
db513fb6ae
|
@ -161,7 +161,9 @@ class RenderEvent(BaseModel):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
paths: List[str]
|
paths: List[str]
|
||||||
|
prompt: str
|
||||||
source: Union["GameEvent", WorldEntity]
|
source: Union["GameEvent", WorldEntity]
|
||||||
|
title: str
|
||||||
id: str = Field(default_factory=uuid)
|
id: str = Field(default_factory=uuid)
|
||||||
type: Literal["render"] = "render"
|
type: Literal["render"] = "render"
|
||||||
|
|
||||||
|
|
|
@ -268,22 +268,33 @@ def render_loop():
|
||||||
logger.info(
|
logger.info(
|
||||||
"using existing images for event %s: %s", event, existing_images
|
"using existing images for event %s: %s", event, existing_images
|
||||||
)
|
)
|
||||||
broadcast(RenderEvent(paths=existing_images, source=event))
|
broadcast(
|
||||||
|
RenderEvent(
|
||||||
|
paths=existing_images,
|
||||||
|
prompt="",
|
||||||
|
source=event,
|
||||||
|
title="Existing Images",
|
||||||
|
)
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# generate the prompt
|
# generate the prompt
|
||||||
if isinstance(event, WorldEntity):
|
if isinstance(event, WorldEntity):
|
||||||
logger.info("rendering entity %s", event.name)
|
logger.info("rendering entity %s", event.name)
|
||||||
prompt = prompt_from_entity(event)
|
prompt = prompt_from_entity(event)
|
||||||
|
title = event.name # TODO: generate a real title
|
||||||
else:
|
else:
|
||||||
logger.info("rendering event %s", event.id)
|
logger.info("rendering event %s", event.id)
|
||||||
prompt = prompt_from_event(event)
|
prompt = prompt_from_event(event)
|
||||||
|
title = event.type # TODO: generate a real title
|
||||||
|
|
||||||
# render or not
|
# render or not
|
||||||
if prompt:
|
if prompt:
|
||||||
logger.debug("rendering prompt for event %s: %s", event, prompt)
|
logger.debug("rendering prompt for event %s: %s", event, prompt)
|
||||||
image_paths = generate_images(prompt, 2, prefix=prefix)
|
image_paths = generate_images(prompt, 2, prefix=prefix)
|
||||||
broadcast(RenderEvent(paths=image_paths, source=event))
|
broadcast(
|
||||||
|
RenderEvent(paths=image_paths, prompt=prompt, source=event, title=title)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
logger.warning("no prompt for event %s", event)
|
logger.warning("no prompt for event %s", event)
|
||||||
|
|
||||||
|
|
|
@ -136,8 +136,13 @@ def generate_keywords_from_scene(scene: str) -> List[str]:
|
||||||
logger.debug("generating keywords from scene: %s", scene)
|
logger.debug("generating keywords from scene: %s", scene)
|
||||||
|
|
||||||
# TODO: use a gpt2 model to generate keywords from scene
|
# TODO: use a gpt2 model to generate keywords from scene
|
||||||
|
|
||||||
# hack for now: split on punctuation and whitespace
|
# hack for now: split on punctuation and whitespace
|
||||||
return re.split(r"\W+", scene)
|
words = re.split(r"\W+", scene)
|
||||||
|
|
||||||
|
# downcase and remove empty strings
|
||||||
|
words = [word.lower() for word in words if word]
|
||||||
|
return words
|
||||||
|
|
||||||
|
|
||||||
def generate_prompt_from_scene(scene: str, example_prompts: List[str]) -> str:
|
def generate_prompt_from_scene(scene: str, example_prompts: List[str]) -> str:
|
||||||
|
@ -146,6 +151,7 @@ def generate_prompt_from_scene(scene: str, example_prompts: List[str]) -> str:
|
||||||
scene,
|
scene,
|
||||||
example_prompts,
|
example_prompts,
|
||||||
)
|
)
|
||||||
|
|
||||||
# generate prompt from scene and example prompts
|
# generate prompt from scene and example prompts
|
||||||
dungeon_master = get_dungeon_master()
|
dungeon_master = get_dungeon_master()
|
||||||
return dungeon_master(
|
return dungeon_master(
|
||||||
|
|
|
@ -184,7 +184,7 @@ export function PlayerEventItem(props: EventItemProps) {
|
||||||
|
|
||||||
export function RenderEventItem(props: EventItemProps) {
|
export function RenderEventItem(props: EventItemProps) {
|
||||||
const { event } = props;
|
const { event } = props;
|
||||||
const { images } = event;
|
const { images, prompt, title = 'Render' } = event;
|
||||||
|
|
||||||
return <ListItem alignItems="flex-start" ref={props.focusRef}>
|
return <ListItem alignItems="flex-start" ref={props.focusRef}>
|
||||||
<ListItemAvatar>
|
<ListItemAvatar>
|
||||||
|
@ -192,7 +192,17 @@ export function RenderEventItem(props: EventItemProps) {
|
||||||
<Camera />
|
<Camera />
|
||||||
</Avatar>
|
</Avatar>
|
||||||
</ListItemAvatar>
|
</ListItemAvatar>
|
||||||
<ListItemText primary="">Render</ListItemText>
|
<ListItemText
|
||||||
|
primary={title}
|
||||||
|
secondary={
|
||||||
|
<Typography
|
||||||
|
sx={{ display: 'block' }}
|
||||||
|
component="span"
|
||||||
|
variant="body2"
|
||||||
|
color="text.primary"
|
||||||
|
>{prompt}</Typography>
|
||||||
|
}
|
||||||
|
/>
|
||||||
<ImageList cols={3} rowHeight={256}>
|
<ImageList cols={3} rowHeight={256}>
|
||||||
{Object.entries(images).map(([name, image]) => <ImageListItem key={name}>
|
{Object.entries(images).map(([name, image]) => <ImageListItem key={name}>
|
||||||
<a href='#' onClick={() => openImage(image as string)}>
|
<a href='#' onClick={() => openImage(image as string)}>
|
||||||
|
|
Loading…
Reference in New Issue