@startuml actor User participant Client participant Bing participant ImageDownloader participant BaseImage participant PixelImage database Web User -> Client : Execute command activate Client create Bing Client -> Bing : << new >> Client -> Bing : Request to search images activate Bing Bing -> Web : Request to search images activate Web Web -> Web : Search images Web -> Bing : List of image urls deactivate Web Bing -> Client : List of image urls deactivate Bing create ImageDownloader Client -> ImageDownloader : << new >> Client -> ImageDownloader : Request to download images activate ImageDownloader ImageDownloader -> Web : Request images activate Web Web -> ImageDownloader : Download images deactivate Web ImageDownloader -> ImageDownloader : Save downloaded images ImageDownloader -> Client: List of downloaded image paths deactivate ImageDownloader create BaseImage Client -> BaseImage : << new >> BaseImage -> BaseImage : Preprocess create PixelImage Client -> PixelImage : << new >> Client -> BaseImage : Request to dispatch pixel images activate BaseImage BaseImage -> PixelImage : Request characteristic color activate PixelImage PixelImage -> PixelImage : Calculate characteristic color PixelImage -> BaseImage : Characteristic color deactivate PixelImage BaseImage -> BaseImage : Pick up the "nearest" image of the pixel BaseImage -> Client : Map of dispatched images deactivate BaseImage Client -> PixelImage : Request to resize to pixel size activate PixelImage PixelImage -> PixelImage : Resize to pixel size PixelImage -> Client : Done deactivate PixelImage Client->PixelImage : Request to compose mosaic image activate PixelImage PixelImage->PixelImage : Compose mosaic image PixelImage->Client : Done deactivate PixelImage Client->User : Done deactivate Client @enduml