1
0
Fork 0

add prompt and title to render events
Run Docker Build / build (push) Failing after 11s Details
Run Python Build / build (push) Failing after 17s Details

This commit is contained in:
Sean Sube 2024-05-19 15:51:58 -05:00
parent 8a5058dbec
commit db513fb6ae
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
4 changed files with 34 additions and 5 deletions

View File

@ -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"

View File

@ -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)

View File

@ -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(

View File

@ -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)}>