<?xml version="1.0" encoding="utf-8"?><feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><author><email>will.faught@example.com</email><name>Will Faught</name><uri>https://willfaught.com/paige</uri></author><id>tag:jimbo-tsai.github.io,2025-10-18:2025-10-18T11:07:00-05:00</id><link href="https://jimbo-tsai.github.io/jimbot/projects/atom.xml" rel="self" type="application/atom+xml"/><link href="https://jimbo-tsai.github.io/jimbot/projects/" rel="alternate" type="text/html"/><link href="https://jimbo-tsai.github.io/jimbot/projects/rss.xml" rel="alternate" type="application/rss+xml"/><rights type="html">Jimmy Tsai ©</rights><title type="html"> · Jimmy Tsai</title><updated>2025-11-18T12:32:52-05:00</updated><entry><author><email>will.faught@example.com</email><name>Will Faught</name><uri>https://willfaught.com/paige</uri></author><content type="html"><![CDATA[<script type="module" src="https://ajax.googleapis.com/ajax/libs/model-viewer/4.0.0/model-viewer.min.js"></script>
<div class="container" style="max-width: 80vw; margin: 0 auto; padding: 0 2vw 5vh 2vw;">
<!-- Wrapped everything inside the new animation envelope -->
<div class="project-animate-wrapper">
<div style="text-align: center; margin-bottom: 2vh; padding-top: 2vh;">
<p style="color: #60435f; font-size: 4rem; font-weight: bold; margin: 0;">Fujifilm XT-4 Cage</p>
</div>
<div style="background-color: #a8dcd9; color: #284e4b; padding: 1.25rem; border-radius: 8px; margin-bottom: 1.5rem;">
  I wanted to create a handle for my Fujifilm X-T4 so I could hold it to stabilize video shots. The Smallrig camera cage for the X-T4 costs around $70-$80 and that&rsquo;s out of my price range of $0 unfortunately, so I wanted to make a usable design that could be made for much more affordably (at the cost of bulk and weight). From scratch, the materials used are not free, but I was able to source everything from the Northwestern shop. This design is the fifth iteration of the camera rig, but there are a lot more to improve about the design. Additional changes in the design will be reflected as I update the website.
</div>
<div class="flex-container" style="display: flex; align-items: center; gap: 2vw; margin-top: 4vh;">
<div style="flex: 1.5; min-width: 40vw;">
    <model-viewer id="assembly-viewer" src="Assembly.gltf" camera-controls auto-rotate shadow-intensity="1.5" shadow-softness="0" exposure="0.8" environment-image="legacy" powerPreference="high-performance" interaction-prompt="none"></model-viewer>
</div>
<div class="rig-card" style="flex: 1; min-width: 300px;">
    <h3 style="font-family: 'Lexend Deca', sans-serif; margin-top: 0; color: #ffffff;">Specs</h3>
    <ul style="line-height: 1.8; list-style-type: none; padding-left: 0; font-size: 0.95rem; color: #ffffff;">
        <li><strong>Size:</strong> 32.1 x 8.3 x 14 cm</li>
        <li><strong>Weight:</strong> 1.32 kg</li>
        <li><strong>Assembly Time:</strong> 30 min</li>
    </ul>
</div>
</div>
<div class="flex-container" style="display: flex; align-items: stretch; gap: 2vw; flex-wrap: wrap; margin-top: 4vh; margin-bottom: 2vh;">
<div style="flex: 1; min-width: 20vw;">
    <div class="rig-card" style="width: 100%; height: 420px; display: flex; flex-direction: column; justify-content: center;">
        <h3 style="font-family: 'Lexend Deca', sans-serif; margin-top: 0; color: #ffffff;">Materials</h3>
        <ul style="line-height: 2.2; list-style-type: disc; padding-left: 1.5rem; font-size: 0.95rem; color: #ffffff; margin-bottom: 0;">
            <li>2020 Aluminum Extrusion</li>
            <li>2020 L Corner Connecter</li>
            <li>2020 Sliding T Nuts</li>
            <li>10-32 3/8" Hex Screws</li>
            <li>10-32 Washers</li>
            <li>1" Diameter Wood Dowels</li>
            <li>Small Wood Screw</li>
            <li>PLA Plastic</li>
        </ul>
    </div>
</div>
<div class="gallery-container" style="flex: 1.5; min-width: 30vw; height: 420px;">
    <div class="gallery-wrapper" style="width: 100%; height: 100%; overflow: hidden; border-radius: 8px;">
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
                
                    
                
            
        
        
        
        
        <div class="paige-gallery">
        
        <div class="align-items-center column-gap-3 d-flex flex-wrap justify-content-center row-gap-3">
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
        
            
                
        
                
        
                
            
                
        
                
        
                
            
                
        
                
        
                
            
                
        
                
                    
                
        
                
        
                
            
                
        
                
        
                
            
        
            
        
        
        
            
        
        
        
        
        
        
        
            
        
        
        
        
        
        
        
            
            
            
            
            
        
            
        
            
            
            
            
        
            
                
        
                
        
                
            
        
        
        
        
        
        
        <span class="paige-image">
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        <img   class="rounded-2"  crossorigin="anonymous"   height="3024"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/cage1.008503b8677326b626a4427f5da08f1886d164028cb27455644f3840454939f6.jpg"   style="height: 100%; height: auto; max-width: 100%; object-fit: cover; width: 100%"    width="4032" >
        </span>
        
        
        
        </div>
        
        </div>

    </div>
</div>
</div>
<div style="text-align: left; margin-bottom: 2vh; padding-top: 12vh;">
<h1 style="font-family: 'Lexend Deca', sans-serif; font-size: clamp(2rem, 5vw, 3rem); color: white; margin: 0;">XT-4 Attachment Base</h1>
</div>
<div class="flex-container" style="display: flex; align-items: stretch; max-height: 250px; gap: 2vw; margin-top: 4vh; margin-bottom: 6vh; overflow: hidden;">
<div style="flex: 1.5; min-width: 40vw; max-height: 250px;">
    <model-viewer id="cage-viewer" src="CameraCageV5.gltf" camera-controls auto-rotate shadow-intensity="1.5" shadow-softness="0" exposure="0.8" environment-image="legacy" powerPreference="high-performance" interaction-prompt="none"></model-viewer>
</div>
<div class="rig-card" style="flex: 1; min-width: 300px; max-height: 250px; display: flex; flex-direction: column; justify-content: center;">
    <h3 style="font-family: 'Lexend Deca', sans-serif; margin-top: 0; color: #ffffff;">Base Specs</h3>
    <ul style="line-height: 1.6; list-style-type: none; padding-left: 0; font-size: 0.95rem; color: #ffffff; margin-bottom: 0;">
        <li>Print with black Bambulab PLA</li>
        <li>Gyroid inner pattern and 25% infill.</li> 
        <li><a href="CameraCageV5.3mf" download style="color: #ffffff; text-decoration: underline;">Download CameraCageV5</a></li>
    </ul>
</div>
</div>
</div>
</div>
<div style="margin-top: 10vh;">
     
     
     
     
    
     
    
     
         
             
         
     
    
     
    
    
    
    
    <div style="margin: 0 auto; width: 80%;">
        <div id="grid-modalGallery-33f233b13d5c8944e840531446faba82" style="display: block; column-gap: 0.1rem; column-count: 3;" class="paige-modal-gallery"> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="0" aria-label="Slide 1" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="cage1.jpg"   class="rounded-0"  crossorigin="anonymous"   height="563"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/cage1_hub581ba93fcadd9aa778cb10a2bb7463d_482795_750x0_resize_q30_box.a9b1401e1f625f92e041c73e406a273a43733cf59ed2e9cf0bcf008fb3e5f89b.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="1" aria-label="Slide 2" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="cage2.jpg"   class="rounded-0"  crossorigin="anonymous"   height="563"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/cage2_hu657bfaa3ab566b4541a59cec306a6d69_628993_750x0_resize_q30_box.b0b8918e674031f857eff2bf18ef51e54b8beb48bd71a61c34dad7fa9aec5892.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="2" aria-label="Slide 3" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-1.jpg"   class="rounded-0"  crossorigin="anonymous"   height="1000"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-1_hud0a6e26ac6892c0f60f288c5b856019c_513000_750x0_resize_q30_box.bb66725c2b7a0520b2cf3156b7bc9106fc4f1edd1f0e2423b631dec96687b992.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="3" aria-label="Slide 4" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-2.jpg"   class="rounded-0"  crossorigin="anonymous"   height="1000"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-2_hu07f2ea73fbb4aec97564a17574350d14_366603_750x0_resize_q30_box.801171384514732737c2a4465a5057dc4716da117ac3d38a0012026ff739bdd9.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="4" aria-label="Slide 5" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-3.jpg"   class="rounded-0"  crossorigin="anonymous"   height="1000"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-3_hua4cab2d39d611e133d5858e47a5049bb_416907_750x0_resize_q30_box.6046ba830351a12fa83dd0d4e668081a8d56d0d82f948bf4d11c20f106e776c8.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="5" aria-label="Slide 6" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-4.jpg"   class="rounded-0"  crossorigin="anonymous"   height="1000"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-4_hu87253d86ce6848c7652f9d348c2402d0_596019_750x0_resize_q30_box.59ad58137c26bed03bf7a7739fd743cbbe504abbeffe6b2c728aab49ba660dcd.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="6" aria-label="Slide 7" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-5.jpg"   class="rounded-0"  crossorigin="anonymous"   height="563"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-5_huc95eae2a30ac346754b24eea771b36e9_370646_750x0_resize_q30_box.555650fa788da85702a883c44ce902149c955adf888ec2351c6c62afc0fece3b.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="7" aria-label="Slide 8" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-6.jpg"   class="rounded-0"  crossorigin="anonymous"   height="676"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-6_huf1edd7a77f889bf3a6ee8b03657639a3_235720_750x0_resize_q30_box.bc6e60c4fbe7897fa30e0d23fb0cfa32a5141e5ae8dd264dc8cf88e005db6677.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="8" aria-label="Slide 9" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-7.jpg"   class="rounded-0"  crossorigin="anonymous"   height="1000"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-7_hu06f3cbcab1b120b00bad03aee3f33ad7_579370_750x0_resize_q30_box.81b28ce82b9f8ba3968c18ae714a2b73a373abf735c867a70d17f3ea309d3cf3.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
                 
                
    
                <a href="#" class="magnify-target " data-bs-toggle="modal" data-bs-target="#modalGallery-33f233b13d5c8944e840531446faba82" 
                   data-bs-slide-to="9" aria-label="Slide 10" 
                   style="display: block; break-inside: avoid; opacity: 0; transform: translateY(10px); transition: transform 0.8s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.8s ease-in-out !important; overflow: hidden; border-radius: 0; margin-bottom: 0.1rem;"> 
                    
                    
                        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
    
        
    
    
    
        
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
    
        
            
                
                    
                
            
                
                    
                        
                            
                        
                    
                
            
                
                    
                        
                    
                
            
    
            
    
            
    
            
    
            
    
            
                
            
        
    
        
        
        
        
    
        
            
    
            
    
            
        
    
    
    
    
    
    
    <span class="paige-image">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <img  alt="xt4-cage-8.jpg"   class="rounded-0"  crossorigin="anonymous"   height="1000"   referrerpolicy="no-referrer"  src="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/xt4-cage-8_hu13868c67f228805d307240a73d486054_470781_750x0_resize_q30_box.78d7f73cd4df45ae22d1efc9666e33314c10c89af95c898440d7956fb5e1a145.jpg"   style="height: auto; width: 100%"    width="750" >
    </span>
    
                    
                </a> 
             
        </div>
    </div>
    
    <div class="modal fade" id="modalGallery-33f233b13d5c8944e840531446faba82" tabindex="-1" aria-hidden="true" style="outline: none;"> 
        <div class="modal-dialog modal-dialog-centered modal-xl" style="max-width: 90vw;"> 
            <div class="modal-content bg-transparent border-0"> 
                <div class="modal-header border-0 pb-4 justify-content-end"> 
                    <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button> 
                </div> 
                <div class="modal-body pt-0 px-2 text-center"> 
                    <div id="carousel-modalGallery-33f233b13d5c8944e840531446faba82" class="carousel slide" data-bs-interval="false"> 
                        <div class="carousel-inner"> 
                             
                                <div class="carousel-item active"> 
                                    <img src="/jimbot/projects/xt4cage/cage1.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/cage2.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-1.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-2.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-3.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-4.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-5.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-6.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-7.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                                <div class="carousel-item "> 
                                    <img src="/jimbot/projects/xt4cage/xt4-cage-8.jpg" class="d-block img-fluid" alt="Gallery Image" style="max-height: 80vh; margin: 0 auto; object-fit: contain;"> 
                                </div> 
                             
                        </div>
    
                        <button class="carousel-control-prev" type="button" data-bs-target="#carousel-modalGallery-33f233b13d5c8944e840531446faba82" data-bs-slide="prev">
                            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                            <span class="visually-hidden">Previous</span>
                        </button>
    
                        <button class="carousel-control-next" type="button" data-bs-target="#carousel-modalGallery-33f233b13d5c8944e840531446faba82" data-bs-slide="next">
                            <span class="carousel-control-next-icon" aria-hidden="true"></span>
                            <span class="visually-hidden">Next</span>
                        </button>
                    </div> 
                </div> 
            </div> 
        </div> 
    </div> 
    
    <script>
        (function() {
            function initGalleryStagger() {
                const container = document.getElementById("grid-modalGallery-33f233b13d5c8944e840531446faba82");
                if (!container) return;
                const items = container.querySelectorAll('.magnify-target');
                items.forEach((item, index) => {
                    const img = item.querySelector('img');
                    const triggerFade = () => {
                        const delay = 100 + (index * 30);
                        setTimeout(() => {
                            item.style.opacity = "1";
                            item.style.transform = "translateY(0)";
                        }, delay);
                    };
                    if (img && img.complete) triggerFade();
                    else if (img) img.addEventListener('load', triggerFade);
                });
            }
            
            const modalElement = document.getElementById("modalGallery-33f233b13d5c8944e840531446faba82");
            const carouselElement = document.getElementById("carousel-modalGallery-33f233b13d5c8944e840531446faba82");
            if (modalElement && carouselElement) {
                let isModalOpen = false;
    
                modalElement.addEventListener('show.bs.modal', function (event) {
                    const button = event.relatedTarget; 
                    const slideTo = button ? button.getAttribute('data-bs-slide-to') : null;
                    if (slideTo !== null) {
                        const index = parseInt(slideTo, 10);
                        setTimeout(() => {
                            let carouselInstance = bootstrap.Carousel.getInstance(carouselElement) || new bootstrap.Carousel(carouselElement, { interval: false });
                            carouselInstance.to(index);
                        }, 10);
                    }
                });
    
                modalElement.addEventListener('shown.bs.modal', function() {
                    isModalOpen = true;
                });
    
                modalElement.addEventListener('hide.bs.modal', function() {
                    isModalOpen = false;
                });
    
                
                document.addEventListener('keydown', function(e) {
                    if (!isModalOpen) return;
                    
                    let carouselInstance = bootstrap.Carousel.getInstance(carouselElement);
                    if (!carouselInstance) return;
    
                    if (e.key === 'ArrowLeft') {
                        e.preventDefault();
                        carouselInstance.prev();
                    } else if (e.key === 'ArrowRight') {
                        e.preventDefault();
                        carouselInstance.next();
                    }
                });
    
                modalElement.addEventListener('click', function(e) {
                    const isImg = e.target.tagName === 'IMG';
                    const isControl = e.target.closest('.carousel-control-prev') || e.target.closest('.carousel-control-next');
                    
                    if (!isImg && !isControl) {
                        const modalInstance = bootstrap.Modal.getInstance(modalElement);
                        if (modalInstance) modalInstance.hide();
                    }
                });
            }
            document.addEventListener("DOMContentLoaded", initGalleryStagger);
        })();
    </script>
    
    <style> 
    .paige-modal-gallery a img,
    .paige-modal-gallery a picture img {
        width: 102% !important;
        height: auto !important;
        margin-left: -1%;
        display: block;
        transition: transform 0.6s cubic-bezier(0.25, 1, 0.5, 1) !important;
        backface-visibility: hidden;
        will-change: transform;
        transform: translateZ(0);
    }
    .grayscale-thumbnail img,
    .grayscale-thumbnail picture img {
        filter: grayscale(100%) !important;
        transition: filter 0.6s cubic-bezier(0.25, 1, 0.5, 1) !important;
    }
    .grayscale-thumbnail:hover img,
    .grayscale-thumbnail:hover picture img {
        filter: grayscale(0%) !important;
    }
    .magnify-target {
        display: block;
        position: relative;
        background-color: #ffffff !important;
        clip-path: inset(0.5px);
        transform: translateZ(0);
        overflow: hidden;
    }
    .magnify-target::after {
        content: "";
        position: absolute;
        top: 0; left: 0; right: 0; bottom: 0;
        border: 1px solid #ffffff; 
        pointer-events: none;
        z-index: 10;
    }
    .magnify-target:hover img,
    .magnify-target:hover picture img {
        transform: scale(1.1) translateZ(0) !important;
    }
    .modal-body { display: flex; flex-direction: column; justify-content: center; } 
    .carousel-item.active { display: flex !important; justify-content: center; }
    .carousel-control-prev, .carousel-control-next { width: 5%; }
    </style>
</div>]]></content><id>tag:jimbo-tsai.github.io,2025-10-18:2025-10-18T11:07:00-05:00</id><link href="https://jimbo-tsai.github.io/jimbot/projects/xt4cage/" rel="alternate" type="text/html"/><published>2025-10-18T11:07:00-05:00</published><rights type="html">Jimmy Tsai ©</rights><summary type="html">A camera rig I made for my Fujifilm XT-4, made from aluminum extrusions</summary><title type="html">DIY Camera Rig</title><updated>2025-10-18T11:07:00-05:00</updated></entry></feed>