@Override
    public void onNext(final PullResponseItem item) {
        super.onNext(item);

        final String statusLowercase = item.getStatus() != null ? item.getStatus().toLowerCase() : "";
        final String id = item.getId();

        if (item.getProgressDetail() != null) {
            allLayers.add(id);
        }

        if (statusLowercase.equalsIgnoreCase("download complete")) {
            downloadedLayers.add(id);
        }

        if (statusLowercase.equalsIgnoreCase("pull complete")) {
            pulledLayers.add(id);
        }

        if (item.getProgressDetail() != null) {
            Long total = item.getProgressDetail().getTotal();
            Long current = item.getProgressDetail().getCurrent();

            if (total != null && total > totalSizes.getOrDefault(id, 0L)) {
                totalSizes.put(id, total);
            }
            if (current != null && current > currentSizes.getOrDefault(id, 0L)) {
                currentSizes.put(id, current);
            }
        }

        if (statusLowercase.startsWith("pulling from") || statusLowercase.contains("complete")) {
            long totalSize = totalLayerSize();
            long currentSize = downloadedLayerSize();

            int pendingCount = allLayers.size() - downloadedLayers.size();
            String friendlyTotalSize;
            if (pendingCount > 0) {
                friendlyTotalSize = "? MB";
            } else {
                friendlyTotalSize = FileUtils.byteCountToDisplaySize(totalSize);
            }

            logger.info(
                "Pulling image layers: {} pending, {} downloaded, {} extracted, ({}/{})",
                String.format("%2d", pendingCount),
                String.format("%2d", downloadedLayers.size()),
                String.format("%2d", pulledLayers.size()),
                FileUtils.byteCountToDisplaySize(currentSize),
                friendlyTotalSize
            );
        }

        if (statusLowercase.contains("complete")) {
            completed = true;
        }
    }
{@link PullImageResultCallback} with improved logging of pull progress.
core/src/main/java/org/testcontainers/images/LoggedPullImageResultCallback.java