code: def create_montage_image(
      image_list, image_shape=(640, 480), grid_shape=(3, 1)
  ) -> np.ndarray:
      height, width = image_shape[1], image_shape[0]
      montage = np.zeros(
          (
              image_shape[1] * grid_shape[1],
              image_shape[0] * grid_shape[0],
              3,
          ),
          dtype="uint8",
      )
  
      x_shift = 0
      y_shift = 0
  
      for n in range(len(image_list)):
          image = cv2.resize(
              image_list[n],
              (width, height),
              interpolation=cv2.INTER_NEAREST,
          )
          montage[
              y_shift * height : (y_shift + 1) * height,
              x_shift * width : (x_shift + 1) * width,
          ] = image
          x_shift += 1
  
          if x_shift % (grid_shape[0]) == 0 and x_shift > 0:
              y_shift += 1
              x_shift = 0
  
      return montage
  
imports: import cv2
  import matplotlib.pyplot
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: create_montage_image(image_list, image_shape, grid_shape) and returns: montage