1
0
Fork 0

super hacky multi tiling

This commit is contained in:
Sean Sube 2023-09-11 07:28:20 -05:00
parent 0047e1a12c
commit 1247cb7307
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
3 changed files with 26 additions and 4 deletions

View File

@ -152,6 +152,8 @@ class ChainPipeline:
tile, tile,
) )
extra_tiles = []
def stage_tile( def stage_tile(
source_tile: Image.Image, source_tile: Image.Image,
tile_mask: Image.Image, tile_mask: Image.Image,
@ -169,12 +171,19 @@ class ChainPipeline:
callback=callback, callback=callback,
dims=dims, dims=dims,
**kwargs, **kwargs,
)[0] )
if len(output_tile) > 1:
while len(extra_tiles) < len(output_tile):
extra_tiles.append([])
for tile, layer in zip(output_tile, extra_tiles):
layer.append((tile, dims))
if is_debug(): if is_debug():
save_image(server, "last-tile.png", output_tile) save_image(server, "last-tile.png", output_tile[0])
return output_tile return output_tile[0]
except Exception: except Exception:
logger.exception( logger.exception(
"error while running stage pipeline for tile, retry %s of 3", "error while running stage pipeline for tile, retry %s of 3",
@ -194,8 +203,17 @@ class ChainPipeline:
[stage_tile], [stage_tile],
**kwargs, **kwargs,
) )
stage_outputs.append(output) stage_outputs.append(output)
if len(extra_tiles) > 1:
for layer in extra_tiles:
layer_output = Image.new("RGB", output.size)
for tile, dims in layer:
layer_output.paste(tile, (dims[0], dims[1]))
stage_outputs.append(layer_output)
stage_sources = stage_outputs stage_sources = stage_outputs
else: else:
logger.debug("image within tile size of %s, running stage", tile) logger.debug("image within tile size of %s, running stage", tile)
@ -208,6 +226,7 @@ class ChainPipeline:
per_stage_params, per_stage_params,
stage_sources, stage_sources,
callback=callback, callback=callback,
dims=(0, 0, tile),
**kwargs, **kwargs,
) )
# doing this on the same line as stage_pipe.run can leave sources as None, which the pipeline # doing this on the same line as stage_pipe.run can leave sources as None, which the pipeline

View File

@ -47,4 +47,4 @@ class BlendGridStage(BaseStage):
n = order[i] n = order[i]
output.paste(sources[n], (x * size[0], y * size[1])) output.paste(sources[n], (x * size[0], y * size[1]))
return [output] return [*sources, output]

View File

@ -343,6 +343,9 @@ def process_tile_order(
filters: List[TileCallback], filters: List[TileCallback],
**kwargs, **kwargs,
) -> Image.Image: ) -> Image.Image:
"""
TODO: needs to handle more than one image
"""
if order == TileOrder.grid: if order == TileOrder.grid:
logger.debug("using grid tile order with tile size: %s", tile) logger.debug("using grid tile order with tile size: %s", tile)
return process_tile_grid(source, tile, scale, filters, **kwargs) return process_tile_grid(source, tile, scale, filters, **kwargs)