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]
|
||||
prompt: str
|
||||
source: Union["GameEvent", WorldEntity]
|
||||
title: str
|
||||
id: str = Field(default_factory=uuid)
|
||||
type: Literal["render"] = "render"
|
||||
|
||||
|
|
|
@ -268,22 +268,33 @@ def render_loop():
|
|||
logger.info(
|
||||
"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
|
||||
|
||||
# generate the prompt
|
||||
if isinstance(event, WorldEntity):
|
||||
logger.info("rendering entity %s", event.name)
|
||||
prompt = prompt_from_entity(event)
|
||||
title = event.name # TODO: generate a real title
|
||||
else:
|
||||
logger.info("rendering event %s", event.id)
|
||||
prompt = prompt_from_event(event)
|
||||
title = event.type # TODO: generate a real title
|
||||
|
||||
# render or not
|
||||
if prompt:
|
||||
logger.debug("rendering prompt for event %s: %s", event, prompt)
|
||||
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:
|
||||
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)
|
||||
|
||||
# TODO: use a gpt2 model to generate keywords from scene
|
||||
|
||||
# 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:
|
||||
|
@ -146,6 +151,7 @@ def generate_prompt_from_scene(scene: str, example_prompts: List[str]) -> str:
|
|||
scene,
|
||||
example_prompts,
|
||||
)
|
||||
|
||||
# generate prompt from scene and example prompts
|
||||
dungeon_master = get_dungeon_master()
|
||||
return dungeon_master(
|
||||
|
|
|
@ -184,7 +184,7 @@ export function PlayerEventItem(props: EventItemProps) {
|
|||
|
||||
export function RenderEventItem(props: EventItemProps) {
|
||||
const { event } = props;
|
||||
const { images } = event;
|
||||
const { images, prompt, title = 'Render' } = event;
|
||||
|
||||
return <ListItem alignItems="flex-start" ref={props.focusRef}>
|
||||
<ListItemAvatar>
|
||||
|
@ -192,7 +192,17 @@ export function RenderEventItem(props: EventItemProps) {
|
|||
<Camera />
|
||||
</Avatar>
|
||||
</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}>
|
||||
{Object.entries(images).map(([name, image]) => <ImageListItem key={name}>
|
||||
<a href='#' onClick={() => openImage(image as string)}>
|
||||
|
|
Loading…
Reference in New Issue