diff --git a/images/index.js b/images/index.js
index 3e1d51d..a38be9d 100644
--- a/images/index.js
+++ b/images/index.js
@@ -63,13 +63,12 @@
     ...defaultSettings,
     ...commandLineArgs(opts),
   };
-  console.log(settings);
   return settings;
 };
 
 const wait = (time) => new Promise((resolve) => setTimeout(resolve, time));
 
-const files = [
+const filesData = [
   {
     path: '/js/main.js',
     filePath: './js/main.js',
@@ -114,8 +113,9 @@
   },
   {
     path: '/lottie.json',
-    // filePath: '../examples/rectangle.json',
-    filePath: './data.json',
+    // filePath: '../examples/image.json',
+    filePath: '../examples/rectangle.json',
+    // filePath: './data.json',
     type: 'json',
   },
   {
@@ -151,12 +151,12 @@
 
 const startServer = async () => {
   const app = express();
-  await Promise.all(files.map(async (file) => {
+  await Promise.all(filesData.map(async (file) => {
     const fileData = await readFile(file.filePath, getEncoding(file.type));
     app.get(file.path, async (req, res) => {
       res.writeHead(200, getContentTypeHeader(file.type));
       // TODO: comment line. Only for live updates.
-      const fileData = await readFile(file.filePath, getEncoding(file.type));
+      // const fileData = await readFile(file.filePath, getEncoding(file.type));
       res.end(fileData);
     });
     return file;
diff --git a/images/js/main.js b/images/js/main.js
index dc7df99..de0bb1c 100644
--- a/images/js/main.js
+++ b/images/js/main.js
@@ -6,7 +6,8 @@
     renderer: 'skottie',
     sampleRate: 1,
     resolution: 1,
-    path: 'lottie.json',
+    // path: 'lottie.json',
+    path: '../examples/image.json',
   };
   searchParams.forEach((value, key) => {
     defaultValues[key] = value;
diff --git a/images/js/screenshot_skottie.js b/images/js/screenshot_skottie.js
index 3662914..1eb75de 100644
--- a/images/js/screenshot_skottie.js
+++ b/images/js/screenshot_skottie.js
@@ -24,7 +24,7 @@
   return animData;
 };
 
-const createSkottiePlayer = async (canvasKit, animationData, canvas) => {
+const createSkottiePlayer = async (canvasKit, animationData, canvas, assets) => {
   // const { devicePixelRatio } = window; // TODO: check if using the pixel ratio is preferred.
   const devicePixelRatio = 1;
   canvas.width = devicePixelRatio * animationData.w; // eslint-disable-line no-param-reassign
@@ -32,7 +32,7 @@
   const surface = canvasKit.MakeCanvasSurface(canvas);
   const skcanvas = surface.getCanvas();
   const animation = canvasKit.MakeManagedAnimation(
-    JSON.stringify(animationData), {}, '',
+    JSON.stringify(animationData), assets, '',
   );
 
   const goToAndStop = (pos) => {
@@ -69,12 +69,31 @@
   }
 };
 
+const getAssets = async (animationData, rendererSettings) => {
+  const assets = {
+
+  };
+  await Promise.all(
+    animationData.assets
+      .filter((asset) => asset.p && asset.u)
+      .map(async (asset) => {
+        const assetPathParts = rendererSettings.path.split('/');
+        assetPathParts.pop();
+        const assetPath = `${assetPathParts.join('/')}/`;
+        const assetData = await fetch(assetPath + asset.u + asset.p);
+        assets[asset.p] = await assetData.arrayBuffer();
+      }),
+  );
+  return assets;
+};
+
 const start = async (rendererSettings) => {
   try {
     const canvasKit = await loadSkottieModule();
     const animationData = await getAnimationData(rendererSettings);
     const canvas = await createCanvas(animationData);
-    const skottiePlayer = await createSkottiePlayer(canvasKit, animationData, canvas);
+    const assets = await getAssets(animationData, rendererSettings);
+    const skottiePlayer = await createSkottiePlayer(canvasKit, animationData, canvas, assets);
     await iterateFrames(skottiePlayer, animationData, canvas, rendererSettings);
   } catch (error) {
     console.log('ERROR'); // eslint-disable-line no-console
