code: def main(
      download_dir: PathLike = "GSO_raw",
      target_dir: PathLike = "GSO",
      keep_raw_assets=False,
  ):
      download_dir = file_io.as_path(download_dir)
      target_dir = file_io.as_path(target_dir)
      catalogue = collect_list_of_available_assets()
      download_all(catalogue, download_dir=download_dir)
      assets = {}
      with tqdm.tqdm(total=len(catalogue)) as pbar:
          with multiprocessing.Pool(32, maxtasksperchild=1) as pool:
              promise = pool.imap_unordered(
                  functools.partial(
                      kubricify,
                      source_dir=download_dir,
                      target_dir=target_dir,
                  ),
                  catalogue,
              )
              for name, entry in promise:
                  assets[name] = entry
                  pbar.update(1)
  
      manifest_path = "HDRI_haven.json"
      manifest = {
          "name": "HDRI_haven",
          "data_dir": str(target_dir),
          "version": "1.0",
          "assets": assets,
      }
      file_io.write_json(manifest, manifest_path)
      if not keep_raw_assets:
          logging.info("Deleting the raw (unconverted) assets...")
          shutil.rmtree(download_dir)
  
file_path: kubric/kubric/scripts/download_hdri_haven.py
imports: import argparse
  import copy
  import functools
  import logging
  import multiprocessing
  import pathlib
  import shutil
  import tarfile
  import urllib.error
  import urllib.parse
  import urllib.request
  import requests
  import tqdm
  from kubric import file_io
  from kubric.kubric_typing import PathLike
label_desc: Use image node_id 5 for calling a global function with example usage: main(download_dir, target_dir, keep_raw_assets) without return types