Skip to content

Instantly share code, notes, and snippets.

@DonRichards
Last active December 4, 2025 21:02
Show Gist options
  • Select an option

  • Save DonRichards/331f5ef990cb46f37ed6d55f5de5a040 to your computer and use it in GitHub Desktop.

Select an option

Save DonRichards/331f5ef990cb46f37ed6d55f5de5a040 to your computer and use it in GitHub Desktop.
test.
// Dataverse download handler
console.log("Dataverse download script loaded");
// One-time metadata cache
let dataverseMetadata = null;
// Track if event listener has been added
let clickHandlerAttached = false;
window.initDataverseDownloadLinks = async function () {
console.log("Dataverse download script running");
const DOMAIN = "https://archive.data.jhu.edu";
const DOI = "10.7281/T1/JC64MK";
async function fetchMetadataOnce() {
if (dataverseMetadata) return dataverseMetadata;
console.log("Fetching dataset metadata...");
try {
const apiUrl = `${DOMAIN}/api/datasets/:persistentId?persistentId=doi:${DOI}`;
// Try local proxy first (if running), then fallback to public proxies
const proxies = [
`http://localhost:8001/proxy?url=${encodeURIComponent(apiUrl)}`, // Local proxy
`https://corsproxy.io/?${encodeURIComponent(apiUrl)}`,
`https://api.allorigins.win/raw?url=${encodeURIComponent(apiUrl)}`
];
let response;
let lastError;
for (const proxyUrl of proxies) {
try {
console.log(`Trying proxy: ${proxyUrl.substring(0, 60)}...`);
response = await fetch(proxyUrl, {
headers: {
'Accept': 'application/json',
}
});
if (response.ok) {
const text = await response.text();
// Some proxies wrap the response, try to parse as JSON
let data;
try {
data = JSON.parse(text);
} catch (e) {
// If parsing fails, the proxy might have returned the data directly
// Try to extract JSON from the response
const jsonMatch = text.match(/\{[\s\S]*\}/);
if (jsonMatch) {
data = JSON.parse(jsonMatch[0]);
} else {
throw new Error('Could not parse JSON from proxy response');
}
}
dataverseMetadata = data.data?.latestVersion?.files || [];
console.log(`Fetched ${dataverseMetadata.length} files from Dataverse.`);
return dataverseMetadata;
}
} catch (proxyError) {
console.warn(`Proxy failed:`, proxyError.message);
lastError = proxyError;
continue;
}
}
throw lastError || new Error('All proxy attempts failed');
} catch (err) {
console.error("Failed to fetch metadata:", err);
dataverseMetadata = []; // Prevent retry flood
}
return dataverseMetadata;
}
// Use event delegation to catch all clicks on download links, even dynamically created ones
// This ensures links are intercepted even if they're created after this function runs
// Only attach the listener once
if (!clickHandlerAttached) {
clickHandlerAttached = true;
document.addEventListener('click', async function(e) {
// Handle case where target might be a text node or child element
let link = e.target;
// If target is not an anchor, try to find the closest anchor
if (link.nodeName !== 'A') {
link = link.closest('a');
}
if (!link || link.nodeName !== 'A') return;
const href = link.getAttribute('href');
// Check if this is a download link we should intercept
const isDownloadLink = href === '#' ||
(href && (href.includes('.csv') || href.includes('.zip') || href.includes('.xlsx') || href.includes('/assets/data/')));
if (!isDownloadLink) return;
console.log('Download link clicked:', href, link.textContent);
// Prevent default navigation
e.preventDefault();
e.stopPropagation();
// Extract filename
const filenameSpan = link.querySelector('span');
const filenameText = filenameSpan ? filenameSpan.textContent.trim() : link.textContent.trim();
const filename = filenameText.split(' ')[0];
console.log('Extracted filename:', filename);
if (!filename) {
console.warn('No filename found for link:', link);
return; // Skip if no filename found
}
const originalHTML = link.innerHTML;
link.innerHTML = '<span style="color: black;">Loading...</span>';
link.style.pointerEvents = 'none';
try {
const files = await fetchMetadataOnce();
const file = files.find(f => f.label === filename);
if (!file) {
console.error(`File "${filename}" not found in metadata`);
alert(`File "${filename}" not found in dataset.`);
link.innerHTML = originalHTML;
link.style.pointerEvents = 'auto';
return;
}
const fileId = file.dataFile.id;
const downloadUrl = `${DOMAIN}/api/access/datafile/${fileId}`;
const tempLink = document.createElement('a');
tempLink.href = downloadUrl;
tempLink.download = filename;
tempLink.target = '_blank';
document.body.appendChild(tempLink);
tempLink.click();
document.body.removeChild(tempLink);
} catch (err) {
console.error(`Error downloading file "${filename}":`, err);
alert(`Error downloading file "${filename}": ${err.message}`);
} finally {
link.innerHTML = originalHTML;
link.style.pointerEvents = 'auto';
}
}, true); // Use capture phase to catch before other handlers
}
// Also process existing links to update their hrefs and styling
const downloadLinks = document.querySelectorAll('a[href="#"]:not(.download-processed), a[href*=".csv"]:not(.download-processed), a[href*=".zip"]:not(.download-processed), a[href*=".xlsx"]:not(.download-processed), a[href*="/assets/data/"]:not(.download-processed)');
console.log(`Found ${downloadLinks.length} download links to process`);
downloadLinks.forEach(link => {
// Update href to "#" to prevent navigation if it's a local file path
const originalHref = link.getAttribute('href');
if (originalHref && originalHref !== '#' && (originalHref.startsWith('/') || originalHref.startsWith('./') || originalHref.includes('.csv') || originalHref.includes('.zip') || originalHref.includes('.xlsx'))) {
link.setAttribute('data-original-href', originalHref);
link.href = '#';
}
// Mark as processed
link.classList.add('download-processed');
// Style
const filenameSpan = link.querySelector('span');
if (filenameSpan) {
link.title = "Click to download";
link.style.cursor = "pointer";
}
});
};
// Auto-initialize: Call immediately for static links
if (window.initDataverseDownloadLinks) {
window.initDataverseDownloadLinks();
}
// Also call after dynamic content loads (CSV tables)
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
if (window.initDataverseDownloadLinks) {
window.initDataverseDownloadLinks();
}
}, 1000);
});
// Call after window load as well
window.addEventListener('load', function() {
setTimeout(function() {
if (window.initDataverseDownloadLinks) {
window.initDataverseDownloadLinks();
}
}, 500);
});
<html data-bs-theme="light" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>C3VDv2 : Colonoscopy 3D Video Dataset with Enhanced Realism</title>
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/before-after.compiled.css">
<link rel="stylesheet" href="assets/css/styles.css">
<style></style>
<style></style>
<style id="LLPlatform"></style>
</head>
<body>
<div id="shadowLL">
<div id="shadowLL"></div>
</div>
<div class="modal fade" role="dialog" tabindex="-1" id="video-modal" style="border-color: rgba(0,0,0,0);">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div>
<iframe id="iframeYoutube" width="560" height="315"
src="https://www.youtube.com/embed/l-8SCV6-fUw?modestbranding=1&amp;autohide=1&amp;showinfo=0&amp;controls=0&amp;fs=0"
frameborder="0"></iframe>
</div>
</div>
</div>
</div>
<div class="container" style="margin-top: 0px;">
<div class="row justify-content-center" style="margin-top: 15px;margin-bottom: 15px;">
<div class="col-9">
<h1 class="text-center">C3VDv2 : Colonoscopy 3D Video Dataset with Enhanced Realism</h1>
<div class="row text-center justify-content-center">
<div class="col-4"><a href="https://scholar.google.com/citations?user=FjX3JAEAAAAJ">Mayank V.
Golhar</a></div>
<div class="col-4">Lucas Sebastian Galeano Fretes</div>
<div class="col-4">Loren Ayers</div>
</div>
<div class="row text-center justify-content-center">
<div class="col-4"><a
href="https://scholar.google.com/citations?hl=en&amp;user=a3eRS3sAAAAJ">Venkata S.
Akshintala</a></div>
<div class="col-4"><a href="https://scholar.google.com/citations?user=y8RsSRwAAAAJ&amp;hl=en">Taylor
L. Bobrow</a></div>
<div class="col-4"><a
href="https://scholar.google.com/citations?user=AdhZfSkAAAAJ&amp;hl=en">Nicholas J. Durr</a>
</div>
</div>
<div class="row">
<div class="col">
<p class="text-center" style="margin-bottom: 0px;">Johns Hopkins University</p>
</div>
</div>
<!-- Navigation Menu -->
<nav class="nav justify-content-center mb-4">
<a class="nav-link" href="#whats-new">What's New?</a>
<a class="nav-link" href="#examples">Examples</a>
<a class="nav-link" href="#registered-1">Registered Videos</a>
<a class="nav-link" href="#screening">Screening Videos</a>
<a class="nav-link" href="#models">3D Model Files</a>
<a class="nav-link" href="#calibration-files">Calibration Files</a>
<a class="nav-link" href="#original-c3vd-data">Original C3VD Data</a>
<a class="nav-link" href="#code">Code</a>
<a class="nav-link" href="#citation">Citation</a>
</nav>
</div>
</div>
<!-- <div class="row justify-content-center" style="margin-top: 15px;margin-bottom: 15px;">
<div class="col text-center"><img class="img-fluid" src="assets/img/sample.gif"></div>
</div> -->
<div class="row" style="margin-bottom: 15px;margin-top: 15px;">
<div class="col">
<h2 class="text-center">Abstract</h2>
<p>Computer vision techniques have the potential to improve the diagnostic performance of colonoscopy,
but the lack of 3D colonoscopy datasets for training and validation hinders their development. This
paper introduces <i>C3VDv2</i>, the second version (<i>v2</i>) of the high-definition
<i>C</i>olonoscopy <i>3</i>D <i>V</i>ideo <i>D</i>ataset, featuring enhanced realism designed to
facilitate the quantitative evaluation of 3D colon reconstruction algorithms. 192 video sequences
were captured by imaging 60 unique, high-fidelity silicone colon phantom segments. Ground truth
depth, surface normals, optical flow, occlusion, six-degree-of-freedom pose, coverage maps, and 3D
models are provided for 169 colonoscopy videos. Eight simulated screening colonoscopy videos
acquired by a gastroenterologist are provided with ground truth poses. The dataset includes 15
videos featuring colon deformations for qualitative assessment. C3VDv2 emulates diverse and
challenging scenarios for 3D reconstruction algorithms, including fecal debris, mucous pools, blood,
debris obscuring the colonoscope lens, en-face views, and fast camera motion. The enhanced realism
of C3VDv2 will allow for more robust and representative development and evaluation of 3D
reconstruction algorithms. <br></p>
</div>
</div>
<div class="text-center" style="margin: 20px 0;">
<a href="https://arxiv.org/abs/2506.24074" target="_blank" class="btn btn-outline-primary mx-2">
<i class="bi bi-file-earmark-text"></i> arXiv Paper
</a>
<a href="https://github.com/DurrLab/C3VD" target="_blank" class="btn btn-outline-dark mx-2">
<i class="bi bi-github"></i> Code
</a>
</div>
<hr>
<div class="row" style="margin-bottom: 15px;margin-top: 15px;">
<div class="col">
<h2 class="text-center" id="whats-new">What's New?</h2>
<ul>
<li><strong>Larger dataset</strong> with 8X videos (n=192) and 2X colon geometries compared to C3VD.
</li>
<li><strong>Realistic artifacts</strong> such as fecal debris, mucus pools, blood, foam, and debris
and water on the lens. And instruments like water jets, lens cleaning, and suction.</li>
<li><strong>Challenging scenarios</strong> include fast and less smooth camera motion, en-face to
down-the-barrel transitions, close-up en-face views of textureless surfaces, the scope getting
covered in debris, and lens cleaning. Trajectories such as straight-line in-and-out motions,
loops where the first and last points are the same, and paths where the first half mirrors the
second half with lens cleaning in the middle.</li>
<li><strong>Colon deformation</strong> videos for qualitative assessment. Camera poses and
undeformed 3D models are provided without pixel-wise GT.</li>
<li><strong>Paired clean &amp; debris-filled colon frames.</strong> For every debris-filled colon
video, there is a corresponding clean colon video with the same camera trajectory, imaging the
same colon phantom.</li>
</ul>
</div>
</div>
<hr>
<div class="row g-0 text-center align-items-center">
<div class="col-auto m-auto">
<h2>Examples</h2>
<!-- <p style="margin-bottom: 4px;"><span style="color: rgb(13, 13, 13);"><b>Fast motion with lens cleaning.</b></span><br></p>
<div>
<iframe allowfullscreen frameborder="0" src="https://www.youtube-nocookie.com/embed/blsry5ShjJA?rel=0&modestbranding=1&autohide=1&showinfo=0" width="1015" height="540"></iframe>
</div> -->
<!-- Video 1 -->
<p style="margin-bottom: 4px;"><span style="color: rgb(13, 13, 13);"><b>Polyp cleaning with water jet
followed by scope dipping in mucous pool and lens cleaning.</b></span><br></p>
<div>
<iframe allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/lFLh3qCNFyA?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0"
width="1015" height="540"></iframe>
</div>
<!-- Video 3 -->
<p style="margin-bottom: 4px; margin-top: 30px;"><span style="color: rgb(13, 13, 13);"><b>Fast
Loop</b></span><br></p>
<div>
<iframe allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/jmZgkBGMCmk?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0"
width="1015" height="540"></iframe>
</div>
<!-- Video 2 -->
<p style="margin-bottom: 4px; margin-top: 30px;"><span style="color: rgb(13, 13, 13);"><b>Flowing red
debris with dirty lens and lens cleaning. First half of camera trajectory mirrors the second
half.</b></span><br></p>
<div>
<iframe allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/Qqp5yh4Kw2M?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0"
width="1015" height="540"></iframe>
</div>
<!-- Video 4 -->
<p style="margin-bottom: 4px; margin-top: 30px;"><span style="color: rgb(13, 13, 13);"><b>Exploratory
Motion</b></span><br></p>
<div>
<iframe allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/qWCpDH5GiMw?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0"
width="1015" height="540"></iframe>
</div>
<!-- Video 5 -->
<p style="margin-bottom: 4px; margin-top: 30px;"><span style="color: rgb(13, 13, 13);"><b>En face to
down the barrel motion</b></span><br></p>
<div>
<iframe allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/I6cZRKQJRBc?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0"
width="1015" height="540"></iframe>
</div>
<hr>
<div class="row text-center">
<p style="margin-bottom: 1px; margin-top: 30px;"><span
style="color: rgb(13, 13, 13);"><b>Synchronized clean and debris colon video pair.
</b></span><br></p>
<div class="text-center" style="margin-top: 1px; margin-bottom: 4px">
<button id="playButton" class="btn btn-primary">Play Both Videos</button>
</div>
<!-- Video 1 -->
<div class="col-md-6">
<iframe id="video1" allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/8cD3riZcSpA?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0&amp;enablejsapi=1"
width="560" height="315">
</iframe>
</div>
<!-- Video 2 -->
<div class="col-md-6">
<iframe id="video2" allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/UjG4vS1H8jY?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0&amp;enablejsapi=1"
width="560" height="315">
</iframe>
</div>
</div>
<!-- Play Button -->
<script>
// Synchronize video playback
document.getElementById('playButton').addEventListener('click', function () {
const video1 = document.getElementById('video1').contentWindow;
const video2 = document.getElementById('video2').contentWindow;
// Send play commands to both videos
video1.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
video2.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
});
</script>
<hr>
<p style="margin-bottom: 4px; margin-top: 30px;"><span style="color: rgb(13, 13, 13);"><b>Colon
deformation video.</b></span><br></p>
<div>
<iframe allowfullscreen="" frameborder="0"
src="https://www.youtube-nocookie.com/embed/LCPLj9rk-qM?rel=0&amp;modestbranding=1&amp;autohide=1&amp;showinfo=0"
width="1015" height="540"></iframe>
</div>
<hr>
</div>
</div>
<div class="row" style="margin-top: 30px;">
<div class="col">
<h1 class="text-center">Dataset</h1>
<p>C3VDv2 consists of two distinct colon shapes (c1 and c2), each segmented into seven to eight
anatomical regions, with each segment further having four unique textures and colors (t1, t2, t3,
and t4). C3VDv2 contains 192 videos with a total of 169,371 frames. It comprises three different
types of video sequences:
</p>
<ul>
<li>
<strong>Pixel-level Ground Truth Videos:</strong>
<a href="#registered-1">Registered Videos</a> were acquired with a static, undeformed colon
phantom and are provided with per-frame ground truth maps (depth, normals, optical flow, etc.).
Up to three videos were recorded per phantom segment:
<ul>
<li><strong>v1:</strong> clean colon with a baseline camera trajectory and imaging settings.
</li>
<li><strong>v2:</strong> clean colon with a different camera trajectory and imaging settings
as v1.</li>
<li><strong>v3:</strong> debris-filled colon using the same camera trajectory and imaging
settings as v2.</li>
</ul>
This category includes 169 short videos with a total of 67,886 frames.
</li>
<li>
<strong>Deformation Videos:</strong>
<a href="#deformation">Deformation Videos</a> consist of <strong>v4</strong> videos featuring
externally induced active phantom deformation, captured with either static or linear camera
motion. All videos include debris. Each folder contains all recorded RGB frames and a
corresponding <em>pose.txt</em> file (if camera is not stationary). The camera poses are in a
frame-wise homogeneous format. This folder contains 15 short videos with a total of 6,185
frames.
</li>
<li>
<strong>Simulated Screening Videos:</strong>
<a href="#screening">Screening Videos</a> comprise full-colon withdrawal sequences performed by
a gastroenterologist to capture realistic camera motion. Similar to deformation videos, only RGB
frames and camera poses in <em>pose.txt</em> are provided. A total of 8 videos are included,
comprising 95,300 frames.
</li>
</ul>
Parameters such as camera trajectory, speed, edge enhancement settings, simulated artifacts and
challenging cases description, are comprehensively documented in the <a href="#"
class="download-processed">C3VDv2_Data_Summary_Sheet_v1.xlsx</a>.
<p></p>
<p>The dataset is publicly hosted on <a
href="https://archive.data.jhu.edu/dataset.xhtml?persistentId=doi:10.7281/T1/JC64MK"
target="_blank">Johns Hopkins Research Data Repository</a>. You can either directly download
from the repository page or via links below (Dataverse API based). We have also provided <a
href="https://github.com/DurrLab/C3VD/blob/main/utils/jh_dataverse_api_download.sh"
target="_blank">a bash script</a> to download data via Dataverse API calls.</p>
<p></p>
</div>
</div>
<h2 class="text-center" id="registered-1" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">Registered
Videos</h2>
<div class="row">
<div class="col">
<p style="margin-bottom: 0px;">For each registered video frame, the dataset includes:</p>
<ul>
<li><strong>RGB frame:&nbsp;</strong><i>rgb/NNNN.png</i> represents the raw (distorted) video frame
from the Olympus CF-HQ190L video colonoscope. The black border with video metadata was cropped,
resulting in an image size of 1350 x 1080 pixels. NNNN denotes the 4-digit frame number within
the video.<br></li>
<li><strong>Depth frame:&nbsp;</strong><i>depth/NNNN_depth.tiff</i> represents the depth along the
camera frame's Z-axis, clamped between 0 and 100 mm, and linearly scaled and encoded as a 16-bit
grayscale image. For example, a pixel value of 16,384 corresponds to a depth of 25 mm.<br></li>
<li><strong>Surface normal frame:&nbsp;</strong><i>normals/NNNN_normals.tiff</i> stores the X, Y,
and Z components of the surface normal vector for each surfel in the R, G, and B color channels,
respectively. Components are linearly scaled from ±1 to 0-65535 and encoded as a 16-bit color
image. Normal vector directions are defined with respect to the camera coordinate system: +x
points right, +y points down, and +z points along the viewing direction (i.e., away from the
camera).<br></li>
<li><strong>Optical flow frame:&nbsp;</strong><i>optical_flow/NNNN_flow.tiff</i> depicts the optical
flow from the current to the previous frame. X-direction motion (left to right, clamped between
-20 to 20 pixels) is stored in the red channel, and Y-direction motion (up to down, clamped
between -20 to 20 pixels) is stored in the green channel. Flow values are linearly scaled and
encoded as a 16-bit color image.<br></li>
</ul>
</div>
<div class="col">
<ul>
<li><strong>Occlusion frame:&nbsp;</strong><i>occlusions/NNNN_occlusion.tiff</i> indicates pixels
that occlude other mesh faces within 100 mm of the camera origin, assigning a value of 255 to
these pixels and 0 to all others. This binary data is encoded as an 8-bit grayscale image.<br>
</li>
<li><strong>Diffuse Frame:&nbsp;</strong><i>diffuse/NNNN_diffuse.png</i> encodes Lambertian
reflectance, computed using the dot product of the surface normal and the direction of the
incident light. Reflectance values range from 0.1 to 1.0 and are linearly scaled and encoded as
an 8-bit grayscale image.<br></li>
<li><strong>Camera pose:&nbsp;</strong>&nbsp;<i>pose.txt</i> contains each frame's flattened
homogeneous camera-to-world transformation matrix (row major order).</li>
<li><strong>3D model and coverage map:</strong> <i>coverage_mesh.obj</i> stores the ground truth
triangulated mesh. Texture vertices store coverage values, where vt=1 indicates an observed
face, and vt=2 indicates an unobserved face.</li>
</ul>
</div>
</div>
<!-- Download error waring box -->
<div
style="background-color: #fff3cd; border: 1px solid #ffeeba; padding: 16px; border-radius: 8px; margin-top: 1px; margin-bottom: 12px; font-size: 1rem; color: #856404;">
<strong>Note:</strong> If downloads links below fail (e.g. "File not found"), please download files directly
from the <a href="https://archive.data.jhu.edu/dataset.xhtml?persistentId=doi:10.7281/T1/JC64MK"
target="_blank" style="color: #0c5460; text-decoration: underline;">JHU Dataverse repository</a>.
</div>
<!-- Registered Videos – New Dynamic Table -->
<div class="row">
<div class="col">
<div class="table-responsive">
<table id="registered-videos-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Phantom Number</th>
<th>Video Number</th>
<th># Frames</th>
<th>Preview</th>
<th>Download</th>
</tr>
</thead>
<tbody>
<!-- JS will populate rows here -->
<tr>
<td>c1</td>
<td>ascending</td>
<td>t1</td>
<td>v1</td>
<td>282</td>
<td data-youtube="SNxHcXeiwGU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t1</td>
<td>v2</td>
<td>454</td>
<td data-youtube="TzvtE8eRCvE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t2</td>
<td>v1</td>
<td>374</td>
<td data-youtube="CW1AuVdesqw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t2</td>
<td>v2</td>
<td>412</td>
<td data-youtube="sQ1glZ7wiZE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t2</td>
<td>v3</td>
<td>412</td>
<td data-youtube="CENEBbKA3HU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t3</td>
<td>v1</td>
<td>259</td>
<td data-youtube="43Bnm7YG0Ho" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t3</td>
<td>v2</td>
<td>680</td>
<td data-youtube="qG2d-QhPgIU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t3</td>
<td>v3</td>
<td>680</td>
<td data-youtube="PIUWKDFm15Q" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t4</td>
<td>v1</td>
<td>410</td>
<td data-youtube="bgn25JzbQTQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t4</td>
<td>v2</td>
<td>694</td>
<td data-youtube="V9G4WhuZER4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>ascending</td>
<td>t4</td>
<td>v3</td>
<td>694</td>
<td data-youtube="FYHJbfrK5kg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t1</td>
<td>v1</td>
<td>218</td>
<td data-youtube="JOeEqDqtsN4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t1</td>
<td>v2</td>
<td>423</td>
<td data-youtube="uEZUZ2DQwa8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t1</td>
<td>v3</td>
<td>423</td>
<td data-youtube="LdZK62gQtfQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t2</td>
<td>v1</td>
<td>281</td>
<td data-youtube="XmjblA1svwk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t2</td>
<td>v2</td>
<td>328</td>
<td data-youtube="RToIHqYkN6I" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t2</td>
<td>v3</td>
<td>328</td>
<td data-youtube="ypkbJxaIej0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t3</td>
<td>v2</td>
<td>721</td>
<td data-youtube="AaPUG7e21kI" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t3</td>
<td>v3</td>
<td>721</td>
<td data-youtube="1o0WQ1fmXIs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t4</td>
<td>v1</td>
<td>866</td>
<td data-youtube="Cf-gd-Z2SEw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t4</td>
<td>v2</td>
<td>959</td>
<td data-youtube="lGEzUZfzg58" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t4</td>
<td>v3</td>
<td>959</td>
<td data-youtube="Tr17QZFmwKE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t1</td>
<td>v1</td>
<td>123</td>
<td data-youtube="ByEInBvnYo0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t1</td>
<td>v2</td>
<td>208</td>
<td data-youtube="H_sGijReE90" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t1</td>
<td>v3</td>
<td>208</td>
<td data-youtube="G4hGjHT9H9s" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t2</td>
<td>v2</td>
<td>617</td>
<td data-youtube="xkaaFsmrYHY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t2</td>
<td>v3</td>
<td>617</td>
<td data-youtube="yhWPrbaJIME" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t3</td>
<td>v1</td>
<td>239</td>
<td data-youtube="Ntm5d8xP9Tk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t3</td>
<td>v2</td>
<td>342</td>
<td data-youtube="YoS0dPyTKRU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t3</td>
<td>v3</td>
<td>342</td>
<td data-youtube="MOObNN7pn_A" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t4</td>
<td>v1</td>
<td>192</td>
<td data-youtube="FVqoeB0TMIs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t4</td>
<td>v2</td>
<td>279</td>
<td data-youtube="d6_rrrQDHr0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t4</td>
<td>v3</td>
<td>279</td>
<td data-youtube="d3uqHGwvgyk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t1</td>
<td>v1</td>
<td>206</td>
<td data-youtube="6qI7m6AHFvA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t1</td>
<td>v2</td>
<td>383</td>
<td data-youtube="kBGBt-HXE0s" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t1</td>
<td>v3</td>
<td>383</td>
<td data-youtube="iUbjm8lc_XE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t2</td>
<td>v1</td>
<td>165</td>
<td data-youtube="1kDgLMC5_kw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t2</td>
<td>v2</td>
<td>366</td>
<td data-youtube="0nnV0uikO7Y" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t2</td>
<td>v3</td>
<td>366</td>
<td data-youtube="qYcTgoYMlIE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t3</td>
<td>v1</td>
<td>247</td>
<td data-youtube="54ztxVKAByo" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t3</td>
<td>v2</td>
<td>220</td>
<td data-youtube="KJ5wkdcpoac" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t3</td>
<td>v3</td>
<td>220</td>
<td data-youtube="mLNsoW13WS4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t4</td>
<td>v1</td>
<td>324</td>
<td data-youtube="PNmwyj9dw4w" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t4</td>
<td>v2</td>
<td>457</td>
<td data-youtube="CzzXGbyYKac" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t4</td>
<td>v3</td>
<td>457</td>
<td data-youtube="OmG4PL9lPIw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t1</td>
<td>v1</td>
<td>191</td>
<td data-youtube="lZ6BQfN0kuY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t1</td>
<td>v2</td>
<td>307</td>
<td data-youtube="jFERxLlLhyU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t1</td>
<td>v3</td>
<td>307</td>
<td data-youtube="cz5aTlvfG2c" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t2</td>
<td>v1</td>
<td>354</td>
<td data-youtube="1JDPSUAE2Jk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t2</td>
<td>v2</td>
<td>286</td>
<td data-youtube="L-16CZi1Nio" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t2</td>
<td>v3</td>
<td>286</td>
<td data-youtube="qV1VrmmxeTI" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t3</td>
<td>v1</td>
<td>330</td>
<td data-youtube="ESR8l8eHrN0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t3</td>
<td>v2</td>
<td>464</td>
<td data-youtube="uqTh9y03szc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t3</td>
<td>v3</td>
<td>464</td>
<td data-youtube="XzA56ACBlLc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t4</td>
<td>v1</td>
<td>447</td>
<td data-youtube="nzFHSttnBnk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t4</td>
<td>v2</td>
<td>708</td>
<td data-youtube="MaRks7jdGsc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t4</td>
<td>v3</td>
<td>708</td>
<td data-youtube="Lg3KMemKUxk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t1</td>
<td>v1</td>
<td>132</td>
<td data-youtube="fbw8tLZLqUo" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t1</td>
<td>v2</td>
<td>152</td>
<td data-youtube="Ijv0r22hHSc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t1</td>
<td>v3</td>
<td>152</td>
<td data-youtube="oylnZBm_1-0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t2</td>
<td>v1</td>
<td>400</td>
<td data-youtube="U3fwSpPilaU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t2</td>
<td>v2</td>
<td>239</td>
<td data-youtube="isWmc6sUDdg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t2</td>
<td>v3</td>
<td>239</td>
<td data-youtube="UsaHXU27spg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t3</td>
<td>v1</td>
<td>255</td>
<td data-youtube="UAwmLFS9Pdo" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t3</td>
<td>v2</td>
<td>243</td>
<td data-youtube="EFsUHooJPHY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t3</td>
<td>v3</td>
<td>243</td>
<td data-youtube="23PmxgasD2g" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t4</td>
<td>v1</td>
<td>390</td>
<td data-youtube="V-VPmiHOzXE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t4</td>
<td>v2</td>
<td>428</td>
<td data-youtube="jKmvNcw7Ay0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t4</td>
<td>v3</td>
<td>428</td>
<td data-youtube="oTFIAJMj4pE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t1</td>
<td>v1</td>
<td>156</td>
<td data-youtube="mZh01rTd5HY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t1</td>
<td>v2</td>
<td>117</td>
<td data-youtube="8l7qH4WWv0g" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t1</td>
<td>v3</td>
<td>117</td>
<td data-youtube="QcZHNhEgdJ4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t2</td>
<td>v1</td>
<td>673</td>
<td data-youtube="N0R-Fr1HwWM" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t2</td>
<td>v2</td>
<td>235</td>
<td data-youtube="TS0bxnCjWL4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t2</td>
<td>v3</td>
<td>235</td>
<td data-youtube="L5URD4xbeJE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t3</td>
<td>v1</td>
<td>203</td>
<td data-youtube="_xtxLtByf3E" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t3</td>
<td>v2</td>
<td>184</td>
<td data-youtube="X4RUB5R63YQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t3</td>
<td>v3</td>
<td>184</td>
<td data-youtube="TiAa1eqUdsU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t4</td>
<td>v1</td>
<td>315</td>
<td data-youtube="lJWvSawG2WU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t4</td>
<td>v2</td>
<td>626</td>
<td data-youtube="mZia7NzFt7U" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t4</td>
<td>v3</td>
<td>626</td>
<td data-youtube="vAAXRQL8mpg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t4_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t1</td>
<td>v1</td>
<td>268</td>
<td data-youtube="H9W-P-i1x84" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t1</td>
<td>v2</td>
<td>517</td>
<td data-youtube="U_XqPPsEQZ0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t1_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t1</td>
<td>v3</td>
<td>517</td>
<td data-youtube="CD_P9lvW31A" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t1_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t2</td>
<td>v1</td>
<td>457</td>
<td data-youtube="ycOEQ760BOE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t2</td>
<td>v2</td>
<td>559</td>
<td data-youtube="3FOnycgopS4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t2_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t2</td>
<td>v3</td>
<td>559</td>
<td data-youtube="4TJbDz6ZU40" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t2_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t3</td>
<td>v1</td>
<td>578</td>
<td data-youtube="KJUb2D-RULE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t3</td>
<td>v2</td>
<td>249</td>
<td data-youtube="ubBOpvW0CJY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t3_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t3</td>
<td>v3</td>
<td>249</td>
<td data-youtube="eRzIB4ZReVQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t3_v3.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t4</td>
<td>v1</td>
<td>258</td>
<td data-youtube="RXnRHyYE2r8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t4_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t4</td>
<td>v2</td>
<td>419</td>
<td data-youtube="GJb2d7k1ARw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t4_v2.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td>t4</td>
<td>v3</td>
<td>419</td>
<td data-youtube="X5nWILoo3eU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse2_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t1</td>
<td>v1</td>
<td>283</td>
<td data-youtube="ozqeovNOIfE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t1</td>
<td>v2</td>
<td>515</td>
<td data-youtube="qLPYiL_OFzs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t1_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t1</td>
<td>v3</td>
<td>515</td>
<td data-youtube="Ex6d3rG_fTg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t1_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t2</td>
<td>v1</td>
<td>395</td>
<td data-youtube="Qp2iyiBW45I" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t2_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t2</td>
<td>v2</td>
<td>444</td>
<td data-youtube="6b-rqr3wg4k" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t2_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t2</td>
<td>v3</td>
<td>444</td>
<td data-youtube="WkPDh3ZMIUs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t2_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t3</td>
<td>v1</td>
<td>340</td>
<td data-youtube="ujYcnSfoSEw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t3</td>
<td>v2</td>
<td>522</td>
<td data-youtube="TVE-ox8LQkw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t3</td>
<td>v3</td>
<td>522</td>
<td data-youtube="HVe71mdQ0Gk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t4</td>
<td>v1</td>
<td>292</td>
<td data-youtube="shSjHJlIw5o" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t4</td>
<td>v2</td>
<td>455</td>
<td data-youtube="S2siIi2omoo" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t4_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t4</td>
<td>v3</td>
<td>455</td>
<td data-youtube="q2MfKAFFEs4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t1</td>
<td>v1</td>
<td>304</td>
<td data-youtube="h8-p-8Pdwac" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t1</td>
<td>v2</td>
<td>431</td>
<td data-youtube="4Jsq4z8ON6M" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t1_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t1</td>
<td>v3</td>
<td>431</td>
<td data-youtube="AMWlVyGLMjE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t1_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t2</td>
<td>v2</td>
<td>452</td>
<td data-youtube="jh-WiYjS7n0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t2_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t2</td>
<td>v3</td>
<td>452</td>
<td data-youtube="a7zSKzEEwd0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t2_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t3</td>
<td>v1</td>
<td>228</td>
<td data-youtube="o4sHrW9JqxU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t3</td>
<td>v2</td>
<td>306</td>
<td data-youtube="CI45hWmj0EU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t3</td>
<td>v3</td>
<td>306</td>
<td data-youtube="4OikTyvXBao" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t4</td>
<td>v1</td>
<td>191</td>
<td data-youtube="sxqBik4awcM" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t4</td>
<td>v2</td>
<td>520</td>
<td data-youtube="VrKEOLEsoy4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t4_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t4</td>
<td>v3</td>
<td>520</td>
<td data-youtube="a5e3rdmfvRE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td>t3</td>
<td>v1</td>
<td>198</td>
<td data-youtube="9N7dSenLGwE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_descending_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td>t3</td>
<td>v2</td>
<td>413</td>
<td data-youtube="gn2M7HyZBZ8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_descending_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td>t3</td>
<td>v3</td>
<td>413</td>
<td data-youtube="#NAME?" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_descending_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td>t4</td>
<td>v1</td>
<td>252</td>
<td data-youtube="sYO1DlmAuZM" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_descending_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td>t4</td>
<td>v2</td>
<td>128</td>
<td data-youtube="EVljOx1moZA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_descending_t4_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td>t4</td>
<td>v3</td>
<td>128</td>
<td data-youtube="2XTd6N4NZiU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_descending_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t1</td>
<td>v1</td>
<td>154</td>
<td data-youtube="OKwJsiVuhZA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t1</td>
<td>v2</td>
<td>712</td>
<td data-youtube="GWIeiOGCV2c" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t1_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t1</td>
<td>v3</td>
<td>712</td>
<td data-youtube="LrnJ8Thg0U4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t1_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t2</td>
<td>v1</td>
<td>519</td>
<td data-youtube="olSFyxnMRWw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t2_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t2</td>
<td>v2</td>
<td>383</td>
<td data-youtube="O-o7w0mlXCg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t2_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t2</td>
<td>v3</td>
<td>383</td>
<td data-youtube="Ak1JH57nwhc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t2_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t3</td>
<td>v1</td>
<td>281</td>
<td data-youtube="zkvXqL82QCQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t3</td>
<td>v2</td>
<td>333</td>
<td data-youtube="toquq2WvlD0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t3</td>
<td>v3</td>
<td>333</td>
<td data-youtube="URr82C37DOA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t4</td>
<td>v1</td>
<td>198</td>
<td data-youtube="O5golv4ugis" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t4</td>
<td>v2</td>
<td>296</td>
<td data-youtube="89-0KOjV2Mw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t4_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t4</td>
<td>v3</td>
<td>296</td>
<td data-youtube="MEIrncnJqV8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t1</td>
<td>v1</td>
<td>501</td>
<td data-youtube="kaihm6Mb84M" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t1</td>
<td>v2</td>
<td>558</td>
<td data-youtube="Cub_lh4UE4k" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t1_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t1</td>
<td>v3</td>
<td>558</td>
<td data-youtube="U920jpM8b7E" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t1_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t2</td>
<td>v1</td>
<td>466</td>
<td data-youtube="l19X7CXdn_Q" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t2_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t2</td>
<td>v2</td>
<td>448</td>
<td data-youtube="8_kVyJPfW5c" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t2_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t2</td>
<td>v3</td>
<td>448</td>
<td data-youtube="l2HD8BmnY4o" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t2_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t3</td>
<td>v1</td>
<td>391</td>
<td data-youtube="Mgjp8MLukQI" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t3</td>
<td>v2</td>
<td>225</td>
<td data-youtube="0sqHVda_3W4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t3</td>
<td>v3</td>
<td>225</td>
<td data-youtube="LUXdc2Z5Mo0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t4</td>
<td>v1</td>
<td>413</td>
<td data-youtube="g4U5GVXwlwM" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t4</td>
<td>v2</td>
<td>290</td>
<td data-youtube="EmcqqgGxiOk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t4_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t4</td>
<td>v3</td>
<td>290</td>
<td data-youtube="3skce4FJ6UU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t1</td>
<td>v1</td>
<td>402</td>
<td data-youtube="mZHYcku1Wyw" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t1</td>
<td>v2</td>
<td>627</td>
<td data-youtube="2VP8xUdG0O8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t1_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t1</td>
<td>v3</td>
<td>627</td>
<td data-youtube="eq7aC1IKUuA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t1_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t2</td>
<td>v1</td>
<td>610</td>
<td data-youtube="_2-itv83oX0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t2_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t2</td>
<td>v2</td>
<td>600</td>
<td data-youtube="5OgMpqaKrWk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t2_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t2</td>
<td>v3</td>
<td>600</td>
<td data-youtube="DdGrEtDEg0o" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t2_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t3</td>
<td>v1</td>
<td>853</td>
<td data-youtube="#NAME?" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t3</td>
<td>v2</td>
<td>298</td>
<td data-youtube="z4uk4W5rSuA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t3</td>
<td>v3</td>
<td>298</td>
<td data-youtube="Mls5XP1YqoI" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t4</td>
<td>v1</td>
<td>376</td>
<td data-youtube="EmYfmepbgDQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t4</td>
<td>v2</td>
<td>382</td>
<td data-youtube="gdxqeVvtmmc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t4_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t4</td>
<td>v3</td>
<td>382</td>
<td data-youtube="EtFHIMVJVH8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t4_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t1</td>
<td>v1</td>
<td>393</td>
<td data-youtube="y_oO6i7SE7Q" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t1</td>
<td>v2</td>
<td>552</td>
<td data-youtube="irmSsGTowZs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t1_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t1</td>
<td>v3</td>
<td>552</td>
<td data-youtube="8bLe5R64OhA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t1_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t2</td>
<td>v1</td>
<td>415</td>
<td data-youtube="xWMEdnjCNYo" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t2_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t2</td>
<td>v2</td>
<td>337</td>
<td data-youtube="vhZFy_99FRE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t2_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t2</td>
<td>v3</td>
<td>337</td>
<td data-youtube="Dgnkzme6Yqc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t2_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t3</td>
<td>v1</td>
<td>193</td>
<td data-youtube="C0Y8XRRR7fE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t3</td>
<td>v2</td>
<td>733</td>
<td data-youtube="qSkqcN4Es18" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t3_v2.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t3</td>
<td>v3</td>
<td>733</td>
<td data-youtube="o8PAQ6zV1ho" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t3_v3.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t4</td>
<td>v1</td>
<td>687</td>
<td data-youtube="y4Fi-r5wtao" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td>t4</td>
<td>v3</td>
<td>940</td>
<td data-youtube="n9MZgqEOkrk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse2_t4_v3.zip</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h2 class="text-center" id="deformation" style="margin:20px 0 8px;">Deformation Videos</h2>
<div class="row">
<div class="col">
<div class="table-responsive">
<table id="deformation-videos-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Phantom Number</th>
<th>Video Number</th>
<th># Frames</th>
<th>Preview</th>
<th>Download</th>
</tr>
</thead>
<tbody><!-- filled by JS -->
<tr>
<td>c1</td>
<td>ascending</td>
<td>t4</td>
<td>v4</td>
<td>334</td>
<td data-youtube="HsF5--uFsD0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_ascending_t4_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td>t1</td>
<td>v4</td>
<td>602</td>
<td data-youtube="LCPLj9rk-qM" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_cecum_t1_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td>t4</td>
<td>v4</td>
<td>361</td>
<td data-youtube="Hjj0QitaeMQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_descending_t4_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td>t4</td>
<td>v4</td>
<td>240</td>
<td data-youtube="ejIyop8nGRk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_rectum_t4_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t1</td>
<td>v4</td>
<td>787</td>
<td data-youtube="Fz-jxS1n950" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t1_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td>t4</td>
<td>v4</td>
<td>297</td>
<td data-youtube="XQED3z9kAk4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid1_t4_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td>t4</td>
<td>v4</td>
<td>288</td>
<td data-youtube="LWTU0TXDl4I" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_sigmoid2_t4_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t1</td>
<td>v4</td>
<td>622</td>
<td data-youtube="zFu6kaXnnY0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t1_v4.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td>t4</td>
<td>v4</td>
<td>277</td>
<td data-youtube="pQRAekgnQWM" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_transverse1_t4_v4.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td>t1</td>
<td>v4</td>
<td>441</td>
<td data-youtube="PlKL5on9hiE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_ascending_t1_v4.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td>t1</td>
<td>v4</td>
<td>317</td>
<td data-youtube="8qc_FbkAsOk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_cecum_t1_v4.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td>t1</td>
<td>v4</td>
<td>366</td>
<td data-youtube="zEJhEty1Dlc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_rectum_t1_v4.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td>t1</td>
<td>v4</td>
<td>446</td>
<td data-youtube="TawsQMJ8xyY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_sigmoid_t1_v4.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t1</td>
<td>v4</td>
<td>387</td>
<td data-youtube="xq_zRtMViv4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t1_v4.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td>t3</td>
<td>v4</td>
<td>420</td>
<td data-youtube="VW079mfz-oQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_transverse1_t3_v4.zip</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col">
<h2 class="text-center" id="screening" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">
Screening Videos</h2>
</div>
</div>
<div class="table-responsive" style="margin-top:20px">
<table id="screening-videos-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Phantom Number</th>
<th>Video Number</th>
<th># Frames</th>
<th>Preview</th>
<th>Download</th>
</tr>
</thead>
<tbody><!-- filled by JS -->
<tr>
<td>c1</td>
<td>full</td>
<td>t1</td>
<td>v1</td>
<td>11000</td>
<td data-youtube="y5-YDWNOaOs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_full_t1_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>full</td>
<td>t2</td>
<td>v1</td>
<td>13800</td>
<td data-youtube="DPeTP4GxTxg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_full_t2_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>full</td>
<td>t3</td>
<td>v1</td>
<td>12200</td>
<td data-youtube="3RUrkdbG1dU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_full_t3_v1.zip</a></td>
</tr>
<tr>
<td>c1</td>
<td>full</td>
<td>t4</td>
<td>v1</td>
<td>8400</td>
<td data-youtube="COW-fAm90wE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c1_full_t4_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>full</td>
<td>t1</td>
<td>v1</td>
<td>11000</td>
<td data-youtube="5UWAdDNBUBU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_full_t1_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>full</td>
<td>t2</td>
<td>v1</td>
<td>12400</td>
<td data-youtube="RheTAhTLeZU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_full_t2_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>full</td>
<td>t3</td>
<td>v1</td>
<td>14200</td>
<td data-youtube="q0zlY3B-FHc" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_full_t3_v1.zip</a></td>
</tr>
<tr>
<td>c2</td>
<td>full</td>
<td>t4</td>
<td>v1</td>
<td>12300</td>
<td data-youtube="ULDgBWYsRts" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td><a href="#" class="download-processed">c2_full_t4_v1.zip</a></td>
</tr>
</tbody>
</table>
</div>
<!-- 3D model files -->
<div class="row">
<div class="col">
<h2 class="text-center" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">3D Model Files</h2>
<div class="table-responsive">
<table id="models-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Lumen Download</th>
<th>Mold Download</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>ascending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_ascending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_ascending_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>cecum</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_cecum_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_cecum_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>descending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_descending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_descending_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>rectum</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_rectum_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_rectum_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid1</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_sigmoid1_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_sigmoid1_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>sigmoid2</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_sigmoid2_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_sigmoid2_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse1</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_transverse1_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_transverse1_mold.zip</span></a></td>
</tr>
<tr>
<td>c1</td>
<td>transverse2</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_transverse2_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c1_transverse2_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>ascending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_ascending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_ascending_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>cecum</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_cecum_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_cecum_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>descending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_descending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_descending_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>rectum</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_rectum_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_rectum_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>sigmoid</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_sigmoid_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_sigmoid_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse1</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_transverse1_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_transverse1_mold.zip</span></a></td>
</tr>
<tr>
<td>c2</td>
<td>transverse2</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_transverse2_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c2_transverse2_mold.zip</span></a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h2 class="text-center" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">Camera Calibration Files</h2>
<div class="row justify-content-center">
<div class="col-auto">
<p>The spherical omnidirectional camera intrinsics are given in <a href="#"
class="download-processed">camera_intrinsics.txt</a>. Additionally, two calibration sequences
are provided for geometric and photometric calibration in the camera_calibration folder:
</p>
<ul>
<li>
<strong><a href="#" class="download-processed">camera_calib_checker.zip</a>:</strong> This video
captures a 8x11 checkerboard pattern with a square size of 10 mm.
</li>
<li>
<strong><a href="#" class="download-processed">camera_calib_vicalib.zip</a>:</strong> This video
features the "big_pattern" target from the Endomapper repository <a
href="https://arxiv.org/abs/2303.07041" target="_blank">[azagra2023endomapper]</a>. The <a
href="https://github.com/endomapper/EM_Dataset-PhotometricCalibration/blob/main/misc/big_pattern.pdf"
target="_blank">big_pattern.pdf</a> file, when printed at 100% scale, includes a grid
spacing of 5.29 mm, a large radius of 1.58 mm, and a small radius of 1.06 mm.
</li>
</ul>
</div>
</div>
<hr>
<!-- =========================================
Original C3VD (insert after Screening Videos)
========================================= -->
<h1 class="text-center" id="original-c3vd-data" style="margin:40px 0 8px;">
Original&nbsp;C3VD
</h1>
<!-- Original Registered Videos -->
<div class="row">
<div class="col">
<h2 class="text-center" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">Registered Videos (C3VD
v1)</h2>
<div class="table-responsive">
<table id="orig-registered-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Texture</th>
<th>Video</th>
<th># Frames</th>
<th>Preview</th>
<th>Old Name</th>
<th>Download</th>
</tr>
</thead>
<tbody>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t1</td>
<td>v1</td>
<td>276</td>
<td data-youtube="esEBiCIfDUY" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t1_a</td>
<td><a href="#" class="download-processed">c0_cecum_t1_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t1</td>
<td>v2</td>
<td>765</td>
<td data-youtube="atjrygVuUmU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t1_b</td>
<td><a href="#" class="download-processed">c0_cecum_t1_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t2</td>
<td>v1</td>
<td>370</td>
<td data-youtube="h8oLhvG2kog" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t2_a</td>
<td><a href="#" class="download-processed">c0_cecum_t2_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t2</td>
<td>v2</td>
<td>1142</td>
<td data-youtube="GBtRipJ2zAs" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t2_b</td>
<td><a href="#" class="download-processed">c0_cecum_t2_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t2</td>
<td>v3</td>
<td>595</td>
<td data-youtube="ryAwRXJ9dYU" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t2_c</td>
<td><a href="#" class="download-processed">c0_cecum_t2_v3.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t3</td>
<td>v1</td>
<td>730</td>
<td data-youtube="qZ12JdHU1es" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t3_a</td>
<td><a href="#" class="download-processed">c0_cecum_t3_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t4</td>
<td>v1</td>
<td>465</td>
<td data-youtube="rsX_jeobzbA" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t4_a</td>
<td><a href="#" class="download-processed">c0_cecum_t4_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td>t4</td>
<td>v2</td>
<td>425</td>
<td data-youtube="zqD3qsnOkic" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>cecum_t4_b</td>
<td><a href="#" class="download-processed">c0_cecum_t4_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>descending</td>
<td>t4</td>
<td>v1</td>
<td>148</td>
<td data-youtube="dQLlzx6lBTE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>desc_t4_a</td>
<td><a href="#" class="download-processed">c0_descending_t4_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>sigmoid</td>
<td>t1</td>
<td>v1</td>
<td>700</td>
<td data-youtube="flhT2kCXa4c" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>sigmoid_t1_a</td>
<td><a href="#" class="download-processed">c0_sigmoid_t1_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>sigmoid</td>
<td>t2</td>
<td>v1</td>
<td>514</td>
<td data-youtube="BCFzjgTAbq0" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>sigmoid_t2_a</td>
<td><a href="#" class="download-processed">c0_sigmoid_t2_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>sigmoid</td>
<td>t3</td>
<td>v1</td>
<td>613</td>
<td data-youtube="Vu_J_j4e6-U" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>sigmoid_t3_a</td>
<td><a href="#" class="download-processed">c0_sigmoid_t3_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>sigmoid</td>
<td>t3</td>
<td>v2</td>
<td>536</td>
<td data-youtube="gDyYHGcAwJE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>sigmoid_t3_b</td>
<td><a href="#" class="download-processed">c0_sigmoid_t3_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t1</td>
<td>v1</td>
<td>61</td>
<td data-youtube="WuCjvJ1Dx9M" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t1_a</td>
<td><a href="#" class="download-processed">c0_transverse_t1_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t1</td>
<td>v2</td>
<td>700</td>
<td data-youtube="sE04yM-TMWk" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t1_b</td>
<td><a href="#" class="download-processed">c0_transverse_t1_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t2</td>
<td>v1</td>
<td>194</td>
<td data-youtube="kxCAbejwwlQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t2_a</td>
<td><a href="#" class="download-processed">c0_transverse_t2_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t2</td>
<td>v2</td>
<td>103</td>
<td data-youtube="Pdr7Y3uCyYE" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t2_b</td>
<td><a href="#" class="download-processed">c0_transverse_t2_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t2</td>
<td>v3</td>
<td>235</td>
<td data-youtube="ySCoXwM0Nrg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t2_c</td>
<td><a href="#" class="download-processed">c0_transverse_t2_v3.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t3</td>
<td>v1</td>
<td>250</td>
<td data-youtube="hFzc7p1tzHg" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t3_a</td>
<td><a href="#" class="download-processed">c0_transverse_t3_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t3</td>
<td>v2</td>
<td>214</td>
<td data-youtube="gasn68GNHD8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t3_b</td>
<td><a href="#" class="download-processed">c0_transverse_t3_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t4</td>
<td>v1</td>
<td>382</td>
<td data-youtube="lELJRIanN78" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t4_a</td>
<td><a href="#" class="download-processed">c0_transverse_t4_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>transverse</td>
<td>t4</td>
<td>v2</td>
<td>597</td>
<td data-youtube="H8TGO44c5_I" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>trans_t4_b</td>
<td><a href="#" class="download-processed">c0_transverse_t4_v2.zip</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Original Screening Videos -->
<div class="row">
<div class="col">
<h2 class="text-center" style="margin:20px 0 8px;">Screening Videos (C3VD v1)</h2>
<div class="table-responsive">
<table id="orig-screening-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Texture</th>
<th>Video</th>
<th># Frames</th>
<th>Preview</th>
<th>Download</th>
<th>Old Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>c0</td>
<td>full</td>
<td>t1</td>
<td>v1</td>
<td>5458</td>
<td data-youtube="i_D2epwoxt8" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>screening_t1</td>
<td><a href="#" class="download-processed">c0_full_t1_v1.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>full</td>
<td>t2</td>
<td>v2</td>
<td>5100</td>
<td data-youtube="FB3wd9NNKY4" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>screening_t2</td>
<td><a href="#" class="download-processed">c0_full_t2_v2.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>full</td>
<td>t3</td>
<td>v3</td>
<td>4726</td>
<td data-youtube="v_mQcKtZI2k" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>screening_t3</td>
<td><a href="#" class="download-processed">c0_full_t3_v3.zip</a></td>
</tr>
<tr>
<td>c0</td>
<td>full</td>
<td>t4</td>
<td>v4</td>
<td>4774</td>
<td data-youtube="612boxukyQ" class="preview-cell" style="cursor:pointer;">
<span style="text-decoration:underline;">Preview</span>
</td>
<td>screening_t4</td>
<td><a href="#" class="download-processed">c0_full_t4_v4.zip</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- 3D model files -->
<div class="row">
<div class="col">
<h2 class="text-center" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">3D Model Files (C3VD
v1)</h2>
<div class="table-responsive">
<table id="orig-models-table" class="table table-sm">
<thead>
<tr>
<th>Colon</th>
<th>Segment</th>
<th>Lumen Download</th>
<th>Mold Download</th>
</tr>
</thead>
<tbody>
<tr>
<td>c0</td>
<td>ascending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_ascending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_ascending_mold.zip</span></a></td>
</tr>
<tr>
<td>c0</td>
<td>cecum</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_cecum_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_cecum_mold.zip</span></a></td>
</tr>
<tr>
<td>c0</td>
<td>descending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_descending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_descending_mold.zip</span></a></td>
</tr>
<tr>
<td>c0</td>
<td>sigmoid</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_sigmoid_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_sigmoid_mold.zip</span></a></td>
</tr>
<tr>
<td>c0</td>
<td>transcending</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_transcending_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_transcending_mold.zip</span></a></td>
</tr>
<tr>
<td>c0</td>
<td>full</td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_full_model.zip</span></a></td>
<td><a href="#" class="download-processed" title="Click to download"
style="cursor: pointer;"><span>c0_full_mold.zip</span></a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h2 class="text-center" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;">Calibration Files</h2>
<div class="row justify-content-center">
<div class="col-auto">
<p><a
href="http://drive.google.com/uc?export=view&amp;id=1ZTNyLx0p19U2Q3vl8dUe2YxxxA-9WisI&amp;confirm=t">cfhq190l_10x10mm_checkerboard_images.zip</a>
</p>
</div>
<div class="col-auto">
<p><a
href="http://drive.google.com/uc?export=view&amp;id=1gUA7mAM7DSD9oCvPH1hgQ0s2hhg1kOaC&amp;confirm=t">cfhq190l_omnidirectional_params.zip</a>
</p>
</div>
</div>
<div class="row justify-content-center">
<div class="col-auto text-center">
<h2 class="text-center" id="code" style="margin: 0px;margin-top: 20px;margin-bottom: 8px;"><a
href="https://github.com/DurrLab/C3VD">Registration and Rendering Code Available on GitHub</a>
</h2><img src="assets/img/github.png">
</div>
</div>
<div class="row" style="margin-bottom: 15px;margin-top: 15px;">
<div class="col-md-9">
<h2 id="citation"><span style="color: rgb(51, 51, 51);">Citation</span></h2>
<p><span style="color: rgb(51, 51, 51);">Please consider citing our publications if you use code or data
from this site.</span><br></p>
<pre style="background-color:#f0f0f0; padding:10px; border-radius:3px;"><code class="language-latex">
@article{golhar2025c3vdv2,
title={C3VDv2--Colonoscopy 3D video dataset with enhanced realism},
author={Golhar, Mayank V and Fretes, Lucas Sebastian Galeano and Ayers, Loren and Akshintala, Venkata S and Bobrow, Taylor L and Durr, Nicholas J},
journal={arXiv preprint arXiv:2506.24074},
year={2025}
}
@article{bobrow2023,
title={Colonoscopy 3D video dataset with paired depth from 2D-3D registration},
author={Bobrow, Taylor L and Golhar, Mayank and Vijayan, Rohan and Akshintala, Venkata S and Garcia, Juan R and Durr, Nicholas J},
journal={Medical Image Analysis},
pages={102956},
year={2023},
publisher={Elsevier},
}</code>
</pre>
</div>
</div>
<div class="row" style="margin: 0px;">
<div class="col text-center" style="margin: 0px;padding: 0px;margin-top: 40px;">
<p xmlns:cc="http://creativecommons.org/ns#">This work is licensed under <a
href="http://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1" target="_blank"
rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-SA 4.0<img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img
style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1"></a></p>
</div>
</div>
</div>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/dataverse-download.js"></script>
<script src="assets/js/load_csv_tables.js"></script>
<script src="assets/js/video-modal.js"></script>
<div id="LLHighlightAndAnnotateContainer">
<div></div>
</div>
</body>
</html>
#!/usr/bin/env python3
"""
Simple CORS proxy server for Dataverse API requests.
Run this alongside your main server on a different port (e.g., 8001)
"""
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.request import urlopen, Request
from urllib.error import URLError
import json
class ProxyHandler(BaseHTTPRequestHandler):
def do_GET(self):
# Extract the target URL from query parameter
if self.path.startswith('/proxy?'):
# Get the URL from query string
query_string = self.path.split('?', 1)[1] if '?' in self.path else ''
params = {}
for param in query_string.split('&'):
if '=' in param:
key, value = param.split('=', 1)
params[key] = value
target_url = params.get('url', '')
if not target_url:
self.send_error(400, "Missing 'url' parameter")
return
try:
# Decode the URL
from urllib.parse import unquote
target_url = unquote(target_url)
# Make the request to the target URL
req = Request(target_url)
req.add_header('User-Agent', 'Mozilla/5.0')
with urlopen(req) as response:
data = response.read()
content_type = response.headers.get('Content-Type', 'application/json')
# Send response with CORS headers
self.send_response(200)
self.send_header('Content-Type', content_type)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
self.send_header('Access-Control-Allow-Headers', 'Content-Type')
self.end_headers()
self.wfile.write(data)
except URLError as e:
self.send_error(500, f"Proxy error: {str(e)}")
except Exception as e:
self.send_error(500, f"Error: {str(e)}")
else:
self.send_error(404, "Not Found")
def do_OPTIONS(self):
# Handle CORS preflight
self.send_response(200)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
self.send_header('Access-Control-Allow-Headers', 'Content-Type')
self.end_headers()
def log_message(self, format, *args):
# Suppress default logging
pass
if __name__ == '__main__':
port = 8001
server = HTTPServer(('localhost', port), ProxyHandler)
print(f"Proxy server running on http://localhost:{port}")
print("Use it like: http://localhost:8001/proxy?url=<encoded_url>")
try:
server.serve_forever()
except KeyboardInterrupt:
print("\nShutting down proxy server...")
server.shutdown()
#! /bin/bash
# This script will copy the assets from the C3VDv2 repository to the current directory and create the folder structure if it doesn't exist for the assets folder.
folders_to_create=(
"assets/bootstrap/css"
"assets/css"
"assets/img"
"assets/js"
"assets/data"
)
for folder in "${folders_to_create[@]}"; do
if [ ! -d "$folder" ]; then
mkdir -p "$folder"
fi
done
# Copy the assets from the C3VDv2 repository to the current directory
curl -s -o assets/bootstrap/css/bootstrap.min.css https://durrlab.github.io/C3VDv2/assets/bootstrap/css/bootstrap.min.css
curl -s -o assets/css/before-after.compiled.css https://durrlab.github.io/C3VDv2/assets/css/before-after.compiled.css
curl -s -o assets/css/styles.css https://durrlab.github.io/C3VDv2/assets/css/styles.css
curl -s -o assets/img/sample.gif https://durrlab.github.io/C3VDv2/assets/img/sample.gif
curl -s -o assets/img/github.png https://durrlab.github.io/C3VDv2/assets/img/github.png
curl -s -o assets/js/jquery.min.js https://durrlab.github.io/C3VDv2/assets/js/jquery.min.js
curl -s -o assets/bootstrap/js/bootstrap.min.js https://durrlab.github.io/C3VDv2/assets/bootstrap/js/bootstrap.min.js
curl -s -o assets/js/load_csv_tables.js https://durrlab.github.io/C3VDv2/assets/js/load_csv_tables.js
curl -s -o assets/js/video-modal.js https://durrlab.github.io/C3VDv2/assets/js/video-modal.js
curl -s -o assets/data/C3VDv2_data_summary_registered.csv https://durrlab.github.io/C3VDv2/assets/data/C3VDv2_data_summary_registered.csv
curl -s -o assets/data/C3VDv2_data_summary_deformation.csv https://durrlab.github.io/C3VDv2/assets/data/C3VDv2_data_summary_deformation.csv
curl -s -o assets/data/C3VDv2_data_summary_screening.csv https://durrlab.github.io/C3VDv2/assets/data/C3VDv2_data_summary_screening.csv
curl -s -o assets/data/C3VDv2_data_summary_models.csv https://durrlab.github.io/C3VDv2/assets/data/C3VDv2_data_summary_models.csv
curl -s -o assets/data/C3VD_data_summary_registered.csv https://durrlab.github.io/C3VDv2/assets/data/C3VD_data_summary_registered.csv
curl -s -o assets/data/C3VD_data_summary_screening.csv https://durrlab.github.io/C3VDv2/assets/data/C3VD_data_summary_screen
curl -s -o assets/data/C3VD_data_summary_models.csv https://durrlab.github.io/C3VDv2/assets/data/C3VD_data_summary_models.csv
#!/bin/bash
DOI="10.7281/T1WF3NZ7"
filename="VideoData.zip"
# Combine these
curl "https://archive.data.jhu.edu/api/datasets/:persistentId?persistentId=doi:$DOI" | jq ".data.latestVersion.files[] | select(.label==\"$filename\") | .dataFile.id" | while read -r file_id; do
echo "Downloading $filename"
download_url=$(curl -s -D - -o /dev/null "https://archive.data.jhu.edu/api/access/datafile/$file_id" | grep -i '^Location: ' | cut -d' ' -f2)
echo "Download URL: $download_url"
curl -L -o "$filename" "$(echo "$download_url" | tr -d '\r')"
done
# Check if the file was downloaded
if [ -f "$filename" ]; then
echo "File $filename downloaded successfully."
else
echo "Failed to download $filename."
fi

Dataverse Download Handler

A JavaScript implementation for seamlessly downloading files from a Dataverse repository directly from your website.

Overview

This system facilitates file downloads from a Dataverse data server by:

  1. Allowing users to click on file links in HTML tables
  2. Querying the Dataverse API to find the file ID
  3. Generating a direct download URL
  4. Initiating the browser download

File Structure

your-website/
├── index.html             # Your main HTML file with download tables
├── proxy_server.py        # CORS proxy server for local testing
├── setup_local_env.sh     # Script to set up local testing environment
├── assets/
│   ├── js/
│   │   ├── dataverse-download.js   # The download handler script
│   │   └── ... (other JS files)
│   └── ... (other asset folders)
└── test_dataverse.sh      # Shell script for testing/reference (not used in git repo and is just for reference)

Installation

  1. Place dataverse-download.js in your website's assets/js/ directory
  2. Add the script tag to your HTML file, before the closing </body> tag:
<script src="assets/js/dataverse-download.js"></script>
  1. Ensure your HTML tables have links formatted like this: Use the href="#" to trigger the download and do not make this an actualy link to a file. The javascript will handle that.
<a href="#"><span style="color: rgb(0, 0, 0);">filename.zip</span></a>

How It Works

Download Logic

  1. Link Setup: When the page loads, the script finds all table links with href="#" and registers click event listeners.

  2. On Click: When a user clicks a download link:

    • The script extracts the filename from the link text
    • It queries the Dataverse API using the configured DOI
    • It searches for a file with a matching filename in the response
    • Once found, it gets the file ID
    • It constructs a direct download URL using this ID
    • It creates a temporary link element to initiate the download
  3. Time-Sensitive URLs: The implementation handles Dataverse's time-sensitive URLs correctly:

    • The direct API URL (https://archive.data.jhu.edu/api/access/datafile/${fileId}) is permanent
    • When accessed, this URL generates a fresh time-sensitive S3 URL and redirects to it
    • This ensures that even if the page is left open for hours, when a user clicks a link, they get a freshly generated URL with its full validity period (15 minutes)

Shell Script vs. JavaScript Implementation

The file test_dataverse.sh is a proof-of-concept shell script that demonstrates the same logic but for command-line use:

The JavaScript implementation follows the same logic but in a web-browser context.

Configuration

In dataverse-download.js, configure your dataset's DOI:

// DOI for the dataset
const DOI = "10.7281/T1WF3NZ7";

Replace this value with your dataset's DOI.

Local Testing

To test the download functionality locally, you need to set up the local environment and run two servers:

0. Set Up Local Environment

First, run the setup script to download all required assets from the C3VDv2 repository:

chmod +x setup_local_env.sh
./setup_local_env.sh

This script will:

  • Create the necessary folder structure (assets/bootstrap/css, assets/css, assets/img, assets/js, assets/data)
  • Download CSS files (Bootstrap, custom styles)
  • Download JavaScript files (jQuery, Bootstrap, load_csv_tables.js, video-modal.js)
  • Download image assets
  • Download CSV data files used by the tables

Note: You only need to run this script once, or whenever you want to update the assets from the remote repository.

1. Main Web Server

Start your main web server (serving the HTML files) on port 8000:

# Using Python 3
python3 -m http.server 8000

# Or using Python 2
python -m SimpleHTTPServer 8000

2. CORS Proxy Server

Due to CORS (Cross-Origin Resource Sharing) restrictions, the Dataverse API cannot be accessed directly from localhost. A proxy server is required to bypass these restrictions.

Start the proxy server on port 8001:

python3 proxy_server.py

The proxy server will:

  • Accept requests on http://localhost:8001
  • Forward them to the Dataverse API
  • Add CORS headers to the response

Testing

  1. Set up the environment (if you haven't already):

    ./setup_local_env.sh
  2. Start both servers:

    • Main server on port 8000
    • Proxy server on port 8001
  3. Open your browser and navigate to:

    http://localhost:8000
    
  4. Click on any download link in the tables

  5. The download should:

    • Show "Loading..." briefly
    • Fetch metadata from Dataverse via the proxy
    • Start the file download

Stopping the Servers

  • Main server: Press Ctrl+C in the terminal where it's running
  • Proxy server: Press Ctrl+C in the terminal where it's running, or kill the process:
    lsof -ti:8001 | xargs kill

Note on Production

In production (when deployed to a real web server), the proxy server may not be necessary if:

  • The production server can make server-side requests to the Dataverse API
  • Or if the Dataverse API allows CORS from your production domain

Troubleshooting

File Not Found

If you see "File not found in dataset" errors:

  • Check the console log to see the list of available files, the filename is case sensitive.
  • Ensure the filename in your HTML matches exactly with the filename in Dataverse
  • Verify the DOI is correct

Download Not Starting

If the download doesn't start:

  • Check browser console for errors
  • Make sure pop-up blockers aren't preventing the download
  • Verify network connectivity to the Dataverse server
@mayankgolhar
Copy link

Thanks, Don, the new download JavaScript has resolved the download error! I ended up using a couple of different public proxies as the original ones were not working for Chrome & Safari. But, could use the rest of the code as is! Appreciate the help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment