{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "63ce0734-aad1-48c2-948c-f6ad0606132f",
   "metadata": {},
   "source": [
    "## Run a pipeline with data on a remote s3 bucket"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cdbd6fb8-f668-4a18-bbb7-f92a3bdf2172",
   "metadata": {},
   "source": [
    "This process will run the entire pipeline described in a configuration file. The input data is available in a remote s3 bucket."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2eb37ea8-69d2-4e23-bf77-c39b2e0d108e",
   "metadata": {},
   "source": [
    "## Import dependencies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "f00299ae-1140-494b-99be-9fa8867c0ac8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "from paidiverpy.pipeline import Pipeline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1901794f-b8ac-4ec7-a83e-9a4947bc9a67",
   "metadata": {},
   "source": [
    "## Working with a public object store (https data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a036f6a-a579-49ee-8d55-5d60e3f1e7f4",
   "metadata": {},
   "source": [
    "When working with public object store, you just need to give as input path the paths of the files in the configuration file, as you can see in the example below:\n",
    "\n",
    "```yaml\n",
    "general:\n",
    "  input_path: \"https://paidiver-o.s3-ext.jc.rl.ac.uk/paidiverpy/data/lazy_load_benthic/\"\n",
    "  output_path: \"output\"\n",
    "  metadata_path: \"https://paidiver-o.s3-ext.jc.rl.ac.uk/paidiverpy/data/lazy_load_benthic/metadata_ifdo_hf.json\"\n",
    "```\n",
    "\n",
    "In this case, I am giving the path on the object store where all my images are storage. For the metadata path, you have to give the exact link of the metadata"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "46f413c1-b9a5-4dc1-a27d-9cba7f9c745c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:root:Failed to validate the IFDO metadata.\n",
      "You can continue, but some functions may not work properly.\n",
      "Please set verbose to 3 (DEBUG) to see the validation errors.\n",
      "WARNING:root:Metadata does not have a camera-position type column. It should have one of the following columns: ['camera-position', 'camera_position', 'altitude_m', 'altitude_metre', 'altitude_meters', 'altitude_meter', 'image-altitude-meters']. \n",
      "\n",
      "WARNING:root:Metadata does not have a depth type column. It should have one of the following columns: ['depth', 'depth_m', 'depth_metres', 'depth_metre', 'depth_meters', 'depth_meter', 'image-depth']. \n",
      "\n",
      "WARNING:root:Metadata does not have a pitch type column. It should have one of the following columns: ['pitch', 'Pitch', 'Pitch_deg', 'pitch_deg', 'image-camera-pitch-degrees']. \n",
      "\n",
      "WARNING:root:Metadata does not have a roll type column. It should have one of the following columns: ['roll', 'Roll', 'Roll_deg', 'roll_deg', 'image-camera-roll-degrees']. \n",
      "\n",
      "WARNING:root:Some functions may not work properly.\n"
     ]
    }
   ],
   "source": [
    "pipeline = Pipeline(config_file_path=\"../config_files/config_object_store.yml\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "310d8998-6ac7-4db4-a706-50270b6895ee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
       "<defs>\n",
       "<symbol id=\"arrow-right\" viewBox=\"0 0 330 330\">\n",
       "  <path id=\"XMLID_222_\" d=\"M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001\n",
       "\tc-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213\n",
       "\tC82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606\n",
       "\tC255,161.018,253.42,157.202,250.606,154.389z\"/>\n",
       "</defs>\n",
       "</svg>\n",
       "<style>/* CSS stylesheet for displaying Paidiverpy objects in jupyterlab.\n",
       " *\n",
       " */\n",
       "\n",
       ":root {\n",
       "  --ppy-font-color: var(--jp-content-font-color, rgba(0, 0, 0, 1));\n",
       "  --ppy-font-color-brown: var(--jp-content-font-color-brown, brown);\n",
       "  --ppy-font-color-olive: var(--jp-content-font-color-olive, olive);\n",
       "  --ppy-font-color-teal: var(--jp-content-font-color-teal, teal);\n",
       "  --ppy-font-color-blue: var(--jp-content-font-color-blue, blue);\n",
       "  --ppy-font-color-gray: var(--jp-content-font-color-gray, gray);\n",
       "  --ppy-border-color: var(--jp-border-color2, #e0e0e0);\n",
       "  --ppy-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
       "  --ppy-background-color: var(--jp-layout-color, white);\n",
       "  --ppy-background-color2: var(--jp-layout-color3, rgba(212, 212, 212, 0.15));\n",
       "}\n",
       "\n",
       "\n",
       "html[theme=\"dark\"],\n",
       "html[data-theme=\"dark\"],\n",
       "body[data-theme=\"dark\"],\n",
       "body.vscode-dark {\n",
       "  --ppy-font-color: rgba(255, 255, 255, 1);\n",
       "  --ppy-font-color-brown: brown;\n",
       "  --ppy-font-color-olive: olive;\n",
       "  --ppy-font-color-teal: teal;\n",
       "  --ppy-font-color-blue: blue;\n",
       "  --ppy-font-color-gray: gray;\n",
       "  --ppy-border-color: #1f1f1f;\n",
       "  --ppy-disabled-color: #515151;\n",
       "  --ppy-background-color: #111111;\n",
       "}\n",
       "\n",
       ".ppy-background-color {\n",
       "  background-color: var(--ppy-background-color) !important;\n",
       "}\n",
       "\n",
       ".ppy-font-color-brown {\n",
       "  color: var(--ppy-font-color-brown) !important;\n",
       "}\n",
       "\n",
       ".ppy-font-color {\n",
       "  color: var(--ppy-font-color) !important;\n",
       "}\n",
       ".ppy-h2 {\n",
       "  font-size: 20px !important;\n",
       "}\n",
       ".ppy-h3 {\n",
       "  font-size: 13px !important;\n",
       "}\n",
       ".ppy-p {\n",
       "  font-size: 10px;\n",
       "}\n",
       ".ppy-p-error {\n",
       "  color: var(--ppy-font-color-brown);\n",
       "  font-weight: bold;\n",
       "  display: block;\n",
       "}\n",
       "\n",
       ".ppy-text-repr-fallback {\n",
       "  /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".ppy-pipeline-wrap{\n",
       "  display: flex;\n",
       "  flex-wrap: wrap;\n",
       "  align-items: center;\n",
       "}\n",
       "\n",
       ".ppy-pipeline {\n",
       "  float:left;\n",
       "  cursor: pointer;\n",
       "  padding: 10px;\n",
       "  width: max-content;\n",
       "  height: 150px;\n",
       "  margin: 10px;\n",
       "  border: 1px solid #000;\n",
       "  text-align: center;\n",
       "  /* line-height: 80px; */\n",
       "}\n",
       "\n",
       ".ppy-pipeline-clear-fix {\n",
       "  clear: both;\n",
       "}\n",
       "\n",
       ".ppy-pipeline-parameters-all {\n",
       "  padding: 10px;\n",
       "  margin: 10px;\n",
       "}\n",
       "\n",
       ".ppy-images-step-header {\n",
       "  cursor: pointer;\n",
       "  font-weight: bold;\n",
       "  margin-top: 10px;\n",
       "  margin-bottom: 5px;\n",
       "}\n",
       ".ppy-images-metadata {\n",
       "  margin-left: 20px;\n",
       "  margin-bottom: 10px;\n",
       "}\n",
       ".ppy-images {\n",
       "  display: flex;\n",
       "  flex-wrap: wrap;\n",
       "  gap: 10px;\n",
       "  margin-left: 20px;\n",
       "}\n",
       "\n",
       ".ppy-show-more-button, .ppy-hide-button {\n",
       "  margin-left: 20px;\n",
       "  background-color: #007bff;\n",
       "  color: white;\n",
       "  border: none;\n",
       "  padding: 5px 10px;\n",
       "  cursor: pointer;\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-pipeline-arrow {\n",
       "  float:left;\n",
       "  width: 50px;\n",
       "  height: 80px;\n",
       "  margin: 10px;\n",
       "  text-align: center;\n",
       "  line-height: 80px;\n",
       "}\n",
       "\n",
       ".ppy-images-img{\n",
       "  display: block;\n",
       "  max-width: 200px;\n",
       "  margin: 10px;\n",
       "}\n",
       "\n",
       ".ppy-images-toggle-arrow {\n",
       "  cursor: pointer;\n",
       "  margin-left: 5px;\n",
       "}\n",
       "\n",
       ".ppy-images-image-p {\n",
       "  cursor: pointer;\n",
       "}\n",
       "\n",
       ".ppy-arrow-right {\n",
       "  display: inline-block;\n",
       "  vertical-align: middle;\n",
       "  width: 1em;\n",
       "  height: 1.5em !important;\n",
       "  stroke-width: 0;\n",
       "  stroke: currentColor;\n",
       "  fill: currentColor;\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-json-block {\n",
       "  font-family: monospace;\n",
       "  background: var(--ppy-background-color);\n",
       "  padding: 1em;\n",
       "  border-radius: 6px;\n",
       "}\n",
       ".ppy-json-key {\n",
       "  color: var(--ppy-font-color-brown);\n",
       "}\n",
       ".ppy-json-string {\n",
       "  color: var(--ppy-font-color-olive);\n",
       "}\n",
       ".ppy-json-number {\n",
       "  color: var(--ppy-font-color-teal);\n",
       "}\n",
       ".ppy-json-bool {\n",
       "  color: var(--ppy-font-color-blue);\n",
       "}\n",
       ".ppy-json-null {\n",
       "  color: var(--ppy-font-color-gray);\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-pn-title-0 {\n",
       "  font-size: 30px;\n",
       "}\n",
       "\n",
       ".ppy-pn-title-1 {\n",
       "  font-size: 20px;\n",
       "}\n",
       ".ppy-pn-title-2 {\n",
       "  font-size: 17px;\n",
       "}\n",
       ".ppy-pn-title-3 {\n",
       "  font-size: 14px;\n",
       "}\n",
       ".ppy-pn-title-4 {\n",
       "  font-size: 12px;\n",
       "}\n",
       "\n",
       ".ppy-pn-bold {\n",
       "  font-weight: bold;\n",
       "}\n",
       ".ppy-pn-italic {\n",
       "  font-style: italic;\n",
       "}\n",
       ".ppy-pn-description {\n",
       "  font-size: 14px;\n",
       "  margin-bottom: 1px;\n",
       "}\n",
       "\n",
       ".bk-root {\n",
       "  width: 100% !important;\n",
       "  max-width: 100% !important;\n",
       "  box-sizing: border-box;\n",
       "}\n",
       "\n",
       "input, .bk-input, .bk-input-group {\n",
       "  margin-top: 0px;\n",
       "  margin-bottom: 3px;\n",
       "  padding-top: 0px;\n",
       "  padding-bottom: 0px;\n",
       "}\n",
       "\n",
       ".ppy-pn-header-button .bk-btn {\n",
       "  background: none !important;\n",
       "  border: none !important;\n",
       "  font-weight: bold;\n",
       "  font-size: 16px;\n",
       "  text-align: left;\n",
       "  padding-left: 0;\n",
       "  cursor: pointer;\n",
       "  box-shadow: none !important;\n",
       "  color: black;\n",
       "}\n",
       "\n",
       ".ppy-pn-danger-modal{\n",
       "  border: 2px solid red;\n",
       "  border-radius: 10px;\n",
       "  box-shadow: 0px 0px 10px rgba(255, 0, 0, 0.5);\n",
       "}\n",
       "\n",
       ".ppy-pn-config-form{\n",
       "  padding: 10px;\n",
       "  margin-top: 10px;\n",
       "  margin-bottom: 10px;\n",
       "  background-color: var(--ppy-background-color2);\n",
       "  border-radius: 5px;\n",
       "  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-pn-align-right {\n",
       "  display: flex;\n",
       "  justify-content: flex-end;\n",
       "}\n",
       "</style><script>function toggleMetadata(stepIndex, randomId) {\n",
       "  var metadata = document.getElementById(\"ppy-images-metadata-\" + randomId + \"-\" + stepIndex);\n",
       "  var arrow = document.getElementById(\"ppy-images-arrow-\" + randomId + \"-\" + stepIndex);\n",
       "  if (metadata.style.display === \"none\") {\n",
       "      metadata.style.display = \"block\";\n",
       "      arrow.innerHTML = \"▼\";\n",
       "      arrow.classList.remove(\"ppy-font-color\");\n",
       "      arrow.classList.add(\"ppy-font-color-brown\");\n",
       "  } else {\n",
       "      metadata.style.display = \"none\";\n",
       "      arrow.innerHTML = \"►\";\n",
       "      arrow.classList.remove(\"ppy-font-color-brown\");\n",
       "      arrow.classList.add(\"ppy-font-color\");\n",
       "  }\n",
       "}\n",
       "function toggleImage(imageId, randomId) {\n",
       "  var img = document.getElementById(imageId);\n",
       "  var arrow = document.getElementById(\"ppy-images-arrow-\" + randomId + \"-\" + imageId);\n",
       "  if (img.style.display === \"none\") {\n",
       "      img.style.display = \"block\";\n",
       "      arrow.innerHTML = \"▼\";\n",
       "      arrow.classList.remove(\"ppy-font-color\");\n",
       "      arrow.classList.add(\"ppy-font-color-brown\");\n",
       "  } else {\n",
       "      img.style.display = \"none\";\n",
       "      arrow.innerHTML = \"►\";\n",
       "      arrow.classList.remove(\"ppy-font-color-brown\");\n",
       "      arrow.classList.add(\"ppy-font-color\");\n",
       "  }\n",
       "}\n",
       "function showMore(stepIndex) {\n",
       "  var moreImages = document.getElementById(\"ppy-more-images-\" + stepIndex);\n",
       "  var showMoreButton = document.getElementById(\"ppy-show-more-button-\" + stepIndex);\n",
       "  var hideButton = document.getElementById(\"ppy-hide-button-\" + stepIndex);\n",
       "  moreImages.style.display = \"flex\";\n",
       "  showMoreButton.style.display = \"none\";\n",
       "  hideButton.style.display = \"inline-block\";\n",
       "}\n",
       "function hide(stepIndex) {\n",
       "  var moreImages = document.getElementById(\"ppy-more-images-\" + stepIndex);\n",
       "  var showMoreButton = document.getElementById(\"ppy-show-more-button-\" + stepIndex);\n",
       "  var hideButton = document.getElementById(\"ppy-hide-button-\" + stepIndex);\n",
       "  moreImages.style.display = \"none\";\n",
       "  showMoreButton.style.display = \"inline-block\";\n",
       "  hideButton.style.display = \"none\";\n",
       "}\n",
       "\n",
       "\n",
       "function showParameters(id, randomId) {\n",
       "  var currentTarget = document.getElementById('ppy-pipeline-' + randomId + '-' + id);\n",
       "  var square = document.getElementsByClassName('ppy-pipeline-' + randomId);\n",
       "  var allParams = document.getElementsByClassName('ppy-pipeline-parameters-' + randomId);\n",
       "  var selectedParams = document.getElementById('ppy-pipeline-parameters-' + randomId + '-' + id);\n",
       "  var idWasVisible = false;\n",
       "  if (selectedParams) {\n",
       "      var idWasVisible = selectedParams.style.display === 'block';\n",
       "  }\n",
       "  for (var i = 0; i < square.length; i++) {\n",
       "      square[i].classList.remove('ppy-font-color-brown');\n",
       "      square[i].classList.add('ppy-font-color');\n",
       "  }\n",
       "  for (var i = 0; i < allParams.length; i++) {\n",
       "      allParams[i].style.display = 'none';\n",
       "  }\n",
       "  // Show the selected parameter section\n",
       "  if (selectedParams) {\n",
       "      if (idWasVisible) {\n",
       "          selectedParams.style.display = 'none';\n",
       "          currentTarget.classList.remove('ppy-font-color-brown');\n",
       "          currentTarget.classList.add('ppy-font-color');\n",
       "      } else {\n",
       "          selectedParams.style.display = 'block';\n",
       "          currentTarget.classList.remove('ppy-font-color');\n",
       "          currentTarget.classList.add('ppy-font-color-brown');\n",
       "      }\n",
       "  }\n",
       "}\n",
       "\n",
       "hljs.highlightAll();\n",
       "</script><link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css\"><script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js\"></script><script>hljs.highlightAll();</script><pre class='ppy-text-repr-fallback'>&lt;paidiverpy.pipeline.pipeline.Pipeline object at 0x739c647944f0&gt;</pre><div>\n",
       "    <div class=\"ppy-pipeline-wrap\">\n",
       "        \n",
       "    <div id=\"ppy-pipeline-iyk-general\" title=\"Click to see more information\"\n",
       "        class=\"ppy-pipeline ppy-pipeline-iyk\"\n",
       "        onclick=\"showParameters('general', 'iyk')\">\n",
       "        <h2 class=\"ppy-h2\">Raw</h2>\n",
       "        <h3 class=\"ppy-h3\">Type: Open</h2>\n",
       "    </div>\n",
       "    <div class=\"ppy-pipeline-arrow\"><svg class='icon ppy-arrow-right'><use xlink:href='#arrow-right'></use></svg></div>\n",
       "            <div id=\"ppy-pipeline-iyk-step-0\" title=\"Click to see more information\"\n",
       "                class=\"ppy-pipeline ppy-pipeline-iyk\" onclick=\"showParameters('step-0', 'iyk')\">\n",
       "                <h2 class=\"ppy-h2\">Colour_correction</h2>\n",
       "                <h3 class=\"ppy-h3\">Type: Colour</h2>\n",
       "            </div>\n",
       "        <div class='ppy-pipeline-arrow'><svg class='icon ppy-arrow-right'><use xlink:href='#arrow-right'></use></svg></div>\n",
       "            <div id=\"ppy-pipeline-iyk-step-1\" title=\"Click to see more information\"\n",
       "                class=\"ppy-pipeline ppy-pipeline-iyk\" onclick=\"showParameters('step-1', 'iyk')\">\n",
       "                <h2 class=\"ppy-h2\">Datetime</h2>\n",
       "                <h3 class=\"ppy-h3\">Type: Sampling</h2>\n",
       "            </div>\n",
       "        <div class='ppy-pipeline-arrow'><svg class='icon ppy-arrow-right'><use xlink:href='#arrow-right'></use></svg></div>\n",
       "            <div id=\"ppy-pipeline-iyk-step-2\" title=\"Click to see more information\"\n",
       "                class=\"ppy-pipeline ppy-pipeline-iyk\" onclick=\"showParameters('step-2', 'iyk')\">\n",
       "                <h2 class=\"ppy-h2\">Colour_correction</h2>\n",
       "                <h3 class=\"ppy-h3\">Type: Colour</h2>\n",
       "            </div>\n",
       "        <div class='ppy-pipeline-arrow'><svg class='icon ppy-arrow-right'><use xlink:href='#arrow-right'></use></svg></div>\n",
       "            <div id=\"ppy-pipeline-iyk-step-3\" title=\"Click to see more information\"\n",
       "                class=\"ppy-pipeline ppy-pipeline-iyk\" onclick=\"showParameters('step-3', 'iyk')\">\n",
       "                <h2 class=\"ppy-h2\">Sharpen</h2>\n",
       "                <h3 class=\"ppy-h3\">Type: Colour</h2>\n",
       "            </div>\n",
       "        \n",
       "    </div>\n",
       "    <div id=\"ppy-pipeline-parameters\" class=\"ppy-pipeline-parameters-all\">\n",
       "            <div id=\"ppy-pipeline-parameters-iyk-step-0\"\n",
       "                class=\"ppy-pipeline-parameters ppy-pipeline-parameters-iyk\"\n",
       "                style=\"display: none;\">\n",
       "                <h4 class=\"ppy-h4\">Parameters:</h4>\n",
       "                <pre class=\"ppy-json-block\"><span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"colour_correction\"</span>\n",
       "<span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"colour\"</span>\n",
       "<span class=\"ppy-json-key\">test</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">params</span>:\n",
       "  <span class=\"ppy-json-key\">method</span>: <span class=\"ppy-json-string\">\"opencv\"</span>\n",
       "  <span class=\"ppy-json-key\">invert_colours</span>: <span class=\"ppy-json-number\">False</span>\n",
       "  <span class=\"ppy-json-key\">raise_error</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">mode</span>: <span class=\"ppy-json-string\">\"grayscale\"</span></pre>\n",
       "            </div>\n",
       "        \n",
       "            <div id=\"ppy-pipeline-parameters-iyk-step-1\"\n",
       "                class=\"ppy-pipeline-parameters ppy-pipeline-parameters-iyk\"\n",
       "                style=\"display: none;\">\n",
       "                <h4 class=\"ppy-h4\">Parameters:</h4>\n",
       "                <pre class=\"ppy-json-block\"><span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"datetime\"</span>\n",
       "<span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"sampling\"</span>\n",
       "<span class=\"ppy-json-key\">test</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">params</span>:\n",
       "  <span class=\"ppy-json-key\">min</span>: <span class=\"ppy-json-string\">\"2016-05-11 04:14:00\"</span>\n",
       "  <span class=\"ppy-json-key\">max</span>: <span class=\"ppy-json-string\">\"2016-05-11 09:27:00\"</span>\n",
       "  <span class=\"ppy-json-key\">raise_error</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">mode</span>: <span class=\"ppy-json-string\">\"datetime\"</span></pre>\n",
       "            </div>\n",
       "        \n",
       "            <div id=\"ppy-pipeline-parameters-iyk-step-2\"\n",
       "                class=\"ppy-pipeline-parameters ppy-pipeline-parameters-iyk\"\n",
       "                style=\"display: none;\">\n",
       "                <h4 class=\"ppy-h4\">Parameters:</h4>\n",
       "                <pre class=\"ppy-json-block\"><span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"colour_correction\"</span>\n",
       "<span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"colour\"</span>\n",
       "<span class=\"ppy-json-key\">test</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">params</span>:\n",
       "  <span class=\"ppy-json-key\">sigma</span>: <span class=\"ppy-json-number\">1.0</span>\n",
       "  <span class=\"ppy-json-key\">raise_error</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">mode</span>: <span class=\"ppy-json-string\">\"gaussian_blur\"</span></pre>\n",
       "            </div>\n",
       "        \n",
       "            <div id=\"ppy-pipeline-parameters-iyk-step-3\"\n",
       "                class=\"ppy-pipeline-parameters ppy-pipeline-parameters-iyk\"\n",
       "                style=\"display: none;\">\n",
       "                <h4 class=\"ppy-h4\">Parameters:</h4>\n",
       "                <pre class=\"ppy-json-block\"><span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"sharpen\"</span>\n",
       "<span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"colour\"</span>\n",
       "<span class=\"ppy-json-key\">test</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">params</span>:\n",
       "  <span class=\"ppy-json-key\">alpha</span>: <span class=\"ppy-json-number\">1.5</span>\n",
       "  <span class=\"ppy-json-key\">beta</span>: <span class=\"ppy-json-number\">-0.5</span>\n",
       "  <span class=\"ppy-json-key\">raise_error</span>: <span class=\"ppy-json-number\">False</span>\n",
       "<span class=\"ppy-json-key\">mode</span>: <span class=\"ppy-json-string\">\"sharpen\"</span></pre>\n",
       "            </div>\n",
       "        \n",
       "        <div id=\"ppy-pipeline-parameters-iyk-general\" class=\"ppy-pipeline-parameters ppy-pipeline-parameters-iyk\"\n",
       "            style=\"display: none;\">\n",
       "            <h4 class=\"ppy-h4\">Parameters:</h4>\n",
       "            <pre class=\"ppy-json-block\"><span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"raw\"</span>\n",
       "<span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"open\"</span>\n",
       "<span class=\"ppy-json-key\">input_path</span>: <span class=\"ppy-json-string\">\"https://paidiver-o.s3-ext.jc.rl.ac.uk/paidiverpy/data/lazy_load_benthic/\"</span>\n",
       "<span class=\"ppy-json-key\">output_path</span>: <span class=\"ppy-json-string\">\"output\"</span>\n",
       "<span class=\"ppy-json-key\">metadata_path</span>: <span class=\"ppy-json-string\">\"https://paidiver-o.s3-ext.jc.rl.ac.uk/paidiverpy/data/lazy_load_benthic/metadata_ifdo_hf.json\"</span>\n",
       "<span class=\"ppy-json-key\">metadata_type</span>: <span class=\"ppy-json-string\">\"IFDO\"</span>\n",
       "<span class=\"ppy-json-key\">image_open_args</span>: <span class=\"ppy-json-string\">\"JPG\"</span>\n",
       "<span class=\"ppy-json-key\">n_jobs</span>: <span class=\"ppy-json-number\">8</span>\n",
       "<span class=\"ppy-json-key\">track_changes</span>: <span class=\"ppy-json-number\">True</span>\n",
       "<span class=\"ppy-json-key\">sampling</span>:\n",
       "  - <span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"sampling\"</span>\n",
       "    <span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"sampling\"</span>\n",
       "    <span class=\"ppy-json-key\">test</span>: <span class=\"ppy-json-number\">False</span>\n",
       "    <span class=\"ppy-json-key\">params</span>:\n",
       "      <span class=\"ppy-json-key\">value</span>: <span class=\"ppy-json-number\">0.1</span>\n",
       "      <span class=\"ppy-json-key\">raise_error</span>: <span class=\"ppy-json-number\">False</span>\n",
       "    <span class=\"ppy-json-key\">mode</span>: <span class=\"ppy-json-string\">\"percent\"</span>\n",
       "  - <span class=\"ppy-json-key\">name</span>: <span class=\"ppy-json-string\">\"sampling\"</span>\n",
       "    <span class=\"ppy-json-key\">step_name</span>: <span class=\"ppy-json-string\">\"sampling\"</span>\n",
       "    <span class=\"ppy-json-key\">test</span>: <span class=\"ppy-json-number\">False</span>\n",
       "    <span class=\"ppy-json-key\">params</span>:\n",
       "      <span class=\"ppy-json-key\">value</span>: <span class=\"ppy-json-number\">3</span>\n",
       "      <span class=\"ppy-json-key\">raise_error</span>: <span class=\"ppy-json-number\">False</span>\n",
       "    <span class=\"ppy-json-key\">mode</span>: <span class=\"ppy-json-string\">\"fixed\"</span></pre>\n",
       "        </div>\n",
       "    </div>\n",
       "    </div></div>"
      ],
      "text/plain": [
       "<paidiverpy.pipeline.pipeline.Pipeline at 0x739c647944f0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# See the pipeline steps. Click in a step to see more information about it\n",
    "pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "0131f808-2a6a-40e0-beb7-41726f5c638a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:37 | Processing images using 8 cores\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Processing images using 8 cores\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:37 | Running step 0: raw - OpenLayer\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Running step 0: raw - OpenLayer\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[########################################] | 100% Completed | 3.67 ss\n",
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:42 | Step 0 completed\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Step 0 completed\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:42 | Running step 1: colour_correction - ColourLayer\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Running step 1: colour_correction - ColourLayer\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:42 | Step 1 completed\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Step 1 completed\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:42 | Running step 2: datetime - SamplingLayer\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Running step 2: datetime - SamplingLayer\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:42 | Number of images before the sampling step: 3. Total number of images after: 3\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Number of images before the sampling step: 3. Total number of images after: 3\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:43 | Step 2 completed\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Step 2 completed\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:43 | Running step 3: colour_correction - ColourLayer\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Running step 3: colour_correction - ColourLayer\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:43 | Step 3 completed\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Step 3 completed\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:43 | Running step 4: sharpen - ColourLayer\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Running step 4: sharpen - ColourLayer\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[92m☁ paidiverpy ☁  |       INFO | 2025-09-11 16:52:46 | Step 4 completed\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:paidiverpy:Step 4 completed\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[########################################] | 100% Completed | 6.07 sms\n"
     ]
    }
   ],
   "source": [
    "# Run the pipeline\n",
    "pipeline.run()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "6de28ce6-b4cc-4c0c-9b0e-89060f5bbaef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
       "<defs>\n",
       "<symbol id=\"arrow-right\" viewBox=\"0 0 330 330\">\n",
       "  <path id=\"XMLID_222_\" d=\"M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001\n",
       "\tc-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213\n",
       "\tC82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606\n",
       "\tC255,161.018,253.42,157.202,250.606,154.389z\"/>\n",
       "</defs>\n",
       "</svg>\n",
       "<style>/* CSS stylesheet for displaying Paidiverpy objects in jupyterlab.\n",
       " *\n",
       " */\n",
       "\n",
       ":root {\n",
       "  --ppy-font-color: var(--jp-content-font-color, rgba(0, 0, 0, 1));\n",
       "  --ppy-font-color-brown: var(--jp-content-font-color-brown, brown);\n",
       "  --ppy-font-color-olive: var(--jp-content-font-color-olive, olive);\n",
       "  --ppy-font-color-teal: var(--jp-content-font-color-teal, teal);\n",
       "  --ppy-font-color-blue: var(--jp-content-font-color-blue, blue);\n",
       "  --ppy-font-color-gray: var(--jp-content-font-color-gray, gray);\n",
       "  --ppy-border-color: var(--jp-border-color2, #e0e0e0);\n",
       "  --ppy-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
       "  --ppy-background-color: var(--jp-layout-color, white);\n",
       "  --ppy-background-color2: var(--jp-layout-color3, rgba(212, 212, 212, 0.15));\n",
       "}\n",
       "\n",
       "\n",
       "html[theme=\"dark\"],\n",
       "html[data-theme=\"dark\"],\n",
       "body[data-theme=\"dark\"],\n",
       "body.vscode-dark {\n",
       "  --ppy-font-color: rgba(255, 255, 255, 1);\n",
       "  --ppy-font-color-brown: brown;\n",
       "  --ppy-font-color-olive: olive;\n",
       "  --ppy-font-color-teal: teal;\n",
       "  --ppy-font-color-blue: blue;\n",
       "  --ppy-font-color-gray: gray;\n",
       "  --ppy-border-color: #1f1f1f;\n",
       "  --ppy-disabled-color: #515151;\n",
       "  --ppy-background-color: #111111;\n",
       "}\n",
       "\n",
       ".ppy-background-color {\n",
       "  background-color: var(--ppy-background-color) !important;\n",
       "}\n",
       "\n",
       ".ppy-font-color-brown {\n",
       "  color: var(--ppy-font-color-brown) !important;\n",
       "}\n",
       "\n",
       ".ppy-font-color {\n",
       "  color: var(--ppy-font-color) !important;\n",
       "}\n",
       ".ppy-h2 {\n",
       "  font-size: 20px !important;\n",
       "}\n",
       ".ppy-h3 {\n",
       "  font-size: 13px !important;\n",
       "}\n",
       ".ppy-p {\n",
       "  font-size: 10px;\n",
       "}\n",
       ".ppy-p-error {\n",
       "  color: var(--ppy-font-color-brown);\n",
       "  font-weight: bold;\n",
       "  display: block;\n",
       "}\n",
       "\n",
       ".ppy-text-repr-fallback {\n",
       "  /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".ppy-pipeline-wrap{\n",
       "  display: flex;\n",
       "  flex-wrap: wrap;\n",
       "  align-items: center;\n",
       "}\n",
       "\n",
       ".ppy-pipeline {\n",
       "  float:left;\n",
       "  cursor: pointer;\n",
       "  padding: 10px;\n",
       "  width: max-content;\n",
       "  height: 150px;\n",
       "  margin: 10px;\n",
       "  border: 1px solid #000;\n",
       "  text-align: center;\n",
       "  /* line-height: 80px; */\n",
       "}\n",
       "\n",
       ".ppy-pipeline-clear-fix {\n",
       "  clear: both;\n",
       "}\n",
       "\n",
       ".ppy-pipeline-parameters-all {\n",
       "  padding: 10px;\n",
       "  margin: 10px;\n",
       "}\n",
       "\n",
       ".ppy-images-step-header {\n",
       "  cursor: pointer;\n",
       "  font-weight: bold;\n",
       "  margin-top: 10px;\n",
       "  margin-bottom: 5px;\n",
       "}\n",
       ".ppy-images-metadata {\n",
       "  margin-left: 20px;\n",
       "  margin-bottom: 10px;\n",
       "}\n",
       ".ppy-images {\n",
       "  display: flex;\n",
       "  flex-wrap: wrap;\n",
       "  gap: 10px;\n",
       "  margin-left: 20px;\n",
       "}\n",
       "\n",
       ".ppy-show-more-button, .ppy-hide-button {\n",
       "  margin-left: 20px;\n",
       "  background-color: #007bff;\n",
       "  color: white;\n",
       "  border: none;\n",
       "  padding: 5px 10px;\n",
       "  cursor: pointer;\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-pipeline-arrow {\n",
       "  float:left;\n",
       "  width: 50px;\n",
       "  height: 80px;\n",
       "  margin: 10px;\n",
       "  text-align: center;\n",
       "  line-height: 80px;\n",
       "}\n",
       "\n",
       ".ppy-images-img{\n",
       "  display: block;\n",
       "  max-width: 200px;\n",
       "  margin: 10px;\n",
       "}\n",
       "\n",
       ".ppy-images-toggle-arrow {\n",
       "  cursor: pointer;\n",
       "  margin-left: 5px;\n",
       "}\n",
       "\n",
       ".ppy-images-image-p {\n",
       "  cursor: pointer;\n",
       "}\n",
       "\n",
       ".ppy-arrow-right {\n",
       "  display: inline-block;\n",
       "  vertical-align: middle;\n",
       "  width: 1em;\n",
       "  height: 1.5em !important;\n",
       "  stroke-width: 0;\n",
       "  stroke: currentColor;\n",
       "  fill: currentColor;\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-json-block {\n",
       "  font-family: monospace;\n",
       "  background: var(--ppy-background-color);\n",
       "  padding: 1em;\n",
       "  border-radius: 6px;\n",
       "}\n",
       ".ppy-json-key {\n",
       "  color: var(--ppy-font-color-brown);\n",
       "}\n",
       ".ppy-json-string {\n",
       "  color: var(--ppy-font-color-olive);\n",
       "}\n",
       ".ppy-json-number {\n",
       "  color: var(--ppy-font-color-teal);\n",
       "}\n",
       ".ppy-json-bool {\n",
       "  color: var(--ppy-font-color-blue);\n",
       "}\n",
       ".ppy-json-null {\n",
       "  color: var(--ppy-font-color-gray);\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-pn-title-0 {\n",
       "  font-size: 30px;\n",
       "}\n",
       "\n",
       ".ppy-pn-title-1 {\n",
       "  font-size: 20px;\n",
       "}\n",
       ".ppy-pn-title-2 {\n",
       "  font-size: 17px;\n",
       "}\n",
       ".ppy-pn-title-3 {\n",
       "  font-size: 14px;\n",
       "}\n",
       ".ppy-pn-title-4 {\n",
       "  font-size: 12px;\n",
       "}\n",
       "\n",
       ".ppy-pn-bold {\n",
       "  font-weight: bold;\n",
       "}\n",
       ".ppy-pn-italic {\n",
       "  font-style: italic;\n",
       "}\n",
       ".ppy-pn-description {\n",
       "  font-size: 14px;\n",
       "  margin-bottom: 1px;\n",
       "}\n",
       "\n",
       ".bk-root {\n",
       "  width: 100% !important;\n",
       "  max-width: 100% !important;\n",
       "  box-sizing: border-box;\n",
       "}\n",
       "\n",
       "input, .bk-input, .bk-input-group {\n",
       "  margin-top: 0px;\n",
       "  margin-bottom: 3px;\n",
       "  padding-top: 0px;\n",
       "  padding-bottom: 0px;\n",
       "}\n",
       "\n",
       ".ppy-pn-header-button .bk-btn {\n",
       "  background: none !important;\n",
       "  border: none !important;\n",
       "  font-weight: bold;\n",
       "  font-size: 16px;\n",
       "  text-align: left;\n",
       "  padding-left: 0;\n",
       "  cursor: pointer;\n",
       "  box-shadow: none !important;\n",
       "  color: black;\n",
       "}\n",
       "\n",
       ".ppy-pn-danger-modal{\n",
       "  border: 2px solid red;\n",
       "  border-radius: 10px;\n",
       "  box-shadow: 0px 0px 10px rgba(255, 0, 0, 0.5);\n",
       "}\n",
       "\n",
       ".ppy-pn-config-form{\n",
       "  padding: 10px;\n",
       "  margin-top: 10px;\n",
       "  margin-bottom: 10px;\n",
       "  background-color: var(--ppy-background-color2);\n",
       "  border-radius: 5px;\n",
       "  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);\n",
       "}\n",
       "\n",
       "\n",
       ".ppy-pn-align-right {\n",
       "  display: flex;\n",
       "  justify-content: flex-end;\n",
       "}\n",
       "</style><script>function toggleMetadata(stepIndex, randomId) {\n",
       "  var metadata = document.getElementById(\"ppy-images-metadata-\" + randomId + \"-\" + stepIndex);\n",
       "  var arrow = document.getElementById(\"ppy-images-arrow-\" + randomId + \"-\" + stepIndex);\n",
       "  if (metadata.style.display === \"none\") {\n",
       "      metadata.style.display = \"block\";\n",
       "      arrow.innerHTML = \"▼\";\n",
       "      arrow.classList.remove(\"ppy-font-color\");\n",
       "      arrow.classList.add(\"ppy-font-color-brown\");\n",
       "  } else {\n",
       "      metadata.style.display = \"none\";\n",
       "      arrow.innerHTML = \"►\";\n",
       "      arrow.classList.remove(\"ppy-font-color-brown\");\n",
       "      arrow.classList.add(\"ppy-font-color\");\n",
       "  }\n",
       "}\n",
       "function toggleImage(imageId, randomId) {\n",
       "  var img = document.getElementById(imageId);\n",
       "  var arrow = document.getElementById(\"ppy-images-arrow-\" + randomId + \"-\" + imageId);\n",
       "  if (img.style.display === \"none\") {\n",
       "      img.style.display = \"block\";\n",
       "      arrow.innerHTML = \"▼\";\n",
       "      arrow.classList.remove(\"ppy-font-color\");\n",
       "      arrow.classList.add(\"ppy-font-color-brown\");\n",
       "  } else {\n",
       "      img.style.display = \"none\";\n",
       "      arrow.innerHTML = \"►\";\n",
       "      arrow.classList.remove(\"ppy-font-color-brown\");\n",
       "      arrow.classList.add(\"ppy-font-color\");\n",
       "  }\n",
       "}\n",
       "function showMore(stepIndex) {\n",
       "  var moreImages = document.getElementById(\"ppy-more-images-\" + stepIndex);\n",
       "  var showMoreButton = document.getElementById(\"ppy-show-more-button-\" + stepIndex);\n",
       "  var hideButton = document.getElementById(\"ppy-hide-button-\" + stepIndex);\n",
       "  moreImages.style.display = \"flex\";\n",
       "  showMoreButton.style.display = \"none\";\n",
       "  hideButton.style.display = \"inline-block\";\n",
       "}\n",
       "function hide(stepIndex) {\n",
       "  var moreImages = document.getElementById(\"ppy-more-images-\" + stepIndex);\n",
       "  var showMoreButton = document.getElementById(\"ppy-show-more-button-\" + stepIndex);\n",
       "  var hideButton = document.getElementById(\"ppy-hide-button-\" + stepIndex);\n",
       "  moreImages.style.display = \"none\";\n",
       "  showMoreButton.style.display = \"inline-block\";\n",
       "  hideButton.style.display = \"none\";\n",
       "}\n",
       "\n",
       "\n",
       "function showParameters(id, randomId) {\n",
       "  var currentTarget = document.getElementById('ppy-pipeline-' + randomId + '-' + id);\n",
       "  var square = document.getElementsByClassName('ppy-pipeline-' + randomId);\n",
       "  var allParams = document.getElementsByClassName('ppy-pipeline-parameters-' + randomId);\n",
       "  var selectedParams = document.getElementById('ppy-pipeline-parameters-' + randomId + '-' + id);\n",
       "  var idWasVisible = false;\n",
       "  if (selectedParams) {\n",
       "      var idWasVisible = selectedParams.style.display === 'block';\n",
       "  }\n",
       "  for (var i = 0; i < square.length; i++) {\n",
       "      square[i].classList.remove('ppy-font-color-brown');\n",
       "      square[i].classList.add('ppy-font-color');\n",
       "  }\n",
       "  for (var i = 0; i < allParams.length; i++) {\n",
       "      allParams[i].style.display = 'none';\n",
       "  }\n",
       "  // Show the selected parameter section\n",
       "  if (selectedParams) {\n",
       "      if (idWasVisible) {\n",
       "          selectedParams.style.display = 'none';\n",
       "          currentTarget.classList.remove('ppy-font-color-brown');\n",
       "          currentTarget.classList.add('ppy-font-color');\n",
       "      } else {\n",
       "          selectedParams.style.display = 'block';\n",
       "          currentTarget.classList.remove('ppy-font-color');\n",
       "          currentTarget.classList.add('ppy-font-color-brown');\n",
       "      }\n",
       "  }\n",
       "}\n",
       "\n",
       "hljs.highlightAll();\n",
       "</script><link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css\"><script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js\"></script><script>hljs.highlightAll();</script><pre class='ppy-text-repr-fallback'>&lt;paidiverpy.images_layer.ImagesLayer object at 0x739c64500700&gt;</pre><div>\n",
       "            <div class='ppy-h2 ppy-images-step-header' onclick='toggleMetadata(0, \"spx\")'>\n",
       "                Step 0: raw\n",
       "                <span id='ppy-images-arrow-spx-0'\n",
       "                    class='ppy-images-toggle-arrow ppy-font-color-brown'>▼\n",
       "                </span>\n",
       "            </div>\n",
       "            <div id='ppy-images-metadata-spx-0' class='ppy-images-metadata' style='display:block;'><div class='ppy-images'>\n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-0-0\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987744962270.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-0-0' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-0-0'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-0-1\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745112222.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-0-1' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-0-1'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-0-2\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745365734.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-0-2' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-0-2'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAD6ABkDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzTSBs0q3GP4c/rV5sYqtZLssbdfSNf5VOeKwe5oinqD7LG4P/AEzP8q4quv1htumz9sjH61yFaQ2IkdjFrGn7FUXAGABypFTDULNx8t1F/wB9Vg6RpEOoWskkrOpD7RtI9KuN4Yh/huXH1UGk0rjTYutzxtpzBJFbcwHysDXM1uyeGnUErdIQPVSKxfL/ANoVUbdBM6rw+u3S1PTc5NapIx71n6GFfS4VQhiM7gOxznFaDIw/hOR14rOW5S2K1y+y3kb0Un9K4au11FZDZThUYsUIAAri9p9DVwFI7HwsuzTN/wDekJ/kK2XbqcDnuKyvD0kY0iKMSIWGSyg8jJPWtNnGOGGazluUtipdPsglf+6hP6VwOT612+pMTYThPmcoQAOc1xnkTf8APJ/++TWkNiGb/hlcQXD+rAf5/Otxj8uTWV4eXbppb+9IT/KtQ5xUS3KWxXc4HPauX+2n+8a6S7YJbyseoQn9K42rihM1rHXGsrVYPIV1Uk53YNXR4khYYe3cZ9GBrnKKfKhXN681i2uLOWNN4dlwARWDRRTSsK4UUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKANXQ9Oh1GeVZiwVFz8pxzmtZ/CtsR8txKp9wDUPhVDtuZPdR/OukJOKylJp6FJaHLyeF2Ayl0D/vJj+tZH2P/AKapXa3MgWN29ATXB+a/rVRbYnY6rwum3T5H/vSH+QrcbpWT4a/5BC/77Vqt1rOW5S2M7Um2WFw3ohriK7XWv+QXcf7o/nXFVpDYln//2Q=='\n",
       "                class='ppy-images-img'/></div>\n",
       "            </div></div>\n",
       "            <div class='ppy-h2 ppy-images-step-header' onclick='toggleMetadata(1, \"spx\")'>\n",
       "                Step 1: colour_correction\n",
       "                <span id='ppy-images-arrow-spx-1'\n",
       "                    class='ppy-images-toggle-arrow ppy-font-color-brown'>▼\n",
       "                </span>\n",
       "            </div>\n",
       "            <div id='ppy-images-metadata-spx-1' class='ppy-images-metadata' style='display:block;'><div class='ppy-images'>\n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-1-0\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987744962270.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-1-0' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-1-0'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-1-1\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745112222.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-1-1' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-1-1'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAD6AD4BAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APEdBQvrEOMZXJ5+lehJDbXFt88MLOePmQHmqTaFa7Tmxtic4yVx/KkfwzpDEZtMZ67XYf1qObwbo/llg1xHj0kH9RVH/hC7aU5guZwg/icAj8PWqc3g5kfal6p/3o8f1rL1TQ5tKiSSSaN1dto25zVrwlAJtXbcCQsRPHbkV3awLGzeVnn0PSnnftG4cbsDnNRS5E21TwMEmm3TNKkduOsjfMf9kdanknCrhewxiqLvnk1zXi2T91ax/wC0x/lSeDARcXcg7Rgfr/8AWrsVkUjGSfenbPnBwcY4OajKhpi5PAHPpTHlVJGYrlioAI7VX3M7HPFMOA+SM/WuV8UvuuoF9EJ/Wr/hDEdldvnBZ1XGM5wP/r10yT+ZMgCjk4I71PNMsbhTkA9OKZIc7sdKquxYEDHSo2bGM9aZkHn8q4/xI2dTA/uxj+tdB4Stt2jyP3eQ9u2BXQ+X5YRUwD646UyZWdQXXLA4yP500/cGD+dQtwSe5qBxls8mo5c+Xx1NcbrTE6rKD/DgfoK6/wALo0ekQZYjzMkf99Hmtd5BHLiRiDzn3qdCGUOuCrdKqTeYXAAwo71C+Tn1qMn0qNo8sGY8jtXD6q+/Vblv+mhH5cV3ekKkOk2KsQC0QI/n/Wrs1sbiVcsRgYBHNWYYxDF5YbPvmo5e+BnjrVJt2TnPWmMCKgIOTk81wVy2+7mb1cn9a6rTPExm8m0+xqFjQDdv9Bj0rcl1uSa1EJgTKg4cHmq0d9sTaYgTjru60kepshwIgwPBGelD6ngY8oA/WozqBIPyDP1qI3pJ5QZPvXKX1kLUBhLvLH0xU2hqTeOfRP6iuiVsqcjFDg4JSoE3CboQ2Oc09xyPWo3yrDsPanYGM9D3xWPrZwYR9T/KjQkzJM2OAAK3iDtPp0phLmNgRg0QuGfDHg0xpttw0eO/HrRgDJIpuCQD0rF1k/v4l9F/rVrQQFgmc/3gK1oySeeR708kDg01QvG0DOetK21jnALdM00j06UyQgKMmue1cg3oAPRBWpoaL/Zzbv4nP8hWooVTxSMQRxzUR4Pt9ak/gOfzpgJIxx0quQZHY5wR09qwNSYtfSZ6jA/StLTHUWiKsil+SUz05rWV0MWN4DEdzUYBHPmKOeaPMTJHmKR35oYoVA3j86YXVcKHGPU1FuUyMwcYNYN8rC7kYg4LcH1qfSB/pEjei/1rWDbsH+VS4O3NQNDkDBpQu1cA5FMdSy1GEdST/Os/Usgxg+5qTSVB84k44ArUVVUDt9KexP4CmAjBIFI3PBJFIT0phJ781laiczKPRataQmYpG/2sVpLHh8nGDSzSCNMD73YUyMBlycc01uKaTgdKaTxyKyL85uPoorS0jItSOxYmrxByeaSWMSc8ggdaYF2KFBPrRj1NMI4NMYZ69ax7w/6U/titjTPlsUz3JP61cByOD3pjOUHIyPWmK5LEE5prfephJU7R0oI4zmsS5ObmT61c0cF7sgk4CHit5UwDSquPmIFIygMCMc03K5IIyfamSINyqBweaaV2nkCszVsBEAUAlj2pNFyJpXAyQv8AWtpW3ISelD8Lw3FMjOeD16gmnMNrZzUBk3cg/TIp+CeuPXg1kasTujH1NT6GvE7fQfzrXOGHFIxIQ8DPbFMjJwdwPHrQ6hyM549KjMIB++QKCwRcLz71kau26aMei/1qzooxbyEjq/8AStZRhOuT70NyBzmmNnP9KFPfrUTnDY9uKaEHf06Vj6q2bwD0UCtLRvksi2OrGr+7d1HFAGWODxSEq2cc4ppIA4xmmsTtJA5pjuSMgYNYWoHN6/tgfpWzpaY0+MHvk/rV5kGMUwKQcZ4pqhSjIv5mkCBEAxzShsDkDPvUbDcOK568ObyU/wC1WhpN5LJPFaEL5eDyBz0zXQLGjZAdgw9ad9l3ZG72NRmxSNdx3fUGhYo5Isljz05pGtI2xncPXBpFtYUGcvg9Mmsq80u2QtKzSZZ/UVU0Jd2o5HZCa6SQMCpXAPQk9qllcxkZOd3daXJli2gnp3HWoihRRsHPcU1ZdxPtTHfp83BNUNYfZaowPBcfyNUNBB+1SsOyY/WunjbcpyPx9af5J8suQNo/SoBdEuFI2gU+R8DrzUbJG/Xg9yKYFjToc+1ZGvODbwqOPmJ/Sjw5Fv8AtLY4AUfzroNgXA6k0s6SKm1WxzyAetNSMOoLYY+nSmzAllHT1pqx7TznHrmmPGuSSMe4rC10kGBeo55/KrPh0lbadl6lgP0rYhZ3k+b86kk3ocr8wqKO4EjMpTn2pSWDbmOBjvTJJCWDjoByKNxIbJ47Guf14j7RCo6BP61f8O/LaEkcGT+grTnuf3jAKAMc0+N/MhVlHy96QtncABmgfMvzHFMdo92zOTSMAFxjg9vSub1w5vwPRBWx4fGLJDjuTk/WtKe2jMjlGJzyRjOKUYRRHjiowAeh/Olxx1qJ4z5u4c96GBzknmuY1dt2oyZ7AD9K29I406HHv/M1rt9+mLyR9KhuOE44pIyTjmpX61G33hXKap/yEpvqP5V//9k='\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-1-2\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745365734.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-1-2' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-1-2'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAD6ABkBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APNNIGzSrcf7Of1q82MVR1ByljcH0jP8q4qu6sk22NuvpGv8qnPFZusNt02ftkY/WuQrsYtY0/Yqi4AwAOQRU39oWTj5bqL/AL6rO1ueNtOYJIrbmA4INczWzpGkQ6haySSu6kPtG0j0q43hiH+G6cfVQaryeGnXJW6QgeqkVi+X/tCuq8Prt0tT03OxrVJ496rXL7IJGz0Un9K4auy0MK+lwqhDEZ3AdjnOK0GRh/CcjrxVLUVkNjOFRixQgACuL2n0Ndj4WXZpe/8AvSk/yFbLt1OBz3FUrp9kEr/3UJ/SuByfWu28PSRjSIoxIhYZLKDyMk9a02cY4YZrN1JibCcJ8zlCABzmuM8ib/nk/wD3ya3/AA0mILh/VgP8/nW4x+XJqs7YGT2rl/trf3q3PDybdNLf3pCf5VqNnFU7ttlvKx7IT+lcbWtY641larB5CuqknO7Bq6PEkLDD27jPowNRXmsW1xZyxpvDsuACKwaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK1dD06LUZ5VmLBUXPynHOa1n8K2xHy3Eqn3ANVZPC7AZS6B/3kx/Wsj7H/ANNUrb8KodtzJ7qP510hJxVW4k2xu3oCa4PzX9a6rwvHt0+R/wC9If5CtxulZupNssLhvRDXEV2fhr/kEL/vmtVutZmtf8gu4/3R/OuKr//Z'\n",
       "                class='ppy-images-img'/></div>\n",
       "            </div></div>\n",
       "            <div class='ppy-h2 ppy-images-step-header' onclick='toggleMetadata(2, \"spx\")'>\n",
       "                Step 2: datetime\n",
       "                <span id='ppy-images-arrow-spx-2'\n",
       "                    class='ppy-images-toggle-arrow ppy-font-color-brown'>▼\n",
       "                </span>\n",
       "            </div>\n",
       "            <div id='ppy-images-metadata-spx-2' class='ppy-images-metadata' style='display:block;'><div class='ppy-images'>\n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-2-0\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987744962270.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-2-0' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-2-0'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-2-1\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745112222.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-2-1' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-2-1'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-2-2\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745365734.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-2-2' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-2-2'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAD6ABkBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APNNIGzSrcf7Of1q82MVR1ByljcH0jP8q4qu6sk22NuvpGv8qnPFZusNt02ftkY/WuQrsYtY0/Yqi4AwAOQRU39oWTj5bqL/AL6rO1ueNtOYJIrbmA4INczWzpGkQ6haySSu6kPtG0j0q43hiH+G6cfVQaryeGnXJW6QgeqkVi+X/tCuq8Prt0tT03OxrVJ496rXL7IJGz0Un9K4auy0MK+lwqhDEZ3AdjnOK0GRh/CcjrxVLUVkNjOFRixQgACuL2n0Ndj4WXZpe/8AvSk/yFbLt1OBz3FUrp9kEr/3UJ/SuByfWu28PSRjSIoxIhYZLKDyMk9a02cY4YZrN1JibCcJ8zlCABzmuM8ib/nk/wD3ya3/AA0mILh/VgP8/nW4x+XJqs7YGT2rl/trf3q3PDybdNLf3pCf5VqNnFU7ttlvKx7IT+lcbWtY641larB5CuqknO7Bq6PEkLDD27jPowNRXmsW1xZyxpvDsuACKwaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK1dD06LUZ5VmLBUXPynHOa1n8K2xHy3Eqn3ANVZPC7AZS6B/3kx/Wsj7H/ANNUrb8KodtzJ7qP510hJxVW4k2xu3oCa4PzX9a6rwvHt0+R/wC9If5CtxulZupNssLhvRDXEV2fhr/kEL/vmtVutZmtf8gu4/3R/OuKr//Z'\n",
       "                class='ppy-images-img'/></div>\n",
       "            </div></div>\n",
       "            <div class='ppy-h2 ppy-images-step-header' onclick='toggleMetadata(3, \"spx\")'>\n",
       "                Step 3: colour_correction\n",
       "                <span id='ppy-images-arrow-spx-3'\n",
       "                    class='ppy-images-toggle-arrow ppy-font-color-brown'>▼\n",
       "                </span>\n",
       "            </div>\n",
       "            <div id='ppy-images-metadata-spx-3' class='ppy-images-metadata' style='display:block;'><div class='ppy-images'>\n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-3-0\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987744962270.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-3-0' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-3-0'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-3-1\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745112222.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-3-1' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-3-1'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-3-2\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745365734.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-3-2' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-3-2'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAD6ABkBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APNNIGzSrcf7Of1q82MVR1ByljcH0jP8q4qu6sk22NuvpGv8qnPFZusNt02ftkY/WuQrsYtY0/Yqi4AwAOQRU39oWTj5bqL/AL6rO1ueNtOYJIrbmA+Ug1zNbOkaRDqFrJJK7qQ+0bSPSrjeGIf4bpx9VBqvJ4adclbpCB6qRWL5f+0K6rw+u3S1PTc7GtUnj3qtcvsgkbPRSf0rhq7LQwr6XCqEMRncB2Oa0GRh/CcjrxVLUVkNjOFRixQgACuL2n0Ndj4WXZpe/wDvSk/yFbLt1OBz3FUrp9kEr/3UJ/SuByfWu28PSRjSIoxIhYZLKDyMk9a02cY+8M1m6kxNhOE+ZyhAA5zXGeRN/wA8n/75Nb/hpMQXD+rAf5/Otxj8uTVZ2wMntXL/AG1v71bnh5dumlv70hP8q1Gziqd22y3lY9kJ/SuNrWsdcaytVg8hXVSTndg1dHiSFhh7dxn0YGorzWLa4s5Y03h2XABFYNFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFauh6dFqM8qzFgqLn5TjnNaz+FbYj5biVT7gGqsnhdgMpdA/wC8mP61kfY/+mqVt+FUO25k91H866Qk4qrcSbY3b0BNcH5r+tdV4Xj26fI/96Q/yFbjdKzdSbZYXDDshriK7Pw1/wAghf8AfNardazNa/5Bdx/uj+dcVX//2Q=='\n",
       "                class='ppy-images-img'/></div>\n",
       "            </div></div>\n",
       "            <div class='ppy-h2 ppy-images-step-header' onclick='toggleMetadata(4, \"spx\")'>\n",
       "                Step 4: sharpen\n",
       "                <span id='ppy-images-arrow-spx-4'\n",
       "                    class='ppy-images-toggle-arrow ppy-font-color-brown'>▼\n",
       "                </span>\n",
       "            </div>\n",
       "            <div id='ppy-images-metadata-spx-4' class='ppy-images-metadata' style='display:block;'><div class='ppy-images'>\n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-4-0\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987744962270.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-4-0' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-4-0'\n",
       "                src='data:image/jpeg;base64,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'\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-4-1\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745112222.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-4-1' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-4-1'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAD6AD4BAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APEdBQvrEOMZXJ5+lehRw21xbfPDCznj5kBwapNoVrtObK3JzjJXH8qR/DOkMRm0xn+67D+tRzeDdH8ssGuI8ekg/qKo/wDCF20pzBczhB/E4BH4etU5vBzI+1L1T/vR4/rWXqmhzaXEkkk0bq7bRtzmrXhKATau24EhYieO3Iru1gWNm8rPPoelOO7aNw43YHOailyJdqngYJNNumaVI7cdZG+Y/wCyOtTyThV2r2GMVSd88nrXM+LZP3VrH/tM38qPBgIuLuQdowP1/wDrV2CyLjGSfenbPnBwcY4OaYUDTFyeAOfSmPKqyMxXJKgAjtVfczsc8Uw4Dg4z9a5XxS+66gX0Qn9aveEMR2V2+cFnVcYznA/+vXTpP5kyAKOTgjvU80yxuFOQD7VHI33sdKrOxYEDHAqJmxjPWm5B5/KuP8RtnUwP7sY/rXQeErbdpEj93kPbtgV0Bj8sIqYB6Zx0psys6gupLA4yP500/cGD+dQtwSe5qu4y2etMlyY+O/SuN1pidUlB7AD9BXXeF0MekQZYjzMkf99Hmtd5RHLiRiDk596nQ71Drgq3Sqk/mFxgYUd6hfJz60wn0qJo8sGY8jtXEaq+/Vblv+mhH5V3WkKkOlWKsQC0QI/n/Wrs1s1xKuWIwMAjmrMMYhi8sNn3zUcvU4GRjrVNt2TyfSmMCKgIOTk81wVy2+7mb1cn9a6rTPEpm8m0+xqFjQDdv9Bj0rcm1uSa1EJgQFQcODzVaO+2JtMYJxyd3Wkj1NkOBEGB4Iz0obU8DHlAH61EdQJBwgz9ajN6SeUGT71yl9Zi1wwkLlj6YqbQ1zeOfRP6iuiU5U5GKRwcEpUKbhN0IbHOac45HrTHyrDsKdgYz0PesbWzgwj6n+VLoSZkmbHAAFbpBKn06U0s5RgRg0kDhnwx4NMabbcNHjjPHrRgDJI70mGIB+79axdZP7+JfRf61Z0LCwTOf7wFa8ZJPPIp+QOopiheNoGc9ac20nOAW6bqYR1x0pkhAUEnNc/q5BvQAeiCtTQ0X+zm3dGc/wAhWmoVelIxBHHNRHg+31qX+A5qMEnjjpVc5kdjnkdPasDUWLX0meowP0rT0x1FoqLIpfklc+9aquhixvAYjuajAIH+sUc80pkTJHmKR35pGKFQN4/Oml1XCh+PU1DuUyMwcYNYN8rC6kYg4LcH1qxpI/0iRvRP61rBt2Dx+FS4O2q7Q5xg0oXauByPemupZaiCOpJ/nVDUcgxg+5qTSVDGYk44ArUVVUDt9KexP4CowRgkCkbnqSKQnpTGJ71l6iczKPRataQmYpG/2sVpKmHycYNLNII0wOW7Co4wGXJxzSNTScDpTCfWsm+Obj6AVpaRkWxHYsTV0g5ODSSxiTnkECmBdihQfejHv+dNPQ0wjPXrWPeH/SnrX0z5bFM9yT+tXM5HBprOUHIz71GrksRnNI33qYTtO3tSEcZrFuTm5k+tXNHBe7IJOAh4rdVAoNKq4+YgZpGUBgeOablckEZPtTJEG5VAGDzSFdp5ArM1bARAAAdx7U3RciaVwMkL/WttW3ISelD8LgNxTIzng9eoJpzDa2c4qAyZ5B+mRTsE9cevBrJ1YndGPqam0NeJ2+g/nWwcMOO9NbKoeBntimxk87gePWh1DkZzx6VGYVB+8QKQsEXavPvWRqzbpox6L/WrWijFvIcdX/pWsownXJ96RuQOc0xs0Ke/WonyGx6jikCDv6dKx9VbN2B6KBWlo3yWRbHVjV7dk8jilAy3Ximkqc45xTSQBx1NNYnaSBzTXckZA5rC1A5vX9sD9K2dLT/iXxg98n9avMgxiowpBxnimqFKOi/nQECIBjmlDYHI596jYbhxXPXhzdyn/arQ0m8leeK1IXy8HkDn1rfWONsgOwYetP8Asu7I3exqJrFI13Hd9QaFijkjyWPPvSNaRtjO4fjSLawoOrgHpk1l3ml2ybpS0mWf1FVNCXdqOfRCa6SQMpUrjPQk9qllcxkZOd3daXJmiCgn8R1qEoUUbBz3FNWXcT7U135HzcE1n6w+y1RgeC4/kao6ED9qkYdkx+tdPG25TkZ96d5J8suQNo/SoRdEuFI2gU+R8DOeaiZY368HuRTAsadDn2rJ15wYIVHGWJ/Sjw5Fv+0tjIAUfzrf2BcDqTTpkkVNitjnkA9aYkYcAtgn06U2YEso6evFNWPa3OceuaY8a5LEYz3FYeukgwLnI55/KrHh4lLadl6lh/KtiFneT5vzqSTehyvzCoo7gOzKU59qUkhtzHAx3pskhLBx0HUUbiQ2Tx2Nc/rpHnwqOgT+tX/Dvy2hJHBk/oK0prnEjAKAMc1JG/mQqyj5e9NLZ3KAM0D5l+bimO0e7ZnJpCAFxjg9vSuc1s5vwPRBWx4fGLJDjuTz9a0Z7aMyOUYnPJGM4pRhFEeOKjAB6H86XHHWonjPmbhz3oYHJJPNczq7btRfPYAfpW3pHGnQ49/5mtZvv/hTV5I+lQ3HEfHFNiJIHNSv1pjfeFcpqn/ISm+o/lX/2Q=='\n",
       "                class='ppy-images-img'/></div>\n",
       "            \n",
       "        <div>\n",
       "            <p onclick='toggleImage(\"image-spx-4-2\", \"spx\")' class=\"ppy-images-image-p\" >\n",
       "                Image: M58_10441297_12987745365734.jpg\n",
       "                <span id='ppy-images-arrow-spx-image-spx-4-2' class='ppy-images-toggle-arrow ppy-font-color-brown'>▼</span>\n",
       "            </p>\n",
       "        \n",
       "            <img id='image-spx-4-2'\n",
       "                src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAD6ABkBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APNNIXZpVuPVc/rV1sYqlqDlLG4P/TM/yriq7qyTbY26+ka/yqY8Vm6w+3TZ+2Rj9a5Guxi1jT9iqLgDAA5BFTf2hZuPluov++qztbnjbTmCSK25gODmuZrZ0jSIdQtZJJXdSG2jaR6VcbwxD/DdOB7qDVeTw06glbpCPdSKxfL/ANoV1Xh9dulqem52NapPHvVW5fZBI3opP6Vw9dloYV9LhVCGIzuA7HNaDIw/hOR14qjqKyGynCoxYoQABXGbT6Guw8Lrs0zf/elJz+QrZdvvHA57iqd0+yCV/wC6hP6VwOT612vh6SMaTFGJELDJZQeRknrWmzjHDDP1rO1Ik2E4T5nKEADnmuM8ib/nk/8A3ya3/DS4guH9WA/z+dbjH5cmqztgZPauW+2n+9W54eXbppb+9IT/ACrVbOKp3bbLeVvRCf0rja1rHXGsrVYPIV1Uk53YNXB4jhYYe3cZ9GBqO81i2uLOWNA4dlwARWDRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRWpoenRajPKsxYKi5+U45zWu/hW2I+W4lU+4BqpJ4XYDKXQP8AvJj+tZP2P/pqn61t+FUO25k91H866Mk4qrcybY3b0BNcJ5r+tdV4XTbp8j/3pD/IVuN0rN1JtlhcN6Ia4iuz8Nf8glf981qt1rL1r/kGXH+6P51xdf/Z'\n",
       "                class='ppy-images-img'/></div>\n",
       "            </div></div></div></div>"
      ],
      "text/plain": [
       "<paidiverpy.images_layer.ImagesLayer at 0x739c64500700>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# See the images output\n",
    "pipeline.images"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b9582e0-3202-483e-bdc2-7283a5132af5",
   "metadata": {},
   "source": [
    "## Get files with a private object store with credentials\n",
    "\n",
    "Get files from a private object store. In this case, you need to pass the credentials of the object store as env variables:\n",
    "\n",
    "```\n",
    "OS_SECRET=\n",
    "OS_TOKEN=\n",
    "OS_ENDPOINT=\n",
    "```\n",
    "\n",
    "Normally, in this case, the path starts with \"s3://\", like  in the example below:\n",
    "\n",
    "```yaml\n",
    "general:\n",
    "  input_path: \"s3://paidiverpy/data/lazy_load_benthic/\"\n",
    "  output_path: \"s3://paidiverpy/data/lazy_load_benthic/output2/\"\n",
    "  metadata_path: \"s3://paidiverpy/data/lazy_load_benthic/metadata_ifdo_hf.json\"\n",
    "```\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbd04ee8-f8e8-4c8b-8423-cdb61f9cf4a5",
   "metadata": {},
   "source": [
    "After providing the correct environment variables, you have to update the configuration file `examples/config_files/config_object_store2.yml` with the correct Object store paths. And then, you can try to run this notebook with the commands below:\n",
    "\n",
    "```python\n",
    "pipeline = Pipeline(config_file_path=\"../config_files/config_object_store2.yml\")\n",
    "pipeline.run()\n",
    "pipeline.save_images(image_format=\"png\")\n",
    "```\n",
    "\n",
    "The images will be saved in the object store\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "605cc9cb-6b3e-4306-9eed-6b1b04196886",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
