super hacky multi tiling
This commit is contained in:
parent
0047e1a12c
commit
1247cb7307
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue