diff --git a/part2/part2_compression.ipynb b/part2/part2_compression.ipynb
index 1ad207095206a4f03223625d764231db4b6f2429..31388f21496de3565f7faab81b79cf8d3de7961f 100644
--- a/part2/part2_compression.ipynb
+++ b/part2/part2_compression.ipynb
@@ -27,7 +27,7 @@
     "\n",
     "Below you can see an example of a tensor with a (symmetric) dynamic range of $x_{f}$ $[-amax, amax]$ mapped through quantization to a an 8 bit integer, $2^8=256$ discrete values in the interval $[-128, 127]$ (32-bit floating-point can represent ~4B numbers in the interval $[-3.4e38, 3.40e38]$).\n",
     "\n",
-    "<img src=\"images/8-bit-signed-integer-quantization.png\" width=\"800\"/>\n",
+    "<img src=\"https://gitlab.cern.ch/fastmachinelearning/cms_mlatl1t_tutorial/-/raw/master/part2/images/8-bit-signed-integer-quantization.png?ref_type=heads\" width=\"800\"/>\n",
     "\n",
     "Quantization of floating point numbers can be achieved using the quantization operation\n",
     "\n",
@@ -37,7 +37,7 @@
     "\n",
     "On FPGA, we do not use int8 quantization, but fixed-point quantization, bu the idea is similar. Fixed-point representation is a way to express fractions with integers and offers more control over precision and range. We can split the $W$-bits making up an integer (in our case $W=8$) to represent the integer part of a number and the fractional part of the number. We usually reserve 1-bit representing the sign of the digit. The radix splits the remaining $W-1$ bits to $I$ most significant bits representing the integer value and $F$ least significant bits representing the fraction. We write this as $<W,I>$, where $F=W-1-I$.  Here is an example for an unsigned $<8,3>$:\n",
     "\n",
-    "<img src=\"images/fixedpoint.png\" width=\"400\"/>\n",
+    "<img src=\"https://gitlab.cern.ch/fastmachinelearning/cms_mlatl1t_tutorial/-/raw/master/part2/images/fixedpoint.png?ref_type=heads\" width=\"400\"/>\n",
     "\n",
     "\n",
     "This fixed point number corresponds to $2^4\\cdot0+2^3\\cdot0+2^2\\cdot0+2^1\\cdot1+2^0\\cdot0+2^{-1}\\cdot1+2^{-2}\\cdot1+2^{-3}\\cdot0=2.75$.\n",
@@ -250,7 +250,7 @@
     "Code for how to do this can be found [here](https://github.com/thesps/keras-training/blob/qkeras/train/train_scan_models.py#L16), and is illustrated below.\n",
     "For binary and ternary quantization, we use the special ```binary(alpha=1.0)(x)``` and ```ternary(alpha=1.0)(x)``` quantizers. \n",
     "\n",
-    "<img src=\"images/quant_scan.png\" width=\"400\"/>\n",
+    "<img src=\"https://gitlab.cern.ch/fastmachinelearning/cms_mlatl1t_tutorial/-/raw/master/part2/images/quant_scan.png?ref_type=heads\" width=\"400\"/>\n",
     "\n",
     "- Another thing you can do is to use our library for automatic quantization, [AutoQKeras](https://github.com/google/qkeras/blob/master/notebook/AutoQKeras.ipynb), to find the optimal quantization for each layer. This runs hyperparameter optimisation over quantizers/nodes/filters simultenously. An example can be found at the end of [this notebook](https://github.com/fastmachinelearning/hls4ml-tutorial/blob/main/part6_cnns.ipynb) \"Bonus exercise: Automatic quantization with AutoQKeras\"."
    ]
@@ -566,7 +566,7 @@
     "\n",
     "# Generating firmware with\n",
     "\n",
-    "<img src=\"images/hls4ml_logo.png\" width=\"400\"/>\n",
+    "<img src=\"https://gitlab.cern.ch/fastmachinelearning/cms_mlatl1t_tutorial/-/raw/master/part2/images/hls4ml_logo.png?ref_type=heads\" width=\"400\"/>\n",
     "\n",
     "Time to translate this model into HLS (which we will integrate in the emulator) and use to generate the vhdl to be integrated in the trigger firmware.\n",
     "hls4ml seamlessly talks to QKeras, making our jobs way easier for us, but there is still some work for us to do to make sure we get good hardware model accuracy. Lets start!\n",
@@ -578,7 +578,7 @@
     "\n",
     "For the final point, have a look at the following diagram:\n",
     "\n",
-    "<img src=\"images/hls4ml_precisions.png\" width=\"400\"/>\n",
+    "<img src=\"https://gitlab.cern.ch/fastmachinelearning/cms_mlatl1t_tutorial/-/raw/master/part2/images/hls4ml_precisions.png?ref_type=heads\" width=\"400\"/>\n",
     "\n",
     "Whereas the $weight$ and $bias$ is set to its optimal value from the QKeras model, the accumulator $accum$ and $result$ is set to some default value that might not be optimal for a given model and might need tuning. Let's do a first attemt and compare the ROC curves:"
    ]