Last active
May 13, 2026 07:35
-
-
Save GIO013/3ceb6f2c05e5d9bce66cd8182f6981a4 to your computer and use it in GitHub Desktop.
Drone_Guide
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>DJI Mini 4 Pro — Cinematic Shot Guide</title> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@400;500;600;700&family=Noto+Sans+Georgian:wght@300;400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet"> | |
| <style> | |
| *{margin:0;padding:0;box-sizing:border-box} | |
| :root{ | |
| --bg:#0f1825;--surface:#1a2840;--card:#2a3e5c;--card2:#34496a; | |
| --border:#3e5273;--border2:#506890; | |
| --cyan:#00e5ff;--cyan2:#00b4d8;--orange:#ff6d00;--gold:#ffc400; | |
| --green:#00e676;--purple:#d500f9;--red:#ff1744;--teal:#1de9b6; | |
| --text:#e8eef5;--muted:#8aa3c2;--dim:#4a6380; | |
| --c1:#29b6f6;--c2:#ab47bc;--c3:#ef5350;--c4:#26a69a;--c5:#ffa726; | |
| --font-display:'Rajdhani',sans-serif; | |
| --font-geo:'Noto Sans Georgian',sans-serif; | |
| --font-mono:'JetBrains Mono',monospace; | |
| } | |
| html{scroll-behavior:smooth} | |
| body{background:var(--bg);color:var(--text);font-family:var(--font-display);min-height:100vh;overflow-x:hidden} | |
| body.geo{font-family:var(--font-geo)} | |
| /* ANIMATED BG */ | |
| .bg-grid{position:fixed;inset:0;z-index:0;pointer-events:none; | |
| background-image:linear-gradient(rgba(0,229,255,0.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,229,255,0.03) 1px,transparent 1px); | |
| background-size:48px 48px;mask-image:radial-gradient(ellipse at 50% 0%,black 20%,transparent 80%)} | |
| .bg-glow{position:fixed;top:-200px;left:50%;transform:translateX(-50%);width:800px;height:400px; | |
| background:radial-gradient(ellipse,rgba(0,180,216,0.07) 0%,transparent 70%);pointer-events:none;z-index:0} | |
| /* HEADER */ | |
| header{position:relative;z-index:10;padding:56px 32px 40px;text-align:center; | |
| border-bottom:1px solid var(--border); | |
| background:linear-gradient(180deg,rgba(0,229,255,0.04) 0%,transparent 100%)} | |
| .header-top{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:24px} | |
| .drone-glyph{font-size:52px;filter:drop-shadow(0 0 24px rgba(0,229,255,0.7));animation:float 3s ease-in-out infinite} | |
| @keyframes float{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-8px) rotate(2deg)}} | |
| .title-block{text-align:left} | |
| .title-sub{font-size:11px;letter-spacing:4px;color:var(--muted);text-transform:uppercase;margin-bottom:4px;font-weight:500} | |
| h1{font-size:clamp(22px,4vw,44px);font-weight:700;letter-spacing:2px;line-height:1; | |
| background:linear-gradient(135deg,var(--cyan) 0%,var(--cyan2) 50%,#0077b6 100%); | |
| -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text} | |
| .tagline{margin-top:12px;font-size:12px;letter-spacing:3px;color:var(--muted);text-transform:uppercase} | |
| .tagline span{color:var(--cyan);opacity:0.7} | |
| /* LANG SWITCHER */ | |
| .lang-bar{position:fixed;top:16px;right:20px;z-index:1000;display:flex;gap:6px; | |
| background:rgba(9,14,26,0.9);backdrop-filter:blur(12px); | |
| border:1px solid var(--border2);border-radius:24px;padding:4px} | |
| .lang-btn{padding:5px 14px;border-radius:20px;border:none;background:transparent; | |
| cursor:pointer;font-size:12px;font-weight:700;letter-spacing:1px;color:var(--muted); | |
| font-family:var(--font-display);transition:all 0.2s} | |
| .lang-btn.active{background:var(--cyan);color:#000} | |
| .lang-btn:hover:not(.active){color:var(--text);background:var(--border2)} | |
| /* STATS BAR */ | |
| .stats-bar{display:flex;justify-content:center;gap:32px;margin-top:28px;flex-wrap:wrap} | |
| .stat{text-align:center} | |
| .stat-n{font-size:28px;font-weight:700;color:var(--cyan);font-family:var(--font-mono)} | |
| .stat-l{font-size:9px;letter-spacing:2px;color:var(--muted);text-transform:uppercase;margin-top:2px} | |
| /* NAV FILTERS */ | |
| nav{position:sticky;top:0;z-index:100;background:rgba(5,8,15,0.95);backdrop-filter:blur(16px); | |
| border-bottom:1px solid var(--border);padding:0 20px} | |
| .nav-inner{display:flex;gap:0;overflow-x:auto;scrollbar-width:none;max-width:1400px;margin:0 auto} | |
| .nav-inner::-webkit-scrollbar{display:none} | |
| .nav-btn{padding:14px 18px;border:none;background:transparent;color:var(--muted); | |
| font-family:var(--font-display);font-size:12px;font-weight:600;letter-spacing:1px; | |
| cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent; | |
| transition:all 0.2s;text-transform:uppercase} | |
| .nav-btn.active{color:var(--cyan);border-bottom-color:var(--cyan)} | |
| .nav-btn:hover:not(.active){color:var(--text);border-bottom-color:var(--border2)} | |
| .nav-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:7px;vertical-align:middle} | |
| /* GRID */ | |
| main{position:relative;z-index:1;max-width:1400px;margin:0 auto;padding:28px 20px 60px} | |
| .section-divider{grid-column:1/-1;display:flex;align-items:center;gap:16px;margin:12px 0 4px} | |
| .section-divider h2{font-size:11px;font-weight:700;letter-spacing:3px;text-transform:uppercase;white-space:nowrap} | |
| .div-line{flex:1;height:1px} | |
| .div-count{font-family:var(--font-mono);font-size:10px;white-space:nowrap;opacity:0.4} | |
| .cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:16px} | |
| /* CARD */ | |
| .card{background:var(--card);border-radius:16px;border:1px solid var(--border);overflow:hidden; | |
| transition:transform 0.25s,box-shadow 0.25s;position:relative} | |
| .card::before{content:'';position:absolute;inset:0;border-radius:16px;opacity:0; | |
| transition:opacity 0.25s;pointer-events:none} | |
| .card:hover{transform:translateY(-4px)} | |
| .card:hover::before{opacity:1} | |
| .card-head{padding:13px 15px 11px;display:flex;align-items:center;gap:10px; | |
| border-bottom:1px solid var(--border)} | |
| .num-badge{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center; | |
| font-family:var(--font-mono);font-size:10px;font-weight:600;flex-shrink:0} | |
| .shot-title{flex:1;font-weight:700;font-size:12px;letter-spacing:0.5px} | |
| .diff-tag{font-size:8px;padding:3px 8px;border-radius:6px;font-weight:700;letter-spacing:1px; | |
| text-transform:uppercase;font-family:var(--font-mono)} | |
| /* DIAGRAM */ | |
| .diagram-area{padding:14px 13px 10px;background:#1f3250} | |
| .sticks-wrap{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:10px} | |
| .stick-col{display:flex;flex-direction:column;align-items:center;gap:5px} | |
| .stick-lbl{font-size:7px;font-weight:700;letter-spacing:1px;text-transform:uppercase; | |
| color:var(--muted);text-align:center;max-width:82px;line-height:1.3} | |
| .ctrl-mid{display:flex;flex-direction:column;align-items:center;gap:3px} | |
| .ctrl-mid span:first-child{font-size:20px} | |
| .ctrl-mid span:last-child{font-size:7px;color:var(--dim);letter-spacing:1px} | |
| .path-box{border:1px solid var(--border);border-radius:10px;overflow:hidden; | |
| background:#1a2c44;height:92px;position:relative} | |
| .path-box svg{width:100%;height:100%} | |
| .path-tag{position:absolute;bottom:5px;left:8px;font-size:7px;color:var(--muted); | |
| font-family:var(--font-mono);letter-spacing:1px;text-transform:uppercase;opacity:0.45} | |
| .auto-pill{position:absolute;top:5px;right:7px;font-size:7px;font-weight:700; | |
| letter-spacing:1px;padding:2px 7px;border-radius:8px;animation:pulse 1.8s infinite} | |
| @keyframes pulse{0%,100%{opacity:1}50%{opacity:0.35}} | |
| /* BODY */ | |
| .card-body{padding:11px 15px 13px} | |
| .shot-desc{font-size:11.5px;color:#b8c8dc;line-height:1.65;margin-bottom:8px;font-weight:400} | |
| .shot-tips{display:flex;gap:6px;align-items:flex-start} | |
| .tips-ico{font-size:12px;flex-shrink:0;margin-top:1px} | |
| .tips-txt{font-size:10.5px;color:var(--muted);line-height:1.55} | |
| .tips-txt b{color:var(--gold)} | |
| /* FOOTER */ | |
| footer{position:relative;z-index:1;border-top:1px solid var(--border); | |
| padding:32px;text-align:center;color:var(--muted);font-size:11px;letter-spacing:1px} | |
| footer p+p{margin-top:6px} | |
| footer span{color:var(--cyan)} | |
| .footer-logo{font-size:28px;margin-bottom:12px;filter:drop-shadow(0 0 10px rgba(0,229,255,0.4))} | |
| /* MODAL */ | |
| .modal-bg{position:fixed;inset:0;background:rgba(5,8,15,0.85);backdrop-filter:blur(10px);z-index:9999; | |
| display:none;align-items:flex-start;justify-content:center;padding:40px 20px;overflow-y:auto} | |
| .modal-bg.show{display:flex} | |
| .modal-card{background:var(--card);border:1px solid var(--border2);border-radius:16px; | |
| max-width:980px;width:100%;padding:0;position:relative;animation:slideIn .3s} | |
| @keyframes slideIn{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}} | |
| .modal-head{padding:20px 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:14px;position:sticky;top:0;background:var(--card);border-radius:16px 16px 0 0;z-index:2} | |
| .modal-head h3{font-size:18px;font-weight:700;flex:1;line-height:1.2} | |
| .modal-close{width:34px;height:34px;border-radius:10px;border:1px solid var(--border2);background:transparent;color:var(--text);cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;flex-shrink:0} | |
| .modal-close:hover{background:var(--border2)} | |
| .modal-body{padding:20px 24px 24px} | |
| .step-block{display:flex;gap:14px;margin-bottom:22px;padding-bottom:22px;border-bottom:1px solid var(--border)} | |
| @media (max-width:680px){.step-row{grid-template-columns:1fr!important}} | |
| .step-block:last-child{border-bottom:none;margin-bottom:0} | |
| .step-num{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-weight:700;font-size:14px;flex-shrink:0} | |
| .step-content{flex:1} | |
| .step-shot-tag{font-size:11px;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);margin-bottom:4px;text-transform:uppercase} | |
| .step-title{font-size:14px;font-weight:700;color:var(--text);margin-bottom:6px} | |
| .step-instr{font-size:12px;color:var(--muted);line-height:1.65} | |
| .step-instr b{color:var(--text)} | |
| .step-instr ul{margin-top:6px;padding-left:18px} | |
| .step-instr li{margin-bottom:3px} | |
| .combo-card-click{cursor:pointer} | |
| .combo-card-click:hover{transform:translateY(-4px)} | |
| /* Step-by-step details */ | |
| details summary::-webkit-details-marker{display:none} | |
| details[open] summary span:first-child{transform:rotate(90deg)} | |
| details summary:hover{opacity:0.85} | |
| /* HIDDEN */ | |
| .hidden{display:none!important} | |
| [lang-en],[lang-ka]{display:none} | |
| body.lang-en [lang-en]{display:revert} | |
| body.lang-ka [lang-ka]{display:revert} | |
| body:not(.lang-en):not(.lang-ka) [lang-en]{display:revert} | |
| </style> | |
| </head> | |
| <body class="lang-en"> | |
| <div class="bg-grid"></div> | |
| <div class="bg-glow"></div> | |
| <!-- LANG SWITCHER --> | |
| <div class="lang-bar"> | |
| <button class="lang-btn active" onclick="setLang('en',this)">EN</button> | |
| <button class="lang-btn" onclick="setLang('ka',this)">ქა</button> | |
| </div> | |
| <!-- HEADER --> | |
| <header> | |
| <div class="header-top"> | |
| <div class="drone-glyph">🚁</div> | |
| <div class="title-block"> | |
| <div class="title-sub" lang-en>Cinematic Flight Manual</div> | |
| <div class="title-sub" lang-ka>კინემატოგრაფიული ფრენის სახელმძღვანელო</div> | |
| <h1>DJI MINI 4 PRO</h1> | |
| </div> | |
| </div> | |
| <div class="tagline" lang-en>34 CINEMATIC SHOTS <span>·</span> JOYSTICK DIAGRAMS <span>·</span> FLIGHT PATHS <span>·</span> PRO TIPS</div> | |
| <div class="tagline" lang-ka>34 კინემატოგრაფიული გადაღება <span>·</span> ჯოისტიკის დიაგრამები <span>·</span> ფრენის მარშრუტები</div> | |
| <div class="stats-bar"> | |
| <div class="stat"><div class="stat-n">34</div><div class="stat-l" lang-en>Total Shots</div><div class="stat-l" lang-ka>გადაღება სულ</div></div> | |
| <div class="stat"><div class="stat-n">5</div><div class="stat-l" lang-en>Categories</div><div class="stat-l" lang-ka>კატეგორია</div></div> | |
| <div class="stat"><div class="stat-n">4K</div><div class="stat-l" lang-en>Max Resolution</div><div class="stat-l" lang-ka>მაქს. რეზოლუცია</div></div> | |
| <div class="stat"><div class="stat-n">10b</div><div class="stat-l" lang-en>D-Log M Bit Depth</div><div class="stat-l" lang-ka>D-Log M სიღრმე</div></div> | |
| </div> | |
| </header> | |
| <!-- NAV --> | |
| <nav> | |
| <div class="nav-inner" id="nav"></div> | |
| </nav> | |
| <!-- MAIN --> | |
| <main id="main"></main> | |
| <!-- FOOTER --> | |
| <!-- COMBOS SECTION --> | |
| <section id="combos" style="position:relative;z-index:1;max-width:1400px;margin:0 auto;padding:0 20px 80px"> | |
| <div style="border-top:1px solid #182236;padding-top:40px;margin-top:8px"> | |
| <div style="display:flex;align-items:center;gap:16px;margin-bottom:28px"> | |
| <span style="font-size:28px;filter:drop-shadow(0 0 12px rgba(0,229,255,0.6))">🎬</span> | |
| <div> | |
| <div style="font-size:10px;letter-spacing:3px;color:#4a6080;text-transform:uppercase;margin-bottom:3px" lang-en>Shot Combinations · Build Cinematic Sequences</div> | |
| <div style="font-size:10px;letter-spacing:3px;color:#4a6080;text-transform:uppercase;margin-bottom:3px" lang-ka>გადაღებების კომბინაციები · კინემატოგრაფიული სცენები</div> | |
| <div style="font-size:clamp(16px,2.5vw,26px);font-weight:700;letter-spacing:2px;color:#dde6f0" lang-en>HOW TO COMBINE SHOTS FOR GREAT VIDEO</div> | |
| <div style="font-size:clamp(16px,2.5vw,26px);font-weight:700;letter-spacing:2px;color:#dde6f0" lang-ka>როგორ გავაერთიანოთ გადაღებები კარგი ვიდეოსთვის</div> | |
| </div> | |
| </div> | |
| <div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:16px" id="combos-grid"></div> | |
| </div> | |
| </section> | |
| <footer> | |
| <div class="footer-logo">🚁</div> | |
| <p lang-en>Mode 2 Controller: <span>Left Stick</span> = Throttle (Up/Down) + Yaw (Rotate) · <span>Right Stick</span> = Pitch (Fwd/Back) + Roll (Left/Right)</p> | |
| <p lang-ka>რეჟიმი 2: <span>მარცხენა ჯოისტიკი</span> = სიმაღლე (ზემო/ქვემო) + ბრუნვა (Yaw) · <span>მარჯვენა ჯოისტიკი</span> = დახრა (წინ/უკან) + გადახრა (მარცხ/მარჯვ)</p> | |
| <p lang-en>Always shoot <span>D-Log M 10-bit</span> · Use <span>ND filters</span> · Follow the <span>180° shutter rule</span></p> | |
| <p lang-ka>ყოველთვის გადაიღეთ <span>D-Log M 10-bit</span> · გამოიყენეთ <span>ND ფილტრები</span> · <span>180° შატერის წესი</span></p> | |
| <p style="margin-top:16px;opacity:0.3;font-size:10px">DJI Mini 4 Pro Shot Guide · Built for Filmmakers</p> | |
| </footer> | |
| <script> | |
| const C={1:'#29b6f6',2:'#ab47bc',3:'#ef5350',4:'#26a69a',5:'#ffa726'}; | |
| const CATS={ | |
| 1:{ | |
| en:'Foundational Moves',ka:'საბაზისო მოძრაობები', | |
| diff:{en:'Beginner',ka:'დამწყები'} | |
| }, | |
| 2:{ | |
| en:'Intermediate Dynamic',ka:'საშუალო დონე', | |
| diff:{en:'Intermediate',ka:'საშუალო'} | |
| }, | |
| 3:{ | |
| en:'Advanced & Expert',ka:'მოწინავე ტექნიკა', | |
| diff:{en:'Advanced',ka:'მოწინავე'} | |
| }, | |
| 4:{ | |
| en:'Creative & Storytelling',ka:'კრეატიული გადაღება', | |
| diff:{en:'Creative',ka:'კრეატიული'} | |
| }, | |
| 5:{ | |
| en:'Mini 4 Pro Exclusive',ka:'Mini 4 Pro ექსკლუზიური', | |
| diff:{en:'Exclusive',ka:'ექსკლუზიური'} | |
| } | |
| }; | |
| // shots: [num,cat,icon, en_name,en_desc,en_tips, ka_name,ka_desc,ka_tips, ls,rs, pathKey,isAuto] | |
| const SHOTS=[ | |
| [1,1,'🎬', | |
| 'The Reveal','Camera pointed at foreground, fly forward and upward to unveil the landscape beyond.','ND16 · 1/60s shutter · Slow climb 1–2 m/s · Lock gimbal at horizon', | |
| 'გამოვლენა','კამერა წინ მდგომ ობიექტს მიუყენეთ, გაფრინდით წინ და ზემოთ — პეიზაჟი გამოვლინდება.','ND16 · 1/60 წმ · ნელი აღმავლობა 1–2 მ/წ · ჰორიზონტზე გიმბალის ჩაკეტება', | |
| {dx:0,dy:0.7,en:'CLIMB UP',ka:'ზევით'},{dx:0,dy:0.8,en:'FORWARD',ka:'წინ'},'forward-up',false], | |
| [2,1,'🤳', | |
| 'The Dronie','Start close to subject, fly backward and upward to reveal the vast environment around them.','ActiveTrack Trace mode · Max ascent 2 m/s · 10m up to 80m altitude', | |
| 'დრონი','სუბიექტთან ახლოდან დაიწყეთ, გაფრინდით უკან და ზემოთ — გარემო გამოჩნდება.','ActiveTrack Trace · მაქს. 2 მ/წ ზევით · 10-დან 80 მ-მდე', | |
| {dx:0,dy:0.7,en:'CLIMB UP',ka:'ზევით'},{dx:0,dy:-0.8,en:'BACKWARD',ka:'უკან'},'backward-up',false], | |
| [3,1,'🏗️', | |
| 'Pedestal Shot','Fly straight up or down without moving forward to emphasize height.','GPS mode for stability · Gimbal locked · 0.5 m/s rise for drama', | |
| 'პედესტალი','გაფრინდით პირდაპირ ზემოთ ან ქვემოთ, წინ მოძრაობის გარეშე — სიმაღლე ხაზგასმული.','GPS რეჟიმი · გიმბალი ჩაკეტილი · 0.5 მ/წ დრამატიზმისთვის', | |
| {dx:0,dy:1,en:'CLIMB MAX',ka:'ზევით მაქს.'},{dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},'up',false], | |
| [4,1,'✈️', | |
| 'The Flyover','Fly directly over subject at constant altitude maintaining a forward path.','Speed 4–6 m/s · Gimbal –45° approaching, –90° as you pass over', | |
| 'გადაფრენა','გაფრინდით სუბიექტის თავზე ერთი სიმაღლით, წინ მიმართულებით.','სიჩქარე 4–6 მ/წ · გიმბალი –45° მიახლოებისას, –90° გადაფრენისას', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:0.9,en:'FORWARD',ka:'წინ'},'forward',false], | |
| [5,1,'↔️', | |
| 'Side Slide','Fly sideways at constant height — cinematic dolly effect.','ND32 in daylight · Keep subject at 1/3 frame · Smooth momentum', | |
| 'გვერდული სლაიდი','გაფრინდით გვერდულად მუდმივ სიმაღლეზე — "დოლი" ეფექტი.','ND32 დღისით · სუბიექტი კადრის 1/3-ში · გლუვი მოძრაობა', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0.9,dy:0,en:'ROLL RIGHT',ka:'გვერდით მარჯვნივ'},'slide',false], | |
| [6,1,'🌅', | |
| 'Tilt-Up Reveal','Fly slowly forward at constant altitude while rotating gimbal from –90° (straight down) up to the horizon. Ground fills frame then opens to landscape.', 'Use gimbal dial not stick · 3–5 m/s forward · Start at –90° · Tilt to 0° over 5–8s · Best at dawn', | |
| 'გიმბალის გამოვლენა','ნელ-ნელა წინ გაფრინდით სტაბილურ სიმაღლეზე, გიმბალი –90°-დან ჰორიზონტამდე ატრიალეთ. ნიადაგი ივსება კადრს, შემდეგ — პეიზაჟი.','გიმბ. დისკი, არა ჯოისტ. · 3–5 მ/წ · –90°-დან 0°-მდე 5–8 წმ-ში · გარიჟრაჟი', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:0.6,en:'FORWARD',ka:'წინ'},'tilt-reveal',false], | |
| [7,2,'⭕', | |
| 'The Orbit','Rotate around a central subject while keeping it perfectly framed.','POI mode · Radius 15–30m · 30–40% speed · Obstacle avoidance ON', | |
| 'ორბიტა','სუბიექტის გარშემო ბრუნვა მუდმივი კადრირებით.','POI რეჟიმი · 15–30მ რადიუსი · 30–40% სიჩქარე · დაბრკოლება ჩართული', | |
| {dx:0.8,dy:0,en:'YAW RIGHT',ka:'ბრუნვა მარჯვნივ'},{dx:0,dy:0,en:'POI AUTO',ka:'POI ავტომატური'},'orbit',true], | |
| [8,2,'🎭', | |
| 'The Parallax','Fly sideways while rotating head opposite — background moves faster than subject.','Manual sticks only · Opposite yaw to roll · Practice first', | |
| 'პარალაქსი','გვერდულ ფრენასთან ერთად დრონის ცხვირი საპირისპირო მიმართულებით ტრიალებს.','მხოლოდ მექანიკური ჯოისტიკები · პრაქტიკა საჭირო', | |
| {dx:-0.8,dy:0,en:'YAW LEFT',ka:'ბრუნვა მარცხნივ'},{dx:0.8,dy:0,en:'ROLL RIGHT',ka:'გვერდით მარჯვნივ'},'parallax',false], | |
| [9,2,'🏎️', | |
| 'Tracking Shot','Follow a moving subject from side, back, or front at consistent speed.','ActiveTrack 360° · Tight subject box · Keep 10–15m distance', | |
| 'თრექინგი','მოძრავი სუბიექტის თანმიმდევრული თვალყური გვერდიდან, უკნიდან ან წინიდან.','ActiveTrack 360° · 10–15მ მანძილი', | |
| {dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},{dx:0.7,dy:0,en:'Roll (follow)',ka:'გდხ (თვალყური)'},'tracking',true], | |
| [10,2,'🚀', | |
| 'The Rocket','Position directly over subject, camera at –90°, fly straight up.','Lock gimbal at –90° · Ascend 3 m/s · Record 10m to 100m+', | |
| 'რაკეტა','სუბიექტის ზემოთ, კამერა –90°, პირდაპირ ზევით.','გიმბალი –90° · 3 მ/წ ზემოთ · 10-დან 100+ მ', | |
| {dx:0,dy:1,en:'CLIMB MAX',ka:'ზევით მაქს.'},{dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},'rocket',false], | |
| [11,2,'🌀', | |
| 'Rocket with a Twist','Rocket shot but slowly rotate (yaw) the drone as it ascends — spiral.','Ascend + yaw simultaneously · 5–10°/sec yaw · Smooth sticks', | |
| 'სპირალური რაკეტა','"რაკეტა" მაგრამ ბრუნვით — სპირალური პერსპექტივა.','ამაღლება + ბრუნვა ერთდროულად · 5–10°/წ', | |
| {dx:0.6,dy:1,en:'CLIMB + ROTATE',ka:'ზევით + ბრუნვა'},{dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},'up-spin',false], | |
| [12,2,'👁️', | |
| "Bird's Eye",'Fly forward camera locked at –90° — top-down patterns and textures.','Gimbal lock –90° · 30–50m AGL · Roads/rivers/fields look stunning', | |
| 'ჩიტის თვალი','კამერა –90°, ზევიდან ქვემოთ — ნახაზები და ტექსტურები.','გიმბალი –90° · 30–50 მ · გზები/მდინარეები/მინდვრები', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:0.8,en:'FORWARD',ka:'წინ'},'birdseye',false], | |
| [13,2,'💨', | |
| 'Low and Fast','Fly very close to the ground at high speed — intense motion and energy.','Sport mode · 2–4m AGL · ND64/128 for blur · Obstacle avoidance ON', | |
| 'დაბალი და სწრაფი','ძალიან დაბლა და სწრაფად — ინტენსიური მოძრაობა.','სპორტ-რეჟიმი · 2–4 მ · ND64/128 · დაბრკოლება ჩართული', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:1,en:'FORWARD MAX',ka:'წინ მაქს.'},'forward-fast',false], | |
| [14,3,'🌀', | |
| 'The Helix','Orbit subject while simultaneously ascending — widening spiral.','POI orbit + upward left stick · Slowly increase radius as you rise', | |
| 'ჰელიქსი','ბრუნვა სუბიექტის გარშემო ამავდროულად ზემოთ — სპირალი.','POI ბრუნვა + ზემოთ · ნელ-ნელა გაზარდეთ რადიუსი', | |
| {dx:0.6,dy:0.8,en:'CLIMB + ROTATE',ka:'ზევით + ბრუნვა'},{dx:0,dy:0,en:'POI AUTO',ka:'POI ავტომატური'},'helix',false], | |
| [15,3,'🎥', | |
| 'The Dolly Zoom','Fly backward while zooming in — disorienting Hitchcock perspective shift.','Mini 4 Pro 2× optical zoom · Fly back slowly + zoom in · 4–7s duration', | |
| 'დოლი-ზუმი','უკან ფრენა ზუმ-შემოსვლასთან ერთად — ჰიჩქოქის ეფექტი.','2× ოპტ. ზუმი · ნელ-ნელა უკან + ზუმ-შემოსვლა · 4–7 წმ', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:-0.8,en:'BACKWARD',ka:'უკან'},'dolly-zoom',false], | |
| [16,3,'📐', | |
| 'The Rising Orbit','Standard orbit while slowly gaining altitude and tilting gimbal down.','POI orbit + left stick up + manual gimbal tilt simultaneously', | |
| 'ამომავალი ორბიტა','ჩვეულებრივი ორბიტა სიმაღლის ნელ-ნელა მომატებით.','POI ბრუნვა + მარცხ. ჯოისტ. ზემოთ + გიმბ. ქვემოთ', | |
| {dx:0.7,dy:0.6,en:'ROTATE + CLIMB',ka:'ბრუნვა + ზევით'},{dx:0,dy:0,en:'POI AUTO',ka:'POI ავტომატური'},'rising-orbit',false], | |
| [17,3,'🕳️', | |
| 'FPV Fly-Through','Fly through narrow gaps — windows, arches, branches. One-take immersive shots.','Sport mode · Disable obstacle avoidance · Pre-fly path visually first', | |
| 'FPV გატარება','ვიწრო გახსნილობებში გატარება — ფანჯრები, თაღები, ტოტები.','სპორტ-რეჟიმი · გამორთეთ დაბრკოლება · წინასწარ მოამზადეთ მარშრუტი', | |
| {dx:0,dy:0,en:'TRIM ONLY',ka:'მხოლოდ ბალანსი'},{dx:0,dy:1,en:'FORWARD FULL',ka:'წინ სრულად'},'fpv',false], | |
| [18,3,'⏱️', | |
| 'Aerial Hyperlapse','Automated waypoint path with interval photos — time compression.','Hyperlapse > Free/Circle · 2–5s intervals · 1 m/s · 300+ frames minimum', | |
| 'ჰაიპერლეფსი','ავტომატური მარშრუტი ინტერვალური ფოტოებით — დრო კომპრესირდება.','ჰაიპ. > Free/Circle · 2–5 წმ ინტ. · 1 მ/წ · 300+ კადრი', | |
| {dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},{dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},'hyperlapse',true], | |
| [19,3,'🛗', | |
| 'The Space Elevator','Vertical pedestal combined with zoom — subject stays same size, background warps.','Ascend + zoom in with 2× lens · Very slow movement · Keep subject centered', | |
| 'სივრცის ლიფტი','ვერტიკალური ამაღლება ზუმ-შემოსვლასთან — სუბიექტი ერთ ზომაში რჩება.','ამაღლება + 2× ზუმ-შემოსვლა · ძალიან ნელი · სუბიექტი ცენტრში', | |
| {dx:0,dy:0.8,en:'CLIMB UP',ka:'ზევით'},{dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},'space-elevator',false], | |
| [20,3,'🐱', | |
| 'Cat-and-Mouse','Drone flies in front of moving subject, going backward — subject chases camera.','ActiveTrack Spotlight or manual reverse · 8–12m gap · Sport mode for fast subjects', | |
| 'კატა-თაგვი','დრონი სუბიექტის წინ, ბრუნავს უკან — სუბიექტი "დევნის" კამერას.','ActiveTrack Spotlight ან ხელით · 8–12 მ · სპ. რეჟიმი', | |
| {dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},{dx:0,dy:-0.8,en:'BACKWARD',ka:'უკან'},'cat-mouse',false], | |
| [21,4,'🪃', | |
| 'The Boomerang','Half-circle arc around subject combining forward flight and yaw.','Gentle forward + continuous yaw · Keep subject at edge of frame', | |
| 'ბუმერანგი','ნახევარწრიული რკალი სუბიექტის გარშემო — წინ+ბრუნვა.','ნელი წინ + მუდმივი ბრუნვა · სუბ. კადრის კიდეში', | |
| {dx:0.7,dy:0,en:'YAW RIGHT',ka:'ბრუნვა მარჯვნივ'},{dx:0,dy:0.6,en:'FORWARD',ka:'წინ'},'boomerang-arc',false], | |
| [22,4,'🌑', | |
| 'Shadow Chasing','Fly low with camera angled down to capture drone\'s own shadow over terrain.','Best at golden hour (long shadows) · 5–10m AGL · Sand/grass/snow', | |
| 'ჩრდილის დევნა','დაბალი ფრენა, კამერა ქვემოთ — დრონის ჩრდილი გადაღება.','საუკეთესო ოქროს საათზე · 5–10 მ · ქვიშა/ბალახი/თოვლი', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:0.6,en:'FORWARD',ka:'წინ'},'shadow',false], | |
| [23,4,'🏗️', | |
| 'The Crane Reveal','Start high framing sky, descend slowly to reveal subject below.','Descend 1 m/s + tilt gimbal down · Start 40m, end 5m · Film-style opener', | |
| 'კრანი','მაღლიდან ჩამოსვლა — ცა→სუბიექტი გამოვლება.','1 მ/წ ჩამოსვლა + გიმბ. ქვემოთ · 40მ-დან 5 მ-მდე', | |
| {dx:0,dy:-0.7,en:'DESCEND',ka:'ქვევით'},{dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},'crane',false], | |
| [24,4,'🌊', | |
| 'The Split Horizon','Fly along coastline keeping the horizon line perfectly splitting the frame.','Gimbal –20° to –30° · Maintain exact altitude · Sunrise/golden hour magic', | |
| 'ჰორიზონტის გამყოფი','სანაპიროს გასწვრივ ფრენა — ჰორიზონტი კადრის შუაში.','გიმბ. –20° – –30° · ზუსტი სიმაღლე · გარიჟრაჟი', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0.8,dy:0,en:'Roll RIGHT',ka:'გდხ. →'},'split-horizon',false], | |
| [25,4,'👁️', | |
| 'The Invisible Gimbal','Fly freely in any direction — camera stays locked on subject via Spotlight 2.0.','Spotlight 2.0 mode · Camera auto-locks while you fly anywhere', | |
| 'უხილავი გიმბალი','თავისუფალი ფრენა — კამერა სუბიექტზე ჩაკეტილი Spotlight 2.0-ით.','Spotlight 2.0 · კამერა ავტომატურად ჩაკეტება', | |
| {dx:0,dy:0,en:'Yaw FREE',ka:'ბრუნვა თავის.'},{dx:0,dy:0,en:'FLY FREELY',ka:'თავისუფალი ფრენა'},'spotlight',true], | |
| [26,4,'💧', | |
| 'Ground Skim','Skim inches above flat surface at moderate speed — ultra-cinematic feel.','2m AGL max · ND128 for motion blur · Water reflections = stunning', | |
| 'ზედაპირის სრიალი','ზედაპირის ზემოთ სანტიმეტრებზე ფრენა — კინემატოგრაფიული.','მაქს. 2 მ · ND128 · წყლის ასახვა = შთამბეჭდავი', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:0.75,en:'FORWARD',ka:'წინ'},'ground-skim',false], | |
| [27,4,'🔄', | |
| 'The Pendulum','Two passes: L→R then R→L at same altitude. Cut between them in edit.','Match altitude and speed both passes · Cut in edit for rhythm effect', | |
| 'ქანქარა','ორი გასვლა: მარ.→მარჯ. შემდეგ მარჯ.→მარ. — მონტაჟში ჭრა.','ერთი სიმაღლე ორივე გასვლაზე · მონტ-ში ჭრა', | |
| {dx:0,dy:0,en:'NO INPUT',ka:'უმოძრაო'},{dx:0,dy:0,en:'Roll L ↔ R',ka:'Roll ← →',both:true},'pendulum',false], | |
| [28,4,'🔍', | |
| 'Compression Orbit','Orbit with 2× zoom from large radius — background appears to wrap around subject.','POI orbit 50m+ radius · Enable 2× zoom · Background dramatically compressed', | |
| 'კომპრესიის ორბიტა','ბრუნვა 2× ზუმით დიდი რადიუსიდან — ფონი "ეხვევა" სუბიექტს.','POI 50მ+ · 2× ზუმი · ფონი კომპრესირდება', | |
| {dx:0.8,dy:0,en:'YAW RIGHT',ka:'ბრუნვა მარჯვნივ'},{dx:0,dy:0,en:'POI AUTO',ka:'POI ავტომატური'},'compression-orbit',false], | |
| [29,5,'🤖', | |
| 'MasterShots Auto','DJI AI executes 10 cinematic moves automatically and edits a short film.','Select subject → Tap MasterShots → Best at 20–50m range · Clear surroundings', | |
| 'MasterShots ავტო','DJI AI ავტომატურად ასრულებს 10 კინემ. მოძრაობას და ამონტაჟებს.','სუბ. აირჩიეთ → MasterShots → 20–50 მ · ღია სივრცე', | |
| {dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},{dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},'auto-mode',true], | |
| [30,5,'🪃', | |
| 'QuickShot: Boomerang','Automated boomerang arc executed by the drone\'s flight controller.','Subject stationary · 15–25m distance · Open area · ~30 seconds auto-flight', | |
| 'QuickShot: ბუმ-ი','ავტომატური ბუმერანგი — დრონი თვითონ ასრულებს.','სუბ. უძრავი · 15–25 მ · ღია · ~30 წმ', | |
| {dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},{dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},'boomerang-arc',true], | |
| [31,5,'🪐', | |
| 'QuickShot: Asteroid','Drone flies backward/up creating a tiny-planet sphere effect in-camera.','Unique to DJI models · Processed in-camera · 25m+ distance works best', | |
| 'QuickShot: ასტეროიდი','კამერა "პატარა პლანეტის" ეფექტს ქმნის — დრონი უკან/ზემოთ.','DJI-ს უნიკალური · კამერაში დამუშავება · 25მ+', | |
| {dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},{dx:0,dy:0,en:'AUTO',ka:'ავტომატური'},'asteroid',true], | |
| [32,5,'🔄', | |
| 'ActiveTrack 360° Spiral','ActiveTrack subject lock + manual orbit = drone spirals away while cam stays on subject.','ActiveTrack lock + manual orbit input · Best on stationary subjects', | |
| 'ActiveTrack 360° სპირ.','ActiveTrack ჩაკეტვა + ხელ. ბრუნვა = სპირალი სუბ. ჩაკ.','ActiveTrack + ხელ. ბრუნვა · სტატ. სუბ.', | |
| {dx:0.7,dy:0.5,en:'CLIMB + ROTATE',ka:'ზევით + ბრუნვა'},{dx:0,dy:0,en:'AT360 AUTO',ka:'AT360 ავტომატური'},'at360-spiral',true], | |
| [33,5,'🐢', | |
| '4K/60fps Slow-Mo','Shoot at 60fps, slow to 24fps in edit = 2.5× slow motion at full 4K resolution.','Set 1/120s shutter at 60fps · ND16 typically needed · Capture waves/sports/wildlife', | |
| '4K/60fps ნელი კადრი','60fps-ზე გადაღება, 24fps-ზე შენელება = 2.5× სლო-მო.','1/120 წმ · ND16 · ტალღები/სპორტი/ბუნება', | |
| {dx:0,dy:0,en:'SETTINGS',ka:'პარამეტრები'},{dx:0,dy:0.7,en:'FORWARD',ka:'წინ'},'slow-mo',false], | |
| [34,5,'🎞️', | |
| 'D-Log M Color Grade','Shoot D-Log M for maximum dynamic range — apply cinematic LUT in post.','D-Log M profile + ND filters · Apply DJI LUTs in DaVinci Resolve/Premiere · 10-bit', | |
| 'D-Log M კოლ. გრეიდი','D-Log M — მაქსიმ. დინამიური დიაპაზონი, LUT-ი პოსტ-პროდში.','D-Log M + ND · DaVinci/Premiere · 10-bit', | |
| {dx:0,dy:0,en:'SETTINGS',ka:'პარამეტრები'},{dx:0,dy:0,en:'SETTINGS',ka:'პარამეტრები'},'dlog-m',false], | |
| ]; | |
| // ─── FLIGHT PATH SVGs ─────────────────────────────────────────────── | |
| function fp(key,c){ | |
| const f={ | |
| 'forward':(c)=>` | |
| <line x1="10" y1="70" x2="270" y2="70" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="12" y="82" fill="#7a92b0" font-size="7" font-family="monospace">GROUND</text> | |
| <line x1="245" y1="40" x2="42" y2="40" stroke="${c}" stroke-width="2" stroke-dasharray="6,3" opacity=".5"/> | |
| <polygon points="36,40 48,35 48,45" fill="${c}" opacity=".85"/> | |
| <text x="240" y="44" font-size="15">🚁</text> | |
| <text x="80" y="28" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← FORWARD</text>`, | |
| 'forward-fast':(c)=>` | |
| <line x1="10" y1="62" x2="270" y2="62" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="12" y="74" fill="#7a92b0" font-size="7" font-family="monospace">GROUND 2-4m</text> | |
| <line x1="266" y1="34" x2="240" y2="34" stroke="${c}" stroke-width="1" opacity=".12"/> | |
| <line x1="268" y1="39" x2="242" y2="39" stroke="${c}" stroke-width="1" opacity=".08"/> | |
| <line x1="235" y1="37" x2="44" y2="37" stroke="${c}" stroke-width="2.5" stroke-dasharray="7,2" opacity=".65"/> | |
| <polygon points="40,37 52,31 52,43" fill="${c}" opacity=".9"/> | |
| <text x="240" y="42" font-size="15">🚁</text> | |
| <text x="80" y="22" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← FAST + LOW</text>`, | |
| 'tilt-reveal':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="14" y="84" fill="#7a92b0" font-size="7" font-family="monospace">GROUND</text> | |
| <text x="244" y="58" font-size="16">🚁</text> | |
| <line x1="232" y1="52" x2="42" y2="52" stroke="${c}" stroke-width="2" stroke-dasharray="6,3" opacity=".6"/> | |
| <polygon points="38,52 50,47 50,57" fill="${c}" opacity=".85"/> | |
| <text x="55" y="38" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← FORWARD · CONSTANT ALT</text> | |
| <path d="M 255 66 Q 255 46 240 34" stroke="${c}" stroke-width="1.5" fill="none" opacity=".65"/> | |
| <polygon points="238,30 234,41 243,39" fill="${c}" opacity=".75"/> | |
| <text x="220" y="28" fill="${c}" font-size="7" font-family="monospace">GIMBAL</text> | |
| <text x="220" y="36" fill="${c}" font-size="7" font-family="monospace">–90°→0°</text> | |
| <text x="218" y="66" fill="${c}" font-size="16" opacity=".5">📷</text> | |
| <text x="60" y="68" fill="${c}" font-size="7" font-family="monospace">USE GIMBAL DIAL — NOT STICK</text>`, | |
| 'forward-up':(c)=>` | |
| <line x1="10" y1="80" x2="270" y2="80" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="12" y="90" fill="#7a92b0" font-size="7" font-family="monospace">GROUND</text> | |
| <text x="232" y="76" font-size="16">🚁</text> | |
| <path d="M 244 70 L 56 18" stroke="${c}" stroke-width="2.5" stroke-dasharray="7,3" fill="none" opacity=".7"/> | |
| <polygon points="52,15 66,20 60,28" fill="${c}" opacity=".9"/> | |
| <line x1="244" y1="70" x2="244" y2="20" stroke="${c}" stroke-width="1" opacity=".2" stroke-dasharray="3,3"/> | |
| <line x1="244" y1="70" x2="56" y2="70" stroke="${c}" stroke-width="1" opacity=".2" stroke-dasharray="3,3"/> | |
| <text x="208" y="55" fill="${c}" font-size="7" font-family="monospace" opacity=".5">↑ ALT</text> | |
| <text x="118" y="78" fill="${c}" font-size="7" font-family="monospace" opacity=".5">← DIST</text> | |
| <text x="80" y="12" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↖ FORWARD + CLIMBING</text>`, | |
| 'backward-up':(c)=>` | |
| <line x1="10" y1="80" x2="270" y2="80" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="12" y="90" fill="#7a92b0" font-size="7" font-family="monospace">GROUND</text> | |
| <circle cx="50" cy="74" r="6" fill="${c}" opacity=".6"/> | |
| <text x="35" y="70" font-size="16">🚁</text> | |
| <text x="55" y="82" fill="${c}" font-size="7" font-family="monospace">START</text> | |
| <path d="M 62 68 L 232 16" stroke="${c}" stroke-width="2.5" stroke-dasharray="7,3" fill="none" opacity=".7"/> | |
| <polygon points="236,13 222,18 230,26" fill="${c}" opacity=".9"/> | |
| <text x="218" y="12" font-size="16">🚁</text> | |
| <text x="218" y="10" fill="${c}" font-size="7" font-family="monospace">END</text> | |
| <circle cx="40" cy="74" r="5" fill="${c}" opacity=".4"/> | |
| <text x="100" y="40" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↗ BACKWARD + CLIMBING</text>`, | |
| 'up':(c)=>` | |
| <line x1="10" y1="78" x2="270" y2="78" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <circle cx="140" cy="74" r="5" fill="${c}" opacity=".5"/> | |
| <text x="148" y="76" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="140" y1="69" x2="140" y2="14" stroke="${c}" stroke-width="2" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="140,10 135,22 145,22" fill="${c}" opacity=".9"/> | |
| <text x="128" y="8" font-size="15">🚁</text> | |
| <text x="152" y="42" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↑ STRAIGHT UP</text>`, | |
| 'slide':(c)=>` | |
| <line x1="10" y1="72" x2="270" y2="72" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <rect x="126" y="55" width="12" height="14" fill="${c}" opacity=".2" rx="2"/> | |
| <text x="116" y="51" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="25" y1="38" x2="236" y2="38" stroke="${c}" stroke-width="2" stroke-dasharray="6,3" opacity=".5"/> | |
| <polygon points="240,38 228,33 228,43" fill="${c}" opacity=".85"/> | |
| <text x="12" y="42" font-size="15">🚁</text> | |
| <text x="140" y="26" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">→ LATERAL SLIDE</text>`, | |
| 'orbit':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN VIEW</text> | |
| <circle cx="140" cy="52" r="7" fill="${c}" opacity=".7"/> | |
| <text x="148" y="54" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <circle cx="140" cy="52" r="34" stroke="${c}" stroke-width="1.5" fill="none" stroke-dasharray="5,3" opacity=".4"/> | |
| <line x1="140" y1="52" x2="174" y2="52" stroke="${c}" stroke-width="1" opacity=".22" stroke-dasharray="3,3"/> | |
| <text x="150" y="49" fill="${c}" font-size="7" font-family="monospace" opacity=".45">15-30m</text> | |
| <text x="167" y="20" font-size="14">🚁</text> | |
| <path d="M 177 20 Q 187 38 175 52" stroke="${c}" stroke-width="2" fill="none" opacity=".7"/> | |
| <polygon points="175,56 169,46 179,46" fill="${c}" opacity=".8"/> | |
| <text x="188" y="38" fill="${c}" font-size="9" font-weight="bold" font-family="monospace">⟳ ORBIT</text>`, | |
| 'parallax':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN VIEW</text> | |
| <circle cx="95" cy="52" r="7" fill="${c}" opacity=".7"/> | |
| <text x="82" y="72" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <rect x="184" y="34" width="52" height="30" stroke="#4a6080" stroke-width="1" fill="none" stroke-dasharray="3,3" rx="3" opacity=".5"/> | |
| <text x="186" y="52" fill="#7a92b0" font-size="7" font-family="monospace">BACKGROUND</text> | |
| <line x1="25" y1="46" x2="156" y2="46" stroke="${c}" stroke-width="2" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="160,46 148,41 148,51" fill="${c}" opacity=".85"/> | |
| <text x="12" y="50" font-size="14">🚁</text> | |
| <path d="M 28 40 Q 18 28 12 30" stroke="#ff6d00" stroke-width="1.5" fill="none" opacity=".7"/> | |
| <polygon points="12,30 18,22 14,30" fill="#ff6d00" opacity=".7"/> | |
| <text x="15" y="22" fill="#ff6d00" font-size="7" font-weight="bold" font-family="monospace">YAW←</text> | |
| <text x="98" y="28" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">BODY→</text>`, | |
| 'tracking':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="174" y="60" font-size="14">🏎️</text> | |
| <line x1="167" y1="68" x2="228" y2="68" stroke="${c}" stroke-width="2" stroke-dasharray="4,2" opacity=".5"/> | |
| <polygon points="232,68 220,63 220,73" fill="${c}" opacity=".7"/> | |
| <text x="44" y="54" font-size="16">🚁</text> | |
| <line x1="64" y1="48" x2="161" y2="56" stroke="${c}" stroke-width="1.5" stroke-dasharray="4,3" opacity=".35"/> | |
| <text x="90" y="76" fill="${c}" font-size="7" font-family="monospace">10-15m</text> | |
| <text x="55" y="22" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">ACTIVETRACK — FOLLOWS SUBJECT</text>`, | |
| 'rocket':(c)=>` | |
| <line x1="10" y1="80" x2="270" y2="80" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <circle cx="140" cy="76" r="5" fill="${c}" opacity=".5"/> | |
| <text x="148" y="78" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="140" y1="71" x2="140" y2="14" stroke="${c}" stroke-width="2.5" stroke-dasharray="5,3" opacity=".6"/> | |
| <polygon points="140,10 134,22 146,22" fill="${c}" opacity=".9"/> | |
| <text x="128" y="10" font-size="14">🚁</text> | |
| <path d="M 152 12 L 165 28 L 178 12" stroke="${c}" stroke-width="1" fill="none" opacity=".28"/> | |
| <text x="180" y="22" fill="${c}" font-size="7" font-family="monospace">CAM -90°</text> | |
| <text x="28" y="44" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↑ UP · CAMERA POINTS DOWN</text>`, | |
| 'birdseye':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">CAMERA VIEW AT -90°</text> | |
| <line x1="0" y1="50" x2="280" y2="50" stroke="#4a6080" stroke-width="7" opacity=".8"/> | |
| <line x1="140" y1="0" x2="140" y2="90" stroke="#4a6080" stroke-width="4" opacity=".6"/> | |
| <rect x="35" y="18" width="38" height="22" fill="#2a4a3a" opacity=".6" rx="2"/> | |
| <rect x="198" y="56" width="32" height="18" fill="#2a4a3a" opacity=".6" rx="2"/> | |
| <circle cx="140" cy="47" r="6" fill="${c}" opacity=".4"/> | |
| <text x="126" y="45" font-size="13">🚁</text> | |
| <line x1="140" y1="42" x2="218" y2="42" stroke="${c}" stroke-width="1.5" stroke-dasharray="4,3" opacity=".5"/> | |
| <polygon points="222,42 210,37 210,47" fill="${c}" opacity=".7"/> | |
| <text x="50" y="28" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">→ FWD · LOOKING DOWN -90°</text>`, | |
| 'helix':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">SIDE VIEW</text> | |
| <line x1="10" y1="80" x2="270" y2="80" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <rect x="126" y="62" width="14" height="17" fill="${c}" opacity=".22" rx="2"/> | |
| <path d="M 140 75 C 170 68 170 52 140 45 C 110 38 110 22 140 14" stroke="${c}" stroke-width="2" fill="none" stroke-dasharray="4,3" opacity=".6"/> | |
| <polygon points="143,11 136,21 149,21" fill="${c}" opacity=".85"/> | |
| <text x="148" y="12" font-size="14">🚁</text> | |
| <line x1="256" y1="76" x2="256" y2="16" stroke="${c}" stroke-width="1" opacity=".22"/> | |
| <polygon points="256,12 252,22 260,22" fill="${c}" opacity=".4"/> | |
| <text x="162" y="40" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↑ ORBIT + CLIMB</text>`, | |
| 'up-spin':(c)=>` | |
| <line x1="10" y1="80" x2="270" y2="80" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <circle cx="140" cy="75" r="5" fill="${c}" opacity=".5"/> | |
| <path d="M 140 70 C 158 62 162 50 152 38 C 142 26 124 20 140 12" stroke="${c}" stroke-width="2" fill="none" stroke-dasharray="4,3" opacity=".6"/> | |
| <polygon points="142,9 135,19 148,18" fill="${c}" opacity=".85"/> | |
| <text x="148" y="10" font-size="14">🚁</text> | |
| <path d="M 116 40 A 10 10 0 0 1 130 30" stroke="${c}" stroke-width="1.5" fill="none" opacity=".5"/> | |
| <polygon points="130,30 122,24 122,32" fill="${c}" opacity=".5"/> | |
| <text x="152" y="44" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↑ UP + ROTATE (YAW)</text>`, | |
| 'dolly-zoom':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <circle cx="48" cy="60" r="8" fill="${c}" opacity=".6"/> | |
| <text x="52" y="50" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <text x="208" y="54" font-size="16">🚁</text> | |
| <line x1="66" y1="54" x2="210" y2="46" stroke="${c}" stroke-width="1.5" stroke-dasharray="4,3" opacity=".35"/> | |
| <path d="M 66 36 L 210 18" stroke="#ff6d00" stroke-width="1" opacity=".5" stroke-dasharray="3,3"/> | |
| <path d="M 66 64 L 210 74" stroke="#ff6d00" stroke-width="1" opacity=".5" stroke-dasharray="3,3"/> | |
| <text x="100" y="16" fill="#ff6d00" font-size="7" font-weight="bold" font-family="monospace">← ZOOM IN</text> | |
| <text x="220" y="28" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">DRONE BACK →</text>`, | |
| 'fpv':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <rect x="116" y="22" width="48" height="50" stroke="${c}" stroke-width="2" fill="none" stroke-dasharray="4,3" opacity=".8" rx="3"/> | |
| <text x="118" y="18" fill="${c}" font-size="7" font-family="monospace">GAP / WINDOW</text> | |
| <rect x="8" y="18" width="104" height="54" fill="#1a2c44" stroke="#4a6080" stroke-width="1" rx="2" opacity=".9"/> | |
| <rect x="168" y="18" width="100" height="54" fill="#1a2c44" stroke="#4a6080" stroke-width="1" rx="2" opacity=".9"/> | |
| <text x="14" y="52" font-size="16">🚁</text> | |
| <line x1="34" y1="45" x2="108" y2="45" stroke="${c}" stroke-width="2.5" stroke-dasharray="6,2" opacity=".7"/> | |
| <polygon points="112,45 100,39 100,51" fill="${c}" opacity=".9"/> | |
| <text x="28" y="14" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">→ FULL SPEED THROUGH GAP</text>`, | |
| 'hyperlapse':(c)=>` | |
| <line x1="10" y1="72" x2="270" y2="72" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <circle cx="35" cy="42" r="4" fill="${c}" opacity=".25"/> | |
| <circle cx="85" cy="42" r="4" fill="${c}" opacity=".45"/> | |
| <circle cx="135" cy="42" r="4" fill="${c}" opacity=".65"/> | |
| <circle cx="185" cy="42" r="4" fill="${c}" opacity=".85"/> | |
| <circle cx="235" cy="42" r="4" fill="${c}"/> | |
| <line x1="39" y1="42" x2="81" y2="42" stroke="${c}" stroke-width="1" opacity=".3" stroke-dasharray="3,3"/> | |
| <line x1="89" y1="42" x2="131" y2="42" stroke="${c}" stroke-width="1" opacity=".45" stroke-dasharray="3,3"/> | |
| <line x1="139" y1="42" x2="181" y2="42" stroke="${c}" stroke-width="1" opacity=".6" stroke-dasharray="3,3"/> | |
| <line x1="189" y1="42" x2="231" y2="42" stroke="${c}" stroke-width="1" opacity=".8" stroke-dasharray="3,3"/> | |
| <text x="24" y="34" fill="${c}" font-size="6" font-family="monospace" opacity=".4">📷t=0</text> | |
| <text x="72" y="34" fill="${c}" font-size="6" font-family="monospace" opacity=".5">📷t=5s</text> | |
| <text x="119" y="34" fill="${c}" font-size="6" font-family="monospace" opacity=".65">📷t=10s</text> | |
| <text x="168" y="34" fill="${c}" font-size="6" font-family="monospace" opacity=".85">📷t=15s</text> | |
| <text x="218" y="34" fill="${c}" font-size="6" font-family="monospace">📷t=20s</text> | |
| <text x="218" y="38" font-size="14">🚁</text> | |
| <text x="38" y="18" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">PHOTO EVERY 2-5s → TIME LAPSE</text>`, | |
| 'space-elevator':(c)=>` | |
| <line x1="10" y1="80" x2="270" y2="80" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <circle cx="140" cy="76" r="5" fill="${c}" opacity=".5"/> | |
| <text x="148" y="78" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="140" y1="71" x2="140" y2="14" stroke="${c}" stroke-width="2" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="140,10 134,22 146,22" fill="${c}" opacity=".85"/> | |
| <text x="128" y="10" font-size="14">🚁</text> | |
| <path d="M 108 74 L 130 12" stroke="#ff6d00" stroke-width="1" opacity=".4" stroke-dasharray="3,3"/> | |
| <path d="M 172 74 L 150 12" stroke="#ff6d00" stroke-width="1" opacity=".4" stroke-dasharray="3,3"/> | |
| <text x="174" y="44" fill="#ff6d00" font-size="7" font-weight="bold" font-family="monospace">ZOOM IN↑</text> | |
| <text x="8" y="44" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">↑ UP+ZOOM=SAME SIZE</text>`, | |
| 'cat-mouse':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="14" y="52" font-size="16">🚁</text> | |
| <text x="16" y="64" fill="${c}" font-size="7" font-family="monospace">DRONE</text> | |
| <text x="186" y="56" font-size="14">🏎️</text> | |
| <text x="184" y="66" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="36" y1="68" x2="178" y2="68" stroke="${c}" stroke-width="1" opacity=".28"/> | |
| <text x="85" y="76" fill="${c}" font-size="7" font-family="monospace">8-12m</text> | |
| <polygon points="32,44 20,39 20,49" fill="${c}" opacity=".85"/> | |
| <line x1="35" y1="44" x2="178" y2="44" stroke="${c}" stroke-width="2" stroke-dasharray="5,3" opacity=".4"/> | |
| <polygon points="182,44 170,39 170,49" fill="${c}" opacity=".85"/> | |
| <text x="55" y="28" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← BOTH MOVE — DRONE LEADS</text>`, | |
| 'boomerang-arc':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN VIEW</text> | |
| <circle cx="140" cy="56" r="7" fill="${c}" opacity=".6"/> | |
| <text x="128" y="76" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <path d="M 42 56 Q 140 8 238 56" stroke="${c}" stroke-width="2" fill="none" stroke-dasharray="5,3" opacity=".5"/> | |
| <text x="28" y="60" font-size="14">🚁</text> | |
| <circle cx="238" cy="56" r="4" stroke="${c}" stroke-width="1.5" fill="none" opacity=".35"/> | |
| <polygon points="238,56 228,49 230,58" fill="${c}" opacity=".7"/> | |
| <text x="88" y="26" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">ARC AROUND SUBJECT</text>`, | |
| 'shadow':(c)=>` | |
| <rect x="0" y="55" width="280" height="35" fill="#1a2c44" rx="4"/> | |
| <text x="225" y="68" fill="#4a6080" font-size="7" font-family="monospace">GROUND</text> | |
| <ellipse cx="85" cy="64" rx="16" ry="5" fill="${c}" opacity=".16"/> | |
| <text x="65" y="58" fill="${c}" font-size="7" font-family="monospace" opacity=".38">SHADOW</text> | |
| <text x="208" y="50" font-size="16">🚁</text> | |
| <line x1="206" y1="44" x2="40" y2="44" stroke="${c}" stroke-width="2" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="36,44 48,39 48,49" fill="${c}" opacity=".85"/> | |
| <text x="216" y="56" fill="${c}" font-size="7" font-family="monospace">5-10m</text> | |
| <text x="60" y="22" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← FLY LOW · CHASE SHADOW</text>`, | |
| 'crane':(c)=>` | |
| <text x="12" y="12" fill="#7a92b0" font-size="7" font-family="monospace">HIGH ALTITUDE</text> | |
| <line x1="10" y1="78" x2="270" y2="78" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <rect x="122" y="60" width="16" height="17" fill="${c}" opacity=".22" rx="2"/> | |
| <text x="112" y="56" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="140" y1="14" x2="140" y2="58" stroke="${c}" stroke-width="2" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="140,62 134,50 146,50" fill="${c}" opacity=".85"/> | |
| <text x="148" y="14" font-size="14">🚁</text> | |
| <path d="M 168 16 Q 180 36 174 54" stroke="#ff6d00" stroke-width="1.5" fill="none" opacity=".6"/> | |
| <polygon points="174,58 168,48 178,48" fill="#ff6d00" opacity=".6"/> | |
| <text x="183" y="36" fill="#ff6d00" font-size="7" font-weight="bold" font-family="monospace">GIMBAL↓</text> | |
| <text x="28" y="35" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">↓ DESCEND + TILT CAM DOWN</text>`, | |
| 'split-horizon':(c)=>` | |
| <line x1="0" y1="48" x2="280" y2="48" stroke="${c}" stroke-width="2.5" opacity=".6"/> | |
| <rect x="0" y="0" width="280" height="48" fill="rgba(41,182,246,0.05)"/> | |
| <rect x="0" y="48" width="280" height="44" fill="rgba(38,166,154,0.05)"/> | |
| <text x="220" y="22" fill="#29b6f6" font-size="9" font-family="monospace" font-weight="bold" opacity=".7">SEA / SKY</text> | |
| <text x="200" y="68" fill="#26a69a" font-size="9" font-family="monospace" font-weight="bold" opacity=".7">LAND / COAST</text> | |
| <text x="100" y="46" fill="${c}" font-size="7" font-family="monospace" font-weight="bold">── HORIZON LINE ──</text> | |
| <text x="244" y="46" font-size="16">🚁</text> | |
| <line x1="240" y1="40" x2="32" y2="40" stroke="${c}" stroke-width="2" stroke-dasharray="6,3" opacity=".65"/> | |
| <polygon points="28,40 40,35 40,45" fill="${c}" opacity=".85"/> | |
| <line x1="240" y1="40" x2="240" y2="48" stroke="${c}" stroke-width="1.5" opacity=".5"/> | |
| <text x="60" y="28" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← FLY PARALLEL TO HORIZON</text>`, | |
| 'spotlight':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN — SPOTLIGHT 2.0</text> | |
| <circle cx="140" cy="56" r="9" fill="${c}" opacity=".7"/> | |
| <circle cx="140" cy="56" r="22" stroke="${c}" stroke-width="1" fill="none" stroke-dasharray="3,3" opacity=".28"/> | |
| <text x="128" y="82" fill="${c}" font-size="7" font-family="monospace">LOCKED</text> | |
| <text x="30" y="24" font-size="14">🚁</text> | |
| <line x1="46" y1="22" x2="134" y2="50" stroke="${c}" stroke-width="1" stroke-dasharray="3,3" opacity=".45"/> | |
| <path d="M 46 18 Q 82 4 122 10" stroke="#ff6d00" stroke-width="1.5" fill="none" opacity=".65"/> | |
| <polygon points="125,10 114,6 116,16" fill="#ff6d00" opacity=".65"/> | |
| <text x="50" y="6" fill="#ff6d00" font-size="7" font-weight="bold" font-family="monospace">DRONE FREE →</text> | |
| <text x="152" y="50" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">CAM LOCKED</text>`, | |
| 'ground-skim':(c)=>` | |
| <path d="M 0 58 Q 35 53 70 58 Q 105 63 140 58 Q 175 53 210 58 Q 245 63 280 58" stroke="#29b6f6" stroke-width="1.5" fill="none" opacity=".4"/> | |
| <rect x="0" y="58" width="280" height="32" fill="rgba(41,182,246,0.04)" rx="4"/> | |
| <text x="190" y="72" fill="#29b6f6" font-size="7" font-family="monospace">WATER / GROUND</text> | |
| <text x="248" y="48" font-size="16">🚁</text> | |
| <line x1="240" y1="42" x2="36" y2="42" stroke="${c}" stroke-width="2.5" stroke-dasharray="6,2" opacity=".65"/> | |
| <polygon points="32,42 44,37 44,47" fill="${c}" opacity=".9"/> | |
| <line x1="256" y1="48" x2="256" y2="60" stroke="${c}" stroke-width="1" opacity=".5"/> | |
| <text x="244" y="57" fill="${c}" font-size="7" font-family="monospace">~2m</text> | |
| <text x="60" y="26" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">← SKIM SURFACE · ND128</text>`, | |
| 'pendulum':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <rect x="124" y="52" width="14" height="20" fill="${c}" opacity=".22" rx="2"/> | |
| <text x="116" y="48" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <line x1="18" y1="36" x2="254" y2="36" stroke="${c}" stroke-width="1.5" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="258,36 246,31 246,41" fill="${c}" opacity=".75"/> | |
| <text x="14" y="40" font-size="13">🚁</text> | |
| <text x="22" y="28" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">PASS 1 →</text> | |
| <line x1="254" y1="50" x2="18" y2="50" stroke="#ff6d00" stroke-width="1.5" stroke-dasharray="5,3" opacity=".5"/> | |
| <polygon points="14,50 26,45 26,55" fill="#ff6d00" opacity=".75"/> | |
| <text x="238" y="60" font-size="13">🚁</text> | |
| <text x="178" y="62" fill="#ff6d00" font-size="7" font-weight="bold" font-family="monospace">← PASS 2</text> | |
| <text x="68" y="20" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">TWO PASSES — CUT IN EDIT</text>`, | |
| 'compression-orbit':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN · 2x ZOOM + 50m ORBIT RADIUS</text> | |
| <circle cx="105" cy="54" r="8" fill="${c}" opacity=".7"/> | |
| <text x="88" y="74" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <circle cx="105" cy="54" r="42" stroke="${c}" stroke-width="1.5" fill="none" stroke-dasharray="4,3" opacity=".35"/> | |
| <text x="115" y="16" fill="${c}" font-size="7" font-family="monospace" opacity=".45">50m+ RADIUS</text> | |
| <rect x="165" y="20" width="105" height="62" stroke="#ff6d00" stroke-width="1.5" fill="rgba(255,109,0,0.04)" stroke-dasharray="3,3" rx="4"/> | |
| <text x="168" y="17" fill="#ff6d00" font-size="7" font-family="monospace">BG SQUEEZED BY 2x ZOOM</text> | |
| <rect x="172" y="28" width="28" height="14" fill="#ff6d00" opacity=".1" rx="2"/> | |
| <rect x="210" y="46" width="38" height="22" fill="#ff6d00" opacity=".08" rx="2"/> | |
| <rect x="174" y="52" width="20" height="18" fill="#ff6d00" opacity=".08" rx="2"/> | |
| <text x="148" y="52" font-size="13">🚁</text> | |
| <path d="M 156 50 Q 164 36 156 24" stroke="${c}" stroke-width="1.5" fill="none" opacity=".7"/> | |
| <polygon points="156,20 151,30 160,28" fill="${c}" opacity=".8"/> | |
| <text x="162" y="86" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">⟳ ORBIT · 2x ZOOM COMPRESSES BACKGROUND</text>`, | |
| 'rising-orbit':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN + SIDE: ORBIT WHILE CLIMBING</text> | |
| <ellipse cx="105" cy="58" rx="38" ry="18" stroke="${c}" stroke-width="1.5" fill="none" stroke-dasharray="5,3" opacity=".45"/> | |
| <circle cx="105" cy="58" r="7" fill="${c}" opacity=".6"/> | |
| <text x="93" y="78" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <text x="134" y="44" font-size="13">🚁</text> | |
| <path d="M 144 44 Q 152 36 148 26" stroke="${c}" stroke-width="1.5" fill="none" opacity=".7"/> | |
| <polygon points="148,22 143,32 152,30" fill="${c}" opacity=".8"/> | |
| <text x="152" y="26" fill="${c}" font-size="7" font-family="monospace" opacity=".7">↑ CLIMB</text> | |
| <line x1="195" y1="80" x2="195" y2="16" stroke="${c}" stroke-width="1" opacity=".25"/> | |
| <polygon points="195,12 191,22 199,22" fill="${c}" opacity=".4"/> | |
| <text x="200" y="16" fill="${c}" font-size="7" font-family="monospace" opacity=".5">ALT↑</text> | |
| <path d="M 148 42 Q 160 30 155 18" stroke="${c}" stroke-width="1" fill="none" opacity=".3" stroke-dasharray="3,3"/> | |
| <text x="160" y="50" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">⟳ ORBIT + ↑ ALTITUDE</text>`, | |
| 'asteroid':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">IN-CAMERA EFFECT — TINY PLANET</text> | |
| <circle cx="140" cy="54" r="28" stroke="${c}" stroke-width="1.5" fill="rgba(0,0,0,0.3)" stroke-dasharray="3,3" opacity=".5"/> | |
| <ellipse cx="140" cy="54" rx="28" ry="8" stroke="${c}" stroke-width="1" fill="none" opacity=".3"/> | |
| <text x="126" y="58" fill="${c}" font-size="18" opacity=".6">🌍</text> | |
| <text x="168" y="26" font-size="13">🚁</text> | |
| <path d="M 166 24 Q 158 16 150 20" stroke="${c}" stroke-width="1.5" fill="none" opacity=".6"/> | |
| <polygon points="148,20 156,14 158,22" fill="${c}" opacity=".6"/> | |
| <text x="175" y="18" fill="${c}" font-size="7" font-family="monospace">↑ UP</text> | |
| <path d="M 166 28 Q 174 36 168 46" stroke="${c}" stroke-width="1" fill="none" opacity=".4" stroke-dasharray="3,2"/> | |
| <text x="172" y="50" fill="${c}" font-size="7" font-family="monospace">←BACK</text> | |
| <rect x="8" y="76" width="264" height="14" rx="4" fill="${c}" opacity=".08"/> | |
| <text x="16" y="86" fill="${c}" font-size="7" font-family="monospace">📷 CAMERA WARPS IMAGE INTO SPHERE IN-CAMERA · AUTO MODE</text>`, | |
| 'at360-spiral':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">TOP-DOWN — ACTIVETRACK LOCKS SUBJECT</text> | |
| <circle cx="120" cy="54" r="7" fill="${c}" opacity=".75"/> | |
| <text x="104" y="74" fill="${c}" font-size="7" font-family="monospace">🔒 LOCKED</text> | |
| <circle cx="120" cy="54" r="20" stroke="${c}" stroke-width="1" fill="none" stroke-dasharray="3,3" opacity=".3"/> | |
| <circle cx="120" cy="54" r="36" stroke="${c}" stroke-width="1.5" fill="none" stroke-dasharray="5,3" opacity=".35"/> | |
| <path d="M 140 54 Q 155 34 148 18" stroke="${c}" stroke-width="2" fill="none" opacity=".6"/> | |
| <polygon points="148,14 143,24 152,22" fill="${c}" opacity=".8"/> | |
| <text x="152" y="14" font-size="13">🚁</text> | |
| <line x1="148" y1="18" x2="125" y2="52" stroke="${c}" stroke-width="1" stroke-dasharray="3,3" opacity=".4"/> | |
| <text x="175" y="20" fill="${c}" font-size="7" font-family="monospace">↑ CLIMB</text> | |
| <text x="175" y="30" fill="${c}" font-size="7" font-family="monospace">+ ORBIT</text> | |
| <text x="155" y="72" fill="${c}" font-size="7" font-family="monospace">CAM STAYS ON</text> | |
| <text x="155" y="82" fill="${c}" font-size="7" font-family="monospace">SUBJECT</text> | |
| <text x="12" y="86" fill="${c}" font-size="8" font-weight="bold" font-family="monospace">DRONE SPIRALS OUT · CAMERA NEVER LEAVES SUBJECT</text>`, | |
| 'slow-mo':(c)=>` | |
| <line x1="10" y1="74" x2="270" y2="74" stroke="#4a6080" stroke-width="1" stroke-dasharray="4,4"/> | |
| <text x="14" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">SHOOT 60fps → PLAY AT 24fps = 2.5x SLOW MOTION</text> | |
| <text x="248" y="52" font-size="16">🚁</text> | |
| <line x1="240" y1="46" x2="35" y2="46" stroke="${c}" stroke-width="2" stroke-dasharray="6,3" opacity=".5"/> | |
| <polygon points="30,46 42,41 42,51" fill="${c}" opacity=".85"/> | |
| <text x="220" y="34" fill="${c}" font-size="7" font-family="monospace">📷 1/120s</text> | |
| <line x1="60" y1="62" x2="60" y2="54" stroke="${c}" stroke-width="1.5" opacity=".5"/> | |
| <line x1="100" y1="62" x2="100" y2="54" stroke="${c}" stroke-width="1.5" opacity=".5"/> | |
| <line x1="140" y1="62" x2="140" y2="54" stroke="${c}" stroke-width="1.5" opacity=".5"/> | |
| <line x1="180" y1="62" x2="180" y2="54" stroke="${c}" stroke-width="1.5" opacity=".5"/> | |
| <line x1="220" y1="62" x2="220" y2="54" stroke="${c}" stroke-width="1.5" opacity=".5"/> | |
| <text x="50" y="70" fill="${c}" font-size="6" font-family="monospace" opacity=".5">f1</text> | |
| <text x="90" y="70" fill="${c}" font-size="6" font-family="monospace" opacity=".5">f2</text> | |
| <text x="130" y="70" fill="${c}" font-size="6" font-family="monospace" opacity=".5">f3</text> | |
| <text x="170" y="70" fill="${c}" font-size="6" font-family="monospace" opacity=".5">f4</text> | |
| <text x="210" y="70" fill="${c}" font-size="6" font-family="monospace" opacity=".5">f5</text> | |
| <text x="78" y="84" fill="${c}" font-size="7" font-family="monospace">ND16 FILTER · 4K RESOLUTION PRESERVED</text>`, | |
| 'dlog-m':(c)=>` | |
| <text x="12" y="12" fill="${c}" font-size="7" font-weight="bold" font-family="monospace">D-LOG M → APPLY LUT IN POST → CINEMATIC COLOR</text> | |
| <rect x="12" y="20" width="108" height="52" rx="6" fill="rgba(200,200,200,0.06)" stroke="#2a3a50" stroke-width="1"/> | |
| <text x="28" y="35" fill="#888" font-size="7" font-family="monospace">D-LOG M RAW</text> | |
| <rect x="15" y="40" width="102" height="28" rx="3" fill="none"/> | |
| <line x1="15" y1="40" x2="117" y2="68" stroke="#aaa" stroke-width="40" opacity=".08"/> | |
| <text x="22" y="60" fill="#aaa" font-size="16" opacity=".4">🌫️ FLAT</text> | |
| <text x="128" y="48" fill="${c}" font-size="16" font-weight="bold">→</text> | |
| <rect x="148" y="20" width="120" height="52" rx="6" fill="rgba(255,196,0,0.06)" stroke="${c}" stroke-width="1"/> | |
| <text x="162" y="35" fill="${c}" font-size="7" font-family="monospace">+ LUT APPLIED</text> | |
| <rect x="151" y="40" width="114" height="28" rx="3" fill="none"/> | |
| <text x="160" y="62" fill="${c}" font-size="16" opacity=".7">🎬 CINEMATIC</text> | |
| <text x="20" y="86" fill="${c}" font-size="7" font-family="monospace">10-BIT · ND FILTER · DAVINCI RESOLVE / PREMIERE</text>`, | |
| 'auto-mode':(c)=>` | |
| <rect x="18" y="12" width="244" height="66" rx="10" stroke="${c}" stroke-width="1.5" fill="none" stroke-dasharray="4,3" opacity=".45"/> | |
| <text x="78" y="42" fill="${c}" font-size="20" font-weight="bold">🤖 AUTO MODE</text> | |
| <text x="52" y="58" fill="${c}" font-size="9" font-family="monospace">DJI HANDLES ALL FLIGHT INPUTS</text>`, | |
| }; | |
| return (f[key]||f['auto-mode'])(c); | |
| } | |
| // Build stick SVG | |
| function stick(s,c,lang){ | |
| const cx=40,cy=40; | |
| const kx=cx+s.dx*22, ky=cy-s.dy*22; | |
| const still=s.dx===0&&s.dy===0; | |
| const both=s.both===true; // for pendulum L↔R indicator | |
| const ac=still?'#4a6080':c; | |
| // Motion trail line from center to knob (clearer than tiny arrow icons) | |
| const ml=!still?`<line x1="${cx}" y1="${cy}" x2="${kx}" y2="${ky}" stroke="${c}" stroke-width="3" opacity=".55"/>`:''; | |
| // For pendulum-like both-directions: show two knobs L and R | |
| let bothKnobs=''; | |
| if(both){ | |
| const kxL=cx-22, kxR=cx+22; | |
| bothKnobs=` | |
| <line x1="${kxL}" y1="${cy}" x2="${kxR}" y2="${cy}" stroke="${c}" stroke-width="3" opacity=".5" stroke-dasharray="4,3"/> | |
| <circle cx="${kxL+1}" cy="${cy+2}" r="11" fill="rgba(0,0,0,.5)"/> | |
| <circle cx="${kxL}" cy="${cy}" r="11" fill="#101828" stroke="${c}" stroke-width="2"/> | |
| <circle cx="${kxL}" cy="${cy}" r="3" fill="${c}"/> | |
| <circle cx="${kxR+1}" cy="${cy+2}" r="11" fill="rgba(0,0,0,.5)"/> | |
| <circle cx="${kxR}" cy="${cy}" r="11" fill="#101828" stroke="${c}" stroke-width="2"/> | |
| <circle cx="${kxR}" cy="${cy}" r="3" fill="${c}"/> | |
| <text x="${kxL-7}" y="44" fill="${c}" font-size="12" font-weight="bold">◀</text> | |
| <text x="${kxR+1}" y="44" fill="${c}" font-size="12" font-weight="bold">▶</text>`; | |
| } | |
| const lbl=lang==='ka'?s.ka:s.en; | |
| const shortLbl=lbl.includes('NO')||lbl.includes('გარეშე')?'STILL':lbl.includes('AUTO')||lbl.includes('ავტო')?'AUTO':lbl.includes('SETTINGS')||lbl.includes('პარამ')?'SET':lbl.includes('FREELY')||lbl.includes('თავ')?'FREE':''; | |
| return `<div class="stick-col"> | |
| <svg width="80" height="80" viewBox="0 0 80 80"> | |
| <defs> | |
| <radialGradient id="kg${kx}${ky}${c.slice(1)}"><stop offset="0%" stop-color="rgba(255,255,255,0.15)"/><stop offset="100%" stop-color="rgba(255,255,255,0)"/></radialGradient> | |
| </defs> | |
| <circle cx="40" cy="40" r="37" fill="#1f3250" stroke="${ac}" stroke-width="${still?1:2}" opacity="${still?.4:.95}"/> | |
| <line x1="3" y1="40" x2="77" y2="40" stroke="rgba(255,255,255,0.06)" stroke-width="1"/> | |
| <line x1="40" y1="3" x2="40" y2="77" stroke="rgba(255,255,255,0.06)" stroke-width="1"/> | |
| <circle cx="40" cy="40" r="22" stroke="rgba(255,255,255,0.05)" stroke-width="1" fill="none" stroke-dasharray="2,3"/> | |
| ${both ? bothKnobs : ` | |
| ${ml} | |
| <circle cx="40" cy="40" r="2" fill="${ac}" opacity=".4"/> | |
| ${!still ? `<circle cx="${kx}" cy="${ky}" r="16" fill="${c}" opacity=".15"/>` : ''} | |
| <circle cx="${kx+1}" cy="${ky+2}" r="13" fill="rgba(0,0,0,.55)"/> | |
| <circle cx="${kx}" cy="${ky}" r="13" fill="#101828" stroke="${ac}" stroke-width="${still?1.5:2.5}" opacity="${still?.55:1}"/> | |
| <circle cx="${kx}" cy="${ky}" r="13" fill="url(#kg${kx}${ky}${c.slice(1)})"/> | |
| ${!still ? `<circle cx="${kx}" cy="${ky}" r="4" fill="${c}"/>` : ''} | |
| ${still&&shortLbl ? `<text x="40" y="44" text-anchor="middle" fill="${ac}" font-size="7" font-weight="700" opacity=".7">${shortLbl}</text>` : ''} | |
| `} | |
| </svg> | |
| <div class="stick-lbl">${lbl}</div> | |
| </div>`; | |
| } | |
| let currentLang='en'; | |
| let currentCat=0; | |
| function setLang(l,btn){ | |
| currentLang=l; | |
| document.querySelectorAll('.lang-btn').forEach(b=>b.classList.remove('active')); | |
| btn.classList.add('active'); | |
| document.body.className=`lang-${l}`; | |
| renderAll(); | |
| if(typeof renderCombos==='function')renderCombos(); | |
| if(typeof renderNDFilters==='function')renderNDFilters(); | |
| if(typeof renderFPSGuide==='function')renderFPSGuide(); | |
| if(typeof renderExposureTable==='function')renderExposureTable(); | |
| if(typeof renderWBTable==='function')renderWBTable(); | |
| } | |
| function setCat(cat,btn){ | |
| currentCat=cat; | |
| document.querySelectorAll('.nav-btn').forEach(b=>b.classList.remove('active')); | |
| btn.classList.add('active'); | |
| renderCards(); | |
| } | |
| function renderNav(){ | |
| const nav=document.getElementById('nav'); | |
| const L=currentLang; | |
| const allEn='All Shots', allKa='ყველა'; | |
| let h=`<button class="nav-btn active" onclick="setCat(0,this)"><span class="nav-dot" style="background:#00e5ff"></span>${L==='ka'?allKa:allEn}</button>`; | |
| for(let k=1;k<=5;k++){ | |
| const colors=['#29b6f6','#ab47bc','#ef5350','#26a69a','#ffa726']; | |
| h+=`<button class="nav-btn" onclick="setCat(${k},this)"><span class="nav-dot" style="background:${colors[k-1]}"></span>${L==='ka'?CATS[k].ka:CATS[k].en}</button>`; | |
| } | |
| h+=`<button class="nav-btn" onclick="document.getElementById('combos').scrollIntoView({behavior:'smooth'})"><span class="nav-dot" style="background:#ffc400"></span><span lang-en>🎬 Combos</span><span lang-ka>🎬 კომბ.</span></button>`; | |
| h+=`<button class="nav-btn" onclick="document.getElementById('filters').scrollIntoView({behavior:'smooth'})"><span class="nav-dot" style="background:#00e676"></span><span lang-en>📷 Settings</span><span lang-ka>📷 პარამ.</span></button>`; | |
| nav.innerHTML=h; | |
| } | |
| // Generate inline step-by-step instructions for a shot | |
| function getInlineSteps(shotNum, color, lang){ | |
| const step = SHOT_STEPS[shotNum]; | |
| if(!step) return ''; | |
| const data = lang==='ka' ? step.ka : step.en; | |
| const stepsLabel = lang==='ka' ? '📋 დეტალური ინსტრუქცია' : '📋 Step-by-step Guide'; | |
| return `<details style="margin-top:10px;border-top:1px solid ${color}22;padding-top:10px"> | |
| <summary style="cursor:pointer;font-size:11px;font-weight:700;color:${color};letter-spacing:0.5px;list-style:none;display:flex;align-items:center;gap:6px;user-select:none"> | |
| <span style="font-size:9px;transition:transform 0.2s;display:inline-block">▶</span> | |
| ${stepsLabel} | |
| </summary> | |
| <ol style="margin:10px 0 4px;padding-left:24px;color:var(--text)"> | |
| ${data.steps.map(s=>`<li style="font-size:11px;line-height:1.65;margin-bottom:5px;color:var(--muted)">${s}</li>`).join('')} | |
| </ol> | |
| </details>`; | |
| } | |
| function renderCards(){ | |
| const main=document.getElementById('main'); | |
| const L=currentLang; | |
| let html=''; | |
| let lastCat=null; | |
| let sectionShots=[]; | |
| function flushSection(){ | |
| if(!sectionShots.length) return; | |
| const cat=sectionShots[0][1]; | |
| const c=C[cat]; | |
| const title=L==='ka'?CATS[cat].ka:CATS[cat].en; | |
| const diff=L==='ka'?CATS[cat].diff.ka:CATS[cat].diff.en; | |
| html+=`<div class="section-divider"><div class="nav-dot" style="background:${c};width:8px;height:8px;border-radius:50%"></div><h2 style="color:${c}">${title}</h2><div class="div-line" style="background:linear-gradient(90deg,${c}33,transparent)"></div><span class="div-count" style="color:${c}">${sectionShots.length} ${L==='ka'?'გადაღება':'shots'}</span></div>`; | |
| html+='<div class="cards-grid">'; | |
| for(const sh of sectionShots){ | |
| const [num,cat,icon,enN,enD,enT,kaN,kaD,kaT,ls,rs,pathKey,isAuto]=sh; | |
| const cc=C[cat]; | |
| const name=L==='ka'?kaN:enN; | |
| const desc=L==='ka'?kaD:enD; | |
| const tips=L==='ka'?kaT:enT; | |
| const diff2=L==='ka'?CATS[cat].diff.ka:CATS[cat].diff.en; | |
| const pathSVG=fp(pathKey,cc); | |
| html+=`<div class="card" style="--cc:${cc}"> | |
| <div class="card-head" style="border-bottom-color:${cc}22"> | |
| <div class="num-badge" style="background:${cc}18;color:${cc};border:1px solid ${cc}33">${num}</div> | |
| <div class="shot-title" style="color:${cc}">${icon} ${name}</div> | |
| <div class="diff-tag" style="background:${cc}18;color:${cc};border:1px solid ${cc}33">${diff2}</div> | |
| </div> | |
| <div class="diagram-area"> | |
| <div class="sticks-wrap"> | |
| ${stick(ls,cc,L)} | |
| <div class="ctrl-mid"><span>🎮</span><span>L · R</span></div> | |
| ${stick(rs,cc,L)} | |
| </div> | |
| <div class="path-box"> | |
| <svg viewBox="0 0 280 92" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet">${pathSVG}</svg> | |
| <div class="path-tag">${L==='ka'?'ფრენის მარშრუტი':'FLIGHT PATH'}</div> | |
| ${isAuto?`<div class="auto-pill" style="background:${cc}22;color:${cc};border:1px solid ${cc}44">${L==='ka'?'⚡ ავტო':'⚡ AUTO'}</div>`:''} | |
| </div> | |
| </div> | |
| <div class="card-body"> | |
| <div class="shot-desc">${desc}</div> | |
| <div class="shot-tips"><span class="tips-ico">⚙️</span><span class="tips-txt">${tips.replace(/ · /g,' <b>·</b> ')}</span></div> | |
| ${getInlineSteps(num, cc, L)} | |
| </div> | |
| </div>`; | |
| } | |
| html+='</div>'; | |
| sectionShots=[]; | |
| } | |
| for(const sh of SHOTS){ | |
| const cat=sh[1]; | |
| if(currentCat!==0&&cat!==currentCat) continue; | |
| if(cat!==lastCat){flushSection();lastCat=cat;} | |
| sectionShots.push(sh); | |
| } | |
| flushSection(); | |
| main.innerHTML=html; | |
| } | |
| function renderAll(){ | |
| renderNav(); | |
| renderCards(); | |
| } | |
| // renderAll() called at end of script after all definitions | |
| // ── COMBOS ─────────────────────────────────────────────────────────── | |
| const COMBOS = [ | |
| { | |
| color:'#29b6f6', icon:'🏔️', | |
| en_title:'Epic Landscape Opener', | |
| ka_title:'ეპიკური პეიზაჟის გახსნა', | |
| en_seq:'#3 Pedestal → #1 Reveal → #7 Orbit → #11 Rocket+Twist', | |
| ka_seq:'#3 პედ. → #1 გამოვლ. → #7 ორბ. → #11 სპირ.', | |
| en_why:'Rise to establish scale, reveal the full landscape, lock into a dramatic 360° orbit, finish with a spiraling ascent to full altitude. Classic opener for any landscape film.', | |
| ka_why:'ამაღ. — სივ., გამოვლ. — ლანდშ., ორბ. — 360°, სპირ. — სიმ. მაქს. კლასიკური გახსნა.', | |
| en_tip:'Keep orbit speed under 3 m/s. Cut on motion — when rocket starts spinning.', | |
| ka_tip:'ორბ. 3 მ/წ-ზე ნაკლები. ჭრა მოძრ.-ზე — სპირ. დაწ.-ისას.', | |
| en_dur:'Final edit ~25–40s', | |
| ka_dur:'მონტ. ~25–40 წმ', | |
| shots:[3,1,7,11] | |
| }, | |
| { | |
| color:'#26a69a', icon:'🏄', | |
| en_title:'Action Sports Sequence', | |
| ka_title:'სპორტული სცენა', | |
| en_seq:'#13 Low+Fast → #9 Tracking → #20 Cat-Mouse → #27 Pendulum', | |
| ka_seq:'#13 დაბ+სწრ. → #9 თრექ. → #20 კატ-თაგ. → #27 ქანქ.', | |
| en_why:'Open with a ground-skimming approach, track at athlete speed for context, go cat-and-mouse for tension, close with the pendulum pass for rhythm in the edit.', | |
| ka_why:'ზედ.სრ. — მიახლ., გვ.თრექ. — სიჩქ., კ-თ. — ინტ., ქანქ. — რიტ.', | |
| en_tip:'Match cuts to music beat. Pendulum cuts work perfectly on the downbeat.', | |
| ka_tip:'მუს. ბიტზე ჭრა. ქანქ. კარგად ჯდება ბიტის ქვედა ნაწილზე.', | |
| en_dur:'Final edit ~20–30s', | |
| ka_dur:'მონტ. ~20–30 წმ', | |
| shots:[13,9,20,27] | |
| }, | |
| { | |
| color:'#ab47bc', icon:'🌅', | |
| en_title:'Golden Hour Story', | |
| ka_title:'ოქროს საათის ამბავი', | |
| en_seq:'#6 Tilt-Up → #24 Split Horizon → #22 Shadow Chase → #2 Dronie', | |
| ka_seq:'#6 გიმბ. → #24 ჰორ. → #22 ჩრდ. → #2 დრ.', | |
| en_why:'Begin with a slow gimbal reveal from ground to sky, glide along the coastline for mood, chase the golden shadow for intimacy, pull back with a dronie to place the scene in full context.', | |
| ka_why:'გიმბ. ნელ-ნელა, სანაპ. გლ., ოქ.ჩრდ., დრ. — სრ.გარ.', | |
| en_tip:'Shoot within 20 min of sunset. Use ND16. White balance locked to 5500K for warm tones.', | |
| ka_tip:'მზ.ჩ.-დან 20 წმ-ში. ND16. WB 5500K — თბ. ტონებ.', | |
| en_dur:'Final edit ~30–45s', | |
| ka_dur:'მონტ. ~30–45 წმ', | |
| shots:[6,24,22,2] | |
| }, | |
| { | |
| color:'#ef5350', icon:'🏙️', | |
| en_title:'Urban Architecture', | |
| ka_title:'ქალაქური არქიტექტ.', | |
| en_seq:'#12 Birds Eye → #8 Parallax → #28 Comp.Orbit → #19 Space Elevator', | |
| ka_seq:'#12 ჩ.თვ. → #8 პარ. → #28 კ.ორბ. → #19 სივ.ლ.', | |
| en_why:'Open top-down to reveal city geometry, parallax past a facade for depth, orbit a tower with zoom compression to dwarf it, finish with a space elevator scaling the full skyline.', | |
| ka_why:'ზემოდ. — გეომ., ფასადთ. — სიღ., კ.ორბ. — სიდ., სივ.ლ. — სკ.', | |
| en_tip:'Fly at blue hour (30 min after sunset) for city lights + sky gradient simultaneously.', | |
| ka_tip:'ლურჯ საათი (ჩ.30წმ) — ქ.განათ. + ცის გრ. ერთ.', | |
| en_dur:'Final edit ~35–50s', | |
| ka_dur:'მონტ. ~35–50 წმ', | |
| shots:[12,8,28,19] | |
| }, | |
| { | |
| color:'#ffa726', icon:'🌊', | |
| en_title:'Water and Nature', | |
| ka_title:'წყალი და ბუნება', | |
| en_seq:'#26 Ground Skim → #5 Side Slide → #14 Helix → #10 Rocket', | |
| ka_seq:'#26 ზ.სრ. → #5 სლ. → #14 ჰელ. → #10 რაკ.', | |
| en_why:'Skim the water surface for immersion, slide sideways to reveal the full shoreline, spiral up around a rock or island, blast vertically to reveal the ocean scale.', | |
| ka_why:'წყ.სრ. — ჩაძ., გვ.სლ. — სანაპ., სპ.კლდ. — დრ., ვ.ზ. — ოკ.', | |
| en_tip:'ND128 for ground skim. Switch to ND64 for helix. Cut at the helix apex for drama.', | |
| ka_tip:'ND128 სრ.-ისთვის. ND64 ჰელ.-ისთ. ჭრა ჰელ. მწვ.-ზე.', | |
| en_dur:'Final edit ~25–40s', | |
| ka_dur:'მონტ. ~25–40 წმ', | |
| shots:[26,5,14,10] | |
| }, | |
| { | |
| color:'#1de9b6', icon:'🎭', | |
| en_title:'Subject Portrait', | |
| ka_title:'სუბიექტის პორტრეტი', | |
| en_seq:'#25 Spotlight → #7 Orbit → #16 Rising Orbit → #2 Dronie', | |
| ka_seq:'#25 სპ. → #7 ორბ. → #16 ამ.ორბ. → #2 დრ.', | |
| en_why:'Lock camera on subject with Spotlight for tension, orbit at eye level for connection, rise and widen into a grand orbit, finish with a dronie to place the subject in their full world.', | |
| ka_why:'სპ. — ჩ.ძ., ც.დ.ორბ. — ამ.გ., ამ.ორბ. — სიდ., დრ. — გარ.', | |
| en_tip:'Keep Spotlight lock under 60m range. Match orbit speed to subject emotion — slow for drama, faster for energy.', | |
| ka_tip:'სპ. 60მ-ს ქვ. ორბ.სიჩქ. — ემ.-ის შ.: ნელი = დრ., სწრ. = ენ.', | |
| en_dur:'Final edit ~30–45s', | |
| ka_dur:'მონტ. ~30–45 წმ', | |
| shots:[25,7,16,2] | |
| }, | |
| { | |
| color:'#ff6d00', icon:'⚡', | |
| en_title:'Mini 4 Pro Full Power', | |
| ka_title:'Mini 4 Pro სრ. შეს.', | |
| en_seq:'#33 4K Slow-Mo → #15 Dolly Zoom → #18 Hyperlapse → #34 D-Log Grade', | |
| ka_seq:'#33 სლ-მ. → #15 დ.ზ. → #18 ჰ.ლ. → #34 D-Log', | |
| en_why:'Showcase every sensor capability: ultra-slow 4K motion, the disorienting dolly-zoom, a sweeping time-compressed hyperlapse — all graded in D-Log M for full cinematic color.', | |
| ka_why:'4K სლ-მო, გ.ეფ.ზ., ჰ.ლ.კომპ. — ყველა, D-Log — კინ.ფ.', | |
| en_tip:'Shoot all in D-Log M. Apply the same LUT across all clips in DaVinci for cohesion.', | |
| ka_tip:'ყველა D-Log M-ში. ერთი LUT ყველა კლ.-ზე DaVinci-ში.', | |
| en_dur:'Final edit ~45–60s', | |
| ka_dur:'მონტ. ~45–60 წმ', | |
| shots:[33,15,18,34] | |
| }, | |
| ]; | |
| const _CAT_COLORS={1:'#29b6f6',2:'#29b6f6',3:'#29b6f6',4:'#29b6f6',5:'#29b6f6',6:'#29b6f6', | |
| 7:'#ab47bc',8:'#ab47bc',9:'#ab47bc',10:'#ab47bc',11:'#ab47bc',12:'#ab47bc',13:'#ab47bc', | |
| 14:'#ef5350',15:'#ef5350',16:'#ef5350',17:'#ef5350',18:'#ef5350',19:'#ef5350',20:'#ef5350', | |
| 21:'#26a69a',22:'#26a69a',23:'#26a69a',24:'#26a69a',25:'#26a69a',26:'#26a69a',27:'#26a69a',28:'#26a69a', | |
| 29:'#ffa726',30:'#ffa726',31:'#ffa726',32:'#ffa726',33:'#ffa726',34:'#ffa726'}; | |
| // ── DETAILED SHOOT INSTRUCTIONS FOR EACH SHOT IN COMBOS ── | |
| const SHOT_STEPS = { | |
| 4:{ | |
| en:{title:'The Flyover — Step by step',steps:[ | |
| 'Position drone behind subject at 20–30m distance', | |
| 'Set gimbal to -45° initially as you approach', | |
| 'Push Right Stick FORWARD steadily — drone moves at 4–6 m/s', | |
| 'As drone gets directly over subject, tilt gimbal to -90° (straight down)', | |
| 'Continue flying forward past subject for 5–8 seconds', | |
| 'Settings: ND16 · 1/60s shutter · 4K/30fps · D-Log M']}, | |
| ka:{title:'გადაფრენა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი სუბიექტის უკან 20–30 მეტრის მანძილზე', | |
| 'დააყენეთ გიმბალი -45° კუთხეზე მიახლოებისას', | |
| 'სტაბილურად დააჭირეთ მარჯვენა ჯოისტიკი წინ — დრონი მოძრაობს 4–6 მ/წ', | |
| 'როცა დრონი სუბიექტის თავზე გადადის, გიმბალი -90° კუთხეზე გადახარეთ (პირდაპირ ქვემოთ)', | |
| 'გააგრძელეთ წინ ფრენა სუბიექტს ზემოთ 5–8 წამის განმავლობაში', | |
| 'პარამეტრები: ND16 · 1/60 წმ · 4K/30fps · D-Log M']} | |
| }, | |
| 8:{ | |
| en:{title:'The Parallax — Step by step',steps:[ | |
| 'Position drone at one side, with subject in middle of frame', | |
| 'Push Right Stick fully sideways (Roll right) — drone slides', | |
| 'Simultaneously push Left Stick opposite direction (Yaw left)', | |
| 'This makes camera rotate while drone slides perpendicular', | |
| 'Background moves faster than subject — creates depth illusion', | |
| 'Practice slowly first — both inputs must be smooth and synchronized', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · No POI mode']}, | |
| ka:{title:'პარალაქსი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი ერთ მხარეს, სუბიექტი კადრის ცენტრში', | |
| 'სრულად დააჭირეთ მარჯვენა ჯოისტიკი გვერდულად — დრონი იწყებს სლაიდს', | |
| 'ერთდროულად დააჭირეთ მარცხენა ჯოისტიკი საპირისპირო მიმართულებით (ბრუნვა)', | |
| 'ეს იწვევს კამერის ბრუნვას სანამ დრონი გვერდულად სრიალებს', | |
| 'ფონი უფრო სწრაფად მოძრაობს ვიდრე სუბიექტი — ქმნის სიღრმის ილუზიას', | |
| 'ჯერ ნელ-ნელა ივარჯიშეთ — ორივე შეყვანა უნდა იყოს გლუვი და სინქრონული', | |
| 'პარამეტრები: ND16 · 1/60 წმ · 4K/30fps · POI რეჟიმის გარეშე']} | |
| }, | |
| 17:{ | |
| en:{title:'FPV Fly-Through — Step by step',steps:[ | |
| 'Pre-fly the path visually — walk it, scout obstacles, plan route', | |
| 'Switch to Sport mode for maximum control speed', | |
| 'Disable obstacle avoidance — it can stop drone mid-gap', | |
| 'Position 5–10m back from the gap (window, arch, branches)', | |
| 'Push Right Stick FULL forward — fly through at speed', | |
| 'Keep drone level — no climbing or descending mid-flight', | |
| 'Settings: ND16 · 1/60s · 4K/60fps for slow-mo option · Practice many times']}, | |
| ka:{title:'FPV გატარება — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'წინასწარ შეიარეთ მარშრუტი ფეხით — შეამოწმეთ დაბრკოლებები, დაგეგმეთ გზა', | |
| 'გადართეთ სპორტ რეჟიმზე მაქსიმალური კონტროლის სიჩქარისთვის', | |
| 'გამორთეთ დაბრკოლების თავიდან აცილება — შეიძლება გააჩეროს დრონი გახსნილობაში', | |
| 'მოათავსეთ დრონი 5–10 მ უკან გახსნილობიდან (ფანჯარა, თაღი, ტოტები)', | |
| 'სრულად დააჭირეთ მარჯვენა ჯოისტიკი წინ — გაფრინდით სიჩქარით', | |
| 'შეინარჩუნეთ დრონის სიმაღლე — არ ამოხვიდეთ ან ჩამოხვიდეთ ფრენის შუა გზაზე', | |
| 'პარამეტრები: ND16 · 1/60 წმ · 4K/60fps სლო-მო-სთვის · ბევრჯერ ივარჯიშეთ']} | |
| }, | |
| 21:{ | |
| en:{title:'Boomerang — Step by step',steps:[ | |
| 'Position drone 10–15m from subject on one side', | |
| 'Push Right Stick gently forward (subtle pitch fwd)', | |
| 'Simultaneously push Left Stick sideways (continuous yaw rotation)', | |
| 'Drone arcs around subject in a half-circle motion', | |
| 'Keep subject at the edge of frame throughout', | |
| 'Smooth, slow inputs — quality over speed', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · 15–20 second duration']}, | |
| ka:{title:'ბუმერანგი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 10–15 მ-ში სუბიექტიდან ერთ მხარეს', | |
| 'ნელა დააჭირეთ მარჯვენა ჯოისტიკი წინ (მსუბუქი წინ მიმართულება)', | |
| 'ერთდროულად დააჭირეთ მარცხენა ჯოისტიკი გვერდულად (უწყვეტი ბრუნვა)', | |
| 'დრონი აღწერს ნახევარწრიულ რკალს სუბიექტის გარშემო', | |
| 'შეინარჩუნეთ სუბიექტი კადრის კიდეში მთელი დროის განმავლობაში', | |
| 'გლუვი, ნელი მოძრაობები — ხარისხი სიჩქარეზე უპირატესია', | |
| 'პარამეტრები: ND16 · 1/60 წმ · 4K/30fps · 15–20 წამის ხანგრძლივობა']} | |
| }, | |
| 23:{ | |
| en:{title:'The Crane Reveal — Step by step',steps:[ | |
| 'Climb to high altitude (30–50m) framing only sky or distant background', | |
| 'Lock gimbal at 0° (horizon level) or slight up tilt', | |
| 'Push Left Stick DOWN slowly — descend at 1 m/s', | |
| 'Simultaneously tilt gimbal DOWN progressively as you descend', | |
| 'Subject is revealed below — film-style opener', | |
| 'End at 5–10m above subject for dramatic impact', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · D-Log M for full grade']}, | |
| ka:{title:'კრანი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'ამოდით მაღალ სიმაღლეზე (30–50 მ) რომ კადრში მხოლოდ ცა ან შორი ფონი ჩანდეს', | |
| 'დააფიქსირეთ გიმბალი 0° კუთხეზე (ჰორიზონტი) ან ოდნავ ზევით დახრილი', | |
| 'ნელ-ნელა დააჭირეთ მარცხენა ჯოისტიკი ქვევით — ჩამოდით 1 მ/წ სიჩქარით', | |
| 'ერთდროულად პროგრესულად დახარეთ გიმბალი ქვემოთ ჩამოსვლასთან ერთად', | |
| 'სუბიექტი თანდათან გამოვლინდება ქვემოთ — კინო-სტილის გახსნა', | |
| 'დაასრულეთ სუბიექტიდან 5–10 მ ზემოთ დრამატული ეფექტისთვის', | |
| 'პარამეტრები: ND16 · 1/60 წმ · 4K/30fps · D-Log M სრული გრეიდისთვის']} | |
| }, | |
| 29:{ | |
| en:{title:'MasterShots Auto — Step by step',steps:[ | |
| 'Open camera app, tap MasterShots from intelligent flight modes', | |
| 'Frame the subject in center — drone needs clear view', | |
| 'Tap subject on screen to lock it', | |
| 'Choose Proximity (close), Portrait, or Landscape mode', | |
| 'Tap Start — drone executes 10 cinematic moves automatically', | |
| 'In ~30 seconds, drone returns and creates a edited short film', | |
| 'Settings: Subject 20–50m range · Clear surroundings · No obstacles']}, | |
| ka:{title:'MasterShots ავტომატური — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გახსენით კამერის აპლიკაცია, აირჩიეთ MasterShots ინტელექტუალური ფრენის რეჟიმებიდან', | |
| 'მოათავსეთ სუბიექტი კადრის ცენტრში — დრონს ესაჭიროება მკაფიო ხედი', | |
| 'შეეხეთ სუბიექტს ეკრანზე მის ჩასაკეტად', | |
| 'აირჩიეთ Proximity (ახლო), Portrait (პორტრეტი) ან Landscape (პეიზაჟი) რეჟიმი', | |
| 'შეეხეთ Start — დრონი ავტომატურად ასრულებს 10 კინემატოგრაფიულ მოძრაობას', | |
| 'დაახლოებით 30 წამში დრონი ბრუნდება და ქმნის შემოკლებულ მონტაჟს', | |
| 'პარამეტრები: სუბიექტი 20–50 მ-ის რადიუსში · ღია სივრცე · დაბრკოლებების გარეშე']} | |
| }, | |
| 30:{ | |
| en:{title:'QuickShot Boomerang — Step by step',steps:[ | |
| 'Open QuickShots menu in camera app', | |
| 'Select Boomerang from the list', | |
| 'Tap subject on screen to lock it for the move', | |
| 'Ensure 15–25m of open space around subject', | |
| 'Tap Start — drone executes the boomerang arc automatically', | |
| 'Drone takes ~30 seconds to complete and returns home', | |
| 'Settings: Subject stationary · Open area · No obstacles within 25m']}, | |
| ka:{title:'QuickShot ბუმერანგი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გახსენით QuickShots მენიუ კამერის აპლიკაციაში', | |
| 'აირჩიეთ Boomerang სიიდან', | |
| 'შეეხეთ სუბიექტს ეკრანზე მის ჩასაკეტად მოძრაობისთვის', | |
| 'დარწმუნდით რომ სუბიექტის ირგვლივ არის 15–25 მ თავისუფალი სივრცე', | |
| 'შეეხეთ Start — დრონი ავტომატურად ასრულებს ბუმერანგის რკალს', | |
| 'დრონს სჭირდება დაახლოებით 30 წამი დასასრულებლად და ბრუნდება უკან', | |
| 'პარამეტრები: სუბიექტი უძრავი · ღია სივრცე · დაბრკოლებები არ უნდა იყოს 25 მ-ში']} | |
| }, | |
| 31:{ | |
| en:{title:'QuickShot Asteroid — Step by step',steps:[ | |
| 'Open QuickShots menu and select Asteroid', | |
| 'Tap subject on screen — drone uses this as center point', | |
| 'Need 25m+ open distance from subject', | |
| 'Tap Start — drone flies backward and upward in spiral', | |
| 'Camera captures multiple stitched photos creating spherical panorama', | |
| 'Result is a "tiny planet" effect processed in-camera', | |
| 'Settings: Open area · No obstacles · Wide sky view best']}, | |
| ka:{title:'QuickShot ასტეროიდი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გახსენით QuickShots მენიუ და აირჩიეთ Asteroid', | |
| 'შეეხეთ სუბიექტს ეკრანზე — დრონი იყენებს მას როგორც ცენტრალურ წერტილს', | |
| 'საჭიროა 25+ მ თავისუფალი მანძილი სუბიექტიდან', | |
| 'შეეხეთ Start — დრონი იწყებს უკან და ზევით სპირალურ მოძრაობას', | |
| 'კამერა იღებს რამდენიმე ფოტოს და აერთიანებს სფერულ პანორამად', | |
| 'შედეგი არის "პატარა პლანეტის" ეფექტი დამუშავებული კამერაში', | |
| 'პარამეტრები: ღია სივრცე · დაბრკოლებების გარეშე · ფართო ცის ხედი საუკეთესოა']} | |
| }, | |
| 32:{ | |
| en:{title:'ActiveTrack 360° Spiral — Step by step',steps:[ | |
| 'Open ActiveTrack 360° from intelligent modes', | |
| 'Tap subject to lock it (works on stationary subjects best)', | |
| 'Drone automatically maintains camera lock on subject', | |
| 'Manually input orbit + climb: push Left Stick (Yaw + Throttle UP)', | |
| 'Drone spirals out and up while camera stays on subject', | |
| 'Camera never leaves subject regardless of drone position', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Stationary subject works best']}, | |
| ka:{title:'ActiveTrack 360° სპირალი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გახსენით ActiveTrack 360° ინტელექტუალური რეჟიმებიდან', | |
| 'შეეხეთ სუბიექტს მის ჩასაკეტად (საუკეთესოდ მუშაობს უძრავ სუბიექტებზე)', | |
| 'დრონი ავტომატურად ინახავს კამერას სუბიექტზე ჩაკეტილს', | |
| 'მექანიკურად შეიყვანეთ ბრუნვა + ამოსვლა: მარცხენა ჯოისტიკი (ბრუნვა + ზევით)', | |
| 'დრონი იწყებს სპირალურ მოძრაობას გარეთ და ზევით სანამ კამერა რჩება სუბიექტზე', | |
| 'კამერა არასოდეს ტოვებს სუბიექტს დრონის პოზიციის მიუხედავად', | |
| 'პარამეტრები: ND16 · 1/60 წმ · 4K/30fps · უძრავი სუბიექტი მუშაობს საუკეთესოდ']} | |
| }, | |
| 1:{ // Reveal | |
| en:{title:'The Reveal — Step by step',steps:[ | |
| 'Position drone 5–10m from foreground object at eye level', | |
| 'Set gimbal to lock horizon (not auto-tilt)', | |
| 'Push Right Stick FORWARD gently (Pitch ↓) — drone moves forward', | |
| 'Simultaneously push Left Stick UP slowly — climb at 1–2 m/s', | |
| 'Keep both inputs steady for 8–12 seconds', | |
| 'Settings: ND16 · 1/60s shutter · ISO 100 · 4K/30fps · D-Log M']}, | |
| ka:{title:'გამოვლენა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 5–10 მ-ში წინ მდგომი ობიექტიდან თვალის სიმაღლეზე', | |
| 'გიმბალი ჰორიზონტზე ჩაკეტეთ (არა ავტო-დახრა)', | |
| 'მარჯვენა ჯოისტიკი ნელა წინ (Pitch ↓) — დრონი მიდის წინ', | |
| 'ერთდროულად მარცხენა ნელ-ნელა ზევით — 1–2 მ/წ აღმავლობა', | |
| 'ორივე ჯოისტიკი სტაბილურად 8–12 წამი', | |
| 'პარამეტრები: ND16 · 1/60 წმ · ISO 100 · 4K/30fps · D-Log M']} | |
| }, | |
| 2:{ // Dronie | |
| en:{title:'The Dronie — Step by step',steps:[ | |
| 'Position drone 3–5m from subject at face height', | |
| 'Enable ActiveTrack Trace mode and tap subject to lock', | |
| 'Push Left Stick UP and Right Stick BACK simultaneously', | |
| 'Hold inputs for 10–15 seconds — drone rises to 60–80m', | |
| 'Subject stays auto-framed by ActiveTrack', | |
| 'Settings: ND8 · 1/60s shutter · 4K/30fps · D-Log M']}, | |
| ka:{title:'დრონი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 3–5 მეტრის მანძილზე სუბიექტიდან სახის სიმაღლეზე', | |
| 'ჩართეთ ActiveTrack Trace რეჟიმი და შეეხეთ სუბიექტს მის ჩასაკეტად', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი ზევით და მარჯვენა ჯოისტიკი უკან ერთდროულად', | |
| 'დაიჭირეთ ჯოისტიკები 10–15 წამის განმავლობაში — დრონი ადის 60–80 მეტრამდე', | |
| 'სუბიექტი ავტომატურად რჩება კადრის ცენტრში ActiveTrack-ის წყალობით', | |
| 'პარამეტრები: ND8 · 1/60 წმ · 4K/30fps · D-Log M']} | |
| }, | |
| 3:{ | |
| en:{title:'Pedestal — Step by step',steps:[ | |
| 'Hover 1–2m above subject directly overhead', | |
| 'Lock gimbal at preferred angle (-45° or -90°)', | |
| 'Push Left Stick straight UP at 50% — climb at 0.5 m/s', | |
| 'No other inputs — drone goes straight up only', | |
| 'Climb for 15–20 seconds for full reveal', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · GPS mode ON']}, | |
| ka:{title:'პედესტალი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გაჩერდით 1–2 მეტრის სიმაღლეზე უშუალოდ სუბიექტის ზემოთ', | |
| 'დააფიქსირეთ გიმბალი სასურველ კუთხეზე (-45° ან -90°)', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი პირდაპირ ზევით 50%-ით — ამოსვლა 0.5 მ/წ სიჩქარით', | |
| 'სხვა შეყვანა არ არის საჭირო — დრონი მხოლოდ ვერტიკალურად მოძრაობს', | |
| 'ამოდით 15–20 წამის განმავლობაში სრული გამოვლენისთვის', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · GPS რეჟიმი']} | |
| }, | |
| 5:{ | |
| en:{title:'Side Slide — Step by step',steps:[ | |
| 'Position drone at desired altitude, facing 90° to subject', | |
| 'Push Right Stick fully sideways (Roll) — no other input', | |
| 'Drone slides perfectly horizontal across subject', | |
| 'Maintain altitude with light Left Stick corrections', | |
| 'Best at 20–40m altitude for cinematic feel', | |
| 'Settings: ND32 · 1/60s · 4K/30fps · Cine mode for smoothness']}, | |
| ka:{title:'გვერდული სლაიდი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი სასურველ სიმაღლეზე, კამერა მიმართული 90° კუთხით სუბიექტისკენ', | |
| 'სრულად დააჭირეთ მარჯვენა ჯოისტიკი გვერდულად (Roll) — სხვა შეყვანის გარეშე', | |
| 'დრონი მოძრაობს სრულიად ჰორიზონტალურად სუბიექტის გასწვრივ', | |
| 'შეინარჩუნეთ სიმაღლე მსუბუქი მარცხენა ჯოისტიკის კორექციით', | |
| 'საუკეთესო ეფექტი 20–40 მეტრის სიმაღლეზე კინემატოგრაფიული შეგრძნებისთვის', | |
| 'პარამეტრები: ND32 ფილტრი · 1/60 წამი შატერი · 4K/30fps · Cine რეჟიმი სიგლუვისთვის']} | |
| }, | |
| 6:{ | |
| en:{title:'Tilt-Up Reveal — Step by step',steps:[ | |
| 'Position drone 10m back from subject, gimbal at -90° (full down)', | |
| 'Push Right Stick forward gently — drone moves forward at 3–5 m/s', | |
| 'Simultaneously rotate gimbal wheel UP from -90° to 0° over 5–8 seconds', | |
| 'Ground fills frame initially, then horizon opens up', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · D-Log M · Golden hour ideal']}, | |
| ka:{title:'გიმბალის გამოვლენა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი სუბიექტიდან 10 მეტრის უკან, გიმბალი -90° კუთხეზე (პირდაპირ ქვემოთ)', | |
| 'ნელა დააჭირეთ მარჯვენა ჯოისტიკი წინ — დრონი მოძრაობს 3–5 მ/წ სიჩქარით', | |
| 'გიმბალის დისკი ნელ-ნელა ატრიალეთ ზევით: -90°-დან 0°-მდე 5–8 წამის განმავლობაში', | |
| 'ნიადაგი ჯერ მთლიანად ივსებს კადრს, შემდეგ ჰორიზონტი თანდათან იხსნება', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · D-Log M · საუკეთესოა გარიჟრაჟზე']} | |
| }, | |
| 7:{ | |
| en:{title:'The Orbit — Step by step',steps:[ | |
| 'Position drone 15–30m from subject, set gimbal to point at it', | |
| 'Enable POI mode and tap subject to lock', | |
| 'Push Left Stick LEFT or RIGHT (Yaw) at 30–40% — orbit starts', | |
| 'Adjust Right Stick (Roll) IN/OUT to change radius', | |
| 'POI keeps camera locked on subject automatically', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Obstacle avoidance ON']}, | |
| ka:{title:'ორბიტა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 15–30 მეტრის მანძილზე სუბიექტიდან, კამერა მიმართული მისკენ', | |
| 'ჩართეთ POI რეჟიმი და შეეხეთ სუბიექტს მის ჩასაკეტად', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი მარცხნივ ან მარჯვნივ 30–40%-ით — იწყება ორბიტა', | |
| 'მარჯვენა ჯოისტიკი (Roll) გამოიყენეთ რადიუსის შესაცვლელად — შიგნით ან გარეთ', | |
| 'POI რეჟიმი ავტომატურად ინახავს კამერას ჩაკეტილს სუბიექტზე', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · დაბრკოლების თავიდან აცილება ჩართული']} | |
| }, | |
| 9:{ | |
| en:{title:'Tracking Shot — Step by step',steps:[ | |
| 'Position drone alongside or behind moving subject at 10–15m', | |
| 'Enable ActiveTrack 360° in Trace or Parallel mode', | |
| 'Tap subject — drone auto-follows at matching speed', | |
| 'Fine-tune position with Right Stick if needed', | |
| 'Maintain consistent gap throughout the shot', | |
| 'Settings: ND16 · 1/60s · 4K/60fps for slow-mo option']}, | |
| ka:{title:'თრექინგი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი მოძრავი სუბიექტის გვერდით ან უკან 10–15 მეტრის მანძილზე', | |
| 'ჩართეთ ActiveTrack 360° Trace ან Parallel რეჟიმში', | |
| 'შეეხეთ სუბიექტს — დრონი ავტომატურად მიჰყვება შესაბამისი სიჩქარით', | |
| 'საჭიროების შემთხვევაში მარჯვენა ჯოისტიკით გააკეთეთ პოზიციის წვრილი კორექცია', | |
| 'შეინარჩუნეთ თანმიმდევრული მანძილი მთელი გადაღების განმავლობაში', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/60fps შესაძლო სლო-მო-სთვის']} | |
| }, | |
| 10:{ | |
| en:{title:'The Rocket — Step by step',steps:[ | |
| 'Hover directly above subject at 5–10m height', | |
| 'Lock gimbal at -90° (straight down)', | |
| 'Push Left Stick fully UP — ascend at max 3 m/s', | |
| 'No other inputs — drone goes straight up', | |
| 'Capture 10m to 100m+ altitude for maximum impact', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Sport mode for speed']}, | |
| ka:{title:'რაკეტა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გაჩერდით უშუალოდ სუბიექტის ზემოთ 5–10 მეტრის სიმაღლეზე', | |
| 'დააფიქსირეთ გიმბალი -90° კუთხეზე (პირდაპირ ქვემოთ)', | |
| 'სრულად დააჭირეთ მარცხენა ჯოისტიკი ზევით — ამოსვლა მაქსიმუმ 3 მ/წ სიჩქარით', | |
| 'სხვა შეყვანის გარეშე — დრონი მოძრაობს მხოლოდ ვერტიკალურად', | |
| 'გადაიღეთ 10 მეტრიდან 100+ მეტრამდე მაქსიმალური ეფექტისთვის', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · სპორტ რეჟიმი სიჩქარისთვის']} | |
| }, | |
| 11:{ | |
| en:{title:'Rocket + Twist — Step by step',steps:[ | |
| 'Hover directly above subject, gimbal -90°', | |
| 'Push Left Stick UP + slightly LEFT or RIGHT simultaneously', | |
| 'Drone climbs while rotating (yaw) at 5–10°/second', | |
| 'Maintain smooth steady inputs — no jerks', | |
| 'Climb for 10–15 seconds for full effect', | |
| 'Settings: ND16 · 1/60s · 4K/30fps']}, | |
| ka:{title:'სპირალური რაკეტა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გაჩერდით უშუალოდ სუბიექტის ზემოთ, გიმბალი -90° კუთხეზე', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი ზევით და ოდნავ მარცხნივ ან მარჯვნივ ერთდროულად', | |
| 'დრონი ერთდროულად ადის და ბრუნავს 5–10°/წამში სიჩქარით', | |
| 'შეინარჩუნეთ გლუვი სტაბილური მოძრაობა — ბიძგების ან მკვეთრი ცვლილებების გარეშე', | |
| 'ამოდით 10–15 წამის განმავლობაში სრული ვიზუალური ეფექტისთვის', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps']} | |
| }, | |
| 12:{ | |
| en:{title:"Bird's Eye — Step by step",steps:[ | |
| 'Climb to 30–50m altitude over your subject area', | |
| 'Lock gimbal at -90° (straight down)', | |
| 'Push Right Stick FORWARD — drone flies forward', | |
| 'Camera shows top-down patterns of roads, fields, water', | |
| 'Maintain altitude and direction for 10–20 seconds', | |
| 'Settings: ND16/32 · 1/60s · 4K/30fps · D-Log M']}, | |
| ka:{title:'ჩიტის თვალი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'ამოდით 30–50 მეტრის სიმაღლეზე გადასაღები ფართობის თავზე', | |
| 'დააფიქსირეთ გიმბალი -90° კუთხეზე (პირდაპირ ქვემოთ)', | |
| 'დააჭირეთ მარჯვენა ჯოისტიკი წინ — დრონი მოძრაობს წინ', | |
| 'კამერა აჩვენებს ზემოდან გზებს, მინდვრებს, წყლის ნახაზებს', | |
| 'შეინარჩუნეთ სიმაღლე და მიმართულება 10–20 წამის განმავლობაში', | |
| 'პარამეტრები: ND16 ან ND32 ფილტრი · 1/60 წამი შატერი · 4K/30fps · D-Log M']} | |
| }, | |
| 13:{ | |
| en:{title:'Low and Fast — Step by step',steps:[ | |
| 'Pre-scan flight path for obstacles — critical step', | |
| 'Switch to Sport mode for max speed', | |
| 'Descend to 2–4m above ground', | |
| 'Push Right Stick fully forward — full speed', | |
| 'Use ND64/128 for motion blur — looks cinematic', | |
| 'Settings: ND64-128 · 1/60s · 4K/60fps · Obstacle avoidance ON']}, | |
| ka:{title:'დაბალი და სწრაფი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'წინასწარ შეამოწმეთ ფრენის გზა დაბრკოლებებზე — ეს კრიტიკულად მნიშვნელოვანი ნაბიჯია', | |
| 'გადართეთ სპორტ რეჟიმზე მაქსიმალური სიჩქარისთვის', | |
| 'ჩამოდით 2–4 მეტრის სიმაღლეზე ნიადაგიდან', | |
| 'სრულად დააჭირეთ მარჯვენა ჯოისტიკი წინ — დრონი მოძრაობს მაქსიმალური სიჩქარით', | |
| 'გამოიყენეთ ND64 ან ND128 ფილტრი მოძრაობის ბუნდისთვის — გამოიყურება კინემატოგრაფიულად', | |
| 'პარამეტრები: ND64–128 ფილტრი · 1/60 წამი შატერი · 4K/60fps · დაბრკოლების თავიდან აცილება ჩართული']} | |
| }, | |
| 14:{ | |
| en:{title:'The Helix — Step by step',steps:[ | |
| 'Position at 15–20m from subject at low altitude', | |
| 'Enable POI mode, lock subject', | |
| 'Push Left Stick LEFT or RIGHT (Yaw) + UP simultaneously', | |
| 'Drone orbits while climbing — creates rising spiral', | |
| 'Gradually increase radius for widening helix effect', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · 15–25s duration']}, | |
| ka:{title:'ჰელიქსი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 15–20 მეტრის მანძილზე სუბიექტიდან დაბალ სიმაღლეზე', | |
| 'ჩართეთ POI რეჟიმი და ჩაკეტეთ სუბიექტი', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი მარცხნივ ან მარჯვნივ და ზევით ერთდროულად', | |
| 'დრონი ბრუნავს სუბიექტის გარშემო და ერთდროულად ადის — ქმნის ამომავალ სპირალს', | |
| 'ნელ-ნელა გაზარდეთ რადიუსი ფართოვდება სპირალის ეფექტისთვის', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · 15–25 წამის ხანგრძლივობა']} | |
| }, | |
| 15:{ | |
| en:{title:'Dolly Zoom — Step by step',steps:[ | |
| 'Position 5–10m from subject, use 2× optical zoom', | |
| 'Push Right Stick BACK gently — drone moves backward', | |
| 'Simultaneously decrease zoom from 2× to 1× slowly', | |
| 'Subject stays same size, background warps dramatically', | |
| 'Effect lasts 4–7 seconds — practice for smooth result', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Manual zoom control']}, | |
| ka:{title:'დოლი-ზუმი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 5–10 მეტრის მანძილზე სუბიექტიდან, ჩართეთ 2× ოპტიკური ზუმი', | |
| 'ნელა დააჭირეთ მარჯვენა ჯოისტიკი უკან — დრონი მოძრაობს უკან', | |
| 'ერთდროულად ნელ-ნელა შეცვალეთ ზუმი 2×-დან 1×-მდე', | |
| 'სუბიექტი რჩება ერთი და იგივე ზომის, მაგრამ ფონი დრამატულად იცვლება', | |
| 'ეფექტი გრძელდება 4–7 წამი — საჭიროა ვარჯიში გლუვი შედეგისთვის', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · ხელით ზუმის კონტროლი']} | |
| }, | |
| 16:{ | |
| en:{title:'Rising Orbit — Step by step',steps:[ | |
| 'Enable POI mode at 15m altitude near subject', | |
| 'Push Left Stick LEFT/RIGHT (Yaw) + UP at same time', | |
| 'Manually tilt gimbal down progressively as you climb', | |
| 'Drone orbits, climbs, and looks down at subject', | |
| 'Creates a "god view" emerging effect', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · 20–30s duration']}, | |
| ka:{title:'ამომავალი ორბიტა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'ჩართეთ POI რეჟიმი 15 მეტრის სიმაღლეზე სუბიექტთან ახლოს', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი მარცხნივ ან მარჯვნივ და ზევით ერთდროულად', | |
| 'მექანიკურად დახარეთ გიმბალი ნელ-ნელა ქვემოთ ამოსვლასთან ერთად', | |
| 'დრონი ბრუნავს, ადის და იყურება ქვემოთ სუბიექტზე', | |
| 'ქმნის ეფექტს თითქოს ღმერთის თვალით უყურებთ სუბიექტს', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · 20–30 წამის ხანგრძლივობა']} | |
| }, | |
| 18:{ | |
| en:{title:'Hyperlapse — Step by step',steps:[ | |
| 'Open Hyperlapse mode — choose Free or Circle', | |
| 'Set interval to 2–5 seconds between photos', | |
| 'Set total duration: 5–15 minutes recommended', | |
| 'Fly slowly at 1 m/s along scenic path', | |
| 'Drone auto-processes 300+ photos into time-lapse video', | |
| 'Settings: ND16 · 1/120s · 4K/30fps output · Tripod stable']}, | |
| ka:{title:'ჰაიპერლეფსი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'გახსენით ჰაიპერლეფსის რეჟიმი — აირჩიეთ Free ან Circle ვარიანტი', | |
| 'დააყენეთ ინტერვალი 2–5 წამი ფოტოებს შორის', | |
| 'დააყენეთ მთლიანი ხანგრძლივობა: რეკომენდებულია 5–15 წუთი', | |
| 'იფრინეთ ნელა 1 მ/წ სიჩქარით ლამაზ პეიზაჟურ მარშრუტზე', | |
| 'დრონი ავტომატურად ამუშავებს 300+ ფოტოს დროის-ლეფსურ ვიდეოდ', | |
| 'პარამეტრები: ND16 ფილტრი · 1/120 წამი შატერი · 4K/30fps გამოსასვლელი · სტაბილური ფრენა']} | |
| }, | |
| 19:{ | |
| en:{title:'Space Elevator — Step by step',steps:[ | |
| 'Position over subject at 5m altitude, full zoom (2×)', | |
| 'Push Left Stick UP very slowly — ascend at 0.5 m/s', | |
| 'Simultaneously decrease zoom to compensate for distance', | |
| 'Subject stays same size while background warps away', | |
| 'Very slow, very steady — 15–25 second shot', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Manual zoom']}, | |
| ka:{title:'სივრცის ლიფტი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი სუბიექტის ზემოთ 5 მეტრის სიმაღლეზე, სრული 2× ზუმით', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი ძალიან ნელა ზევით — ამოსვლა 0.5 მ/წ სიჩქარით', | |
| 'ერთდროულად ნელ-ნელა შეამცირეთ ზუმი მანძილის კომპენსაციისთვის', | |
| 'სუბიექტი რჩება ერთი ზომის, სანამ ფონი თანდათან განცალკევდება', | |
| 'ძალიან ნელი და სტაბილური მოძრაობა — 15–25 წამის გადაღება', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · ხელით ზუმის კონტროლი']} | |
| }, | |
| 20:{ | |
| en:{title:'Cat and Mouse — Step by step',steps:[ | |
| 'Position drone 8–12m in front of moving subject', | |
| 'Enable ActiveTrack Spotlight to keep cam on subject', | |
| 'Push Right Stick BACK — drone retreats backward', | |
| 'Match drone speed to subject pace', | |
| 'Subject appears to chase the camera', | |
| 'Settings: ND16 · 1/60s · 4K/60fps · Sport mode']}, | |
| ka:{title:'კატა და თაგვი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 8–12 მეტრით წინ მოძრავი სუბიექტიდან', | |
| 'ჩართეთ ActiveTrack Spotlight რეჟიმი რომ კამერა დარჩეს სუბიექტზე', | |
| 'დააჭირეთ მარჯვენა ჯოისტიკი უკან — დრონი მოძრაობს უკან', | |
| 'შეუსაბამეთ დრონის სიჩქარე სუბიექტის სიჩქარეს', | |
| 'სუბიექტი ისე ჩანს, თითქოს დევნის კამერას — წარმოშობს ინტენსიურ გრძნობას', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/60fps · სპორტ რეჟიმი']} | |
| }, | |
| 22:{ | |
| en:{title:'Shadow Chase — Step by step',steps:[ | |
| 'Fly at 5–10m altitude during golden hour (low sun)', | |
| 'Tilt gimbal down to capture drones own shadow', | |
| 'Push Right Stick forward — fly over light terrain', | |
| 'Shadow follows below — sand, grass, snow work best', | |
| 'Late afternoon = longest shadows = most cinematic', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Sun behind drone']}, | |
| ka:{title:'ჩრდილის დევნა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'იფრინეთ 5–10 მეტრის სიმაღლეზე ოქროს საათის დროს (დაბალი მზე)', | |
| 'დახარეთ გიმბალი ქვემოთ რომ კადრში დრონის ჩრდილი ჩანდეს', | |
| 'დააჭირეთ მარჯვენა ჯოისტიკი წინ — გაფრინდით ღია ნიადაგზე', | |
| 'ჩრდილი მიჰყვება ქვემოთ — საუკეთესოა ქვიშაზე, ბალახზე ან თოვლზე', | |
| 'საღამოს გადაღება ქმნის ყველაზე გრძელ და კინემატოგრაფიულ ჩრდილს', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · მზე დრონის უკან']} | |
| }, | |
| 24:{ | |
| en:{title:'Split Horizon — Step by step',steps:[ | |
| 'Position at 20–40m altitude along coastline or border', | |
| 'Set gimbal to -20° to -30° tilt down', | |
| 'Push Right Stick SIDEWAYS (Roll) — lateral slide', | |
| 'Keep horizon line perfectly in middle of frame', | |
| 'Maintain exact altitude — no climbing or dropping', | |
| 'Settings: ND32 · 1/60s · 4K/30fps · Cine mode']}, | |
| ka:{title:'ჰორიზონტი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 20–40 მეტრის სიმაღლეზე სანაპიროზე ან საზღვარზე', | |
| 'დააყენეთ გიმბალი -20°-დან -30° კუთხემდე დახრილი', | |
| 'დააჭირეთ მარჯვენა ჯოისტიკი გვერდულად (Roll) — გვერდითი სლაიდი', | |
| 'ჰორიზონტის ხაზი შეინარჩუნეთ ზუსტად კადრის ცენტრში', | |
| 'შეინარჩუნეთ ზუსტი სიმაღლე — არ აიწიოთ ან დაიწიოთ', | |
| 'პარამეტრები: ND32 ფილტრი · 1/60 წამი შატერი · 4K/30fps · Cine რეჟიმი']} | |
| }, | |
| 25:{ | |
| en:{title:'Spotlight 2.0 — Step by step',steps:[ | |
| 'Enable Spotlight 2.0 mode, tap subject to lock', | |
| 'Camera auto-tracks subject regardless of drone direction', | |
| 'Fly freely in any direction — orbit, slide, climb', | |
| 'Camera stays locked on subject the entire time', | |
| 'Creates "invisible cameraman" effect — drone moves, cam doesnt seem to', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Subject under 60m away']}, | |
| ka:{title:'სპოტლაიტი 2.0 — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'ჩართეთ Spotlight 2.0 რეჟიმი და შეეხეთ სუბიექტს მის ჩასაკეტად', | |
| 'კამერა ავტომატურად მიჰყვება სუბიექტს დრონის მიმართულების მიუხედავად', | |
| 'იფრინეთ თავისუფლად ნებისმიერი მიმართულებით — ორბიტა, სლაიდი, ამოსვლა', | |
| 'კამერა მუდამ რჩება სუბიექტზე ჩაკეტილი მთელი დროის განმავლობაში', | |
| 'ქმნის ეფექტს თითქოს უხილავი ოპერატორი იღებს — დრონი მოძრაობს, კამერა კი თითქოს არ', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · სუბიექტი 60 მ-ის რადიუსში']} | |
| }, | |
| 26:{ | |
| en:{title:'Ground Skim — Step by step',steps:[ | |
| 'Pre-check the surface is flat and obstacle-free', | |
| 'Descend to 1–2m above ground or water surface', | |
| 'Push Right Stick forward at moderate speed (4–6 m/s)', | |
| 'Water creates stunning reflections — best for cinematics', | |
| 'Use ND128 for motion blur — looks dreamy', | |
| 'Settings: ND128 · 1/60s · 4K/60fps · Obstacle avoidance ON']}, | |
| ka:{title:'ზედაპირის სრიალი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'წინასწარ შეამოწმეთ ზედაპირი — უნდა იყოს ბრტყელი და დაბრკოლების გარეშე', | |
| 'ჩამოდით 1–2 მეტრის სიმაღლეზე ნიადაგის ან წყლის ზედაპირზე', | |
| 'დააჭირეთ მარჯვენა ჯოისტიკი წინ ზომიერი სიჩქარით (4–6 მ/წ)', | |
| 'წყლის ზედაპირი ქმნის შესანიშნავ ასახვებს — საუკეთესოა კინემატოგრაფიული შედეგისთვის', | |
| 'გამოიყენეთ ND128 ფილტრი მოძრაობის ბუნდისთვის — შედეგი იქნება ოცნებური', | |
| 'პარამეტრები: ND128 ფილტრი · 1/60 წამი შატერი · 4K/60fps · დაბრკოლების თავიდან აცილება ჩართული']} | |
| }, | |
| 27:{ | |
| en:{title:'Pendulum — Step by step',steps:[ | |
| 'Position at desired altitude, full distance from subject', | |
| 'PASS 1: Push Right Stick fully RIGHT — slide left-to-right', | |
| 'Return to start, MATCH altitude exactly', | |
| 'PASS 2: Push Right Stick fully LEFT — slide right-to-left', | |
| 'In edit: cut between passes on music beats', | |
| 'Settings: ND32 · 1/60s · 4K/30fps · Identical settings both passes']}, | |
| ka:{title:'ქანქარა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი სასურველ სიმაღლეზე, სუბიექტიდან სრულ მანძილზე', | |
| 'პირველი გასვლა: სრულად დააჭირეთ მარჯვენა ჯოისტიკი მარჯვნივ — სლაიდი მარცხნიდან მარჯვნივ', | |
| 'დაბრუნდით საწყის პოზიციაზე, ზუსტად იგივე სიმაღლეზე', | |
| 'მეორე გასვლა: სრულად დააჭირეთ მარჯვენა ჯოისტიკი მარცხნივ — სლაიდი მარჯვნიდან მარცხნივ', | |
| 'მონტაჟში: ჭრა ორ გასვლას შორის მუსიკის ბიტზე რიტმის ეფექტისთვის', | |
| 'პარამეტრები: ND32 ფილტრი · 1/60 წამი შატერი · 4K/30fps · ერთიდაიგივე პარამეტრები ორივე გასვლაზე']} | |
| }, | |
| 28:{ | |
| en:{title:'Compression Orbit — Step by step',steps:[ | |
| 'Position 50m+ from subject (large radius)', | |
| 'Enable 2× optical zoom on Mini 4 Pro', | |
| 'Enable POI mode, lock subject', | |
| 'Push Left Stick LEFT/RIGHT — orbit slowly', | |
| 'Background gets dramatically compressed by zoom', | |
| 'Settings: ND16 · 1/60s · 4K/30fps · Slow orbit speed']}, | |
| ka:{title:'კომპრესიის ორბიტა — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'მოათავსეთ დრონი 50+ მეტრის მანძილზე სუბიექტიდან (დიდი რადიუსი)', | |
| 'ჩართეთ 2× ოპტიკური ზუმი Mini 4 Pro-ზე', | |
| 'ჩართეთ POI რეჟიმი და ჩაკეტეთ სუბიექტი', | |
| 'დააჭირეთ მარცხენა ჯოისტიკი მარცხნივ ან მარჯვნივ — ნელი ორბიტა', | |
| 'ფონი დრამატულად კომპრესირდება ზუმის ეფექტით', | |
| 'პარამეტრები: ND16 ფილტრი · 1/60 წამი შატერი · 4K/30fps · ნელი ორბიტის სიჩქარე']} | |
| }, | |
| 33:{ | |
| en:{title:'4K Slow-Motion — Step by step',steps:[ | |
| 'Set camera to 4K/60fps in settings', | |
| 'Set shutter speed to 1/120s (double the fps rule)', | |
| 'Use ND16 to maintain proper exposure', | |
| 'Shoot any motion shot — waves, sports, wildlife', | |
| 'In edit: slow to 24fps = 2.5× slow motion', | |
| 'Settings: ND16 · 1/120s · 4K/60fps · D-Log M']}, | |
| ka:{title:'4K სლო-მო — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'დააყენეთ კამერა 4K/60fps რეჟიმზე პარამეტრებში', | |
| 'დააყენეთ შატერი 1/120 წამზე (ფრეიმის სიხშირის გაორმაგების წესი)', | |
| 'გამოიყენეთ ND16 ფილტრი სათანადო ექსპოზიციის შესანარჩუნებლად', | |
| 'გადაიღეთ ნებისმიერი მოძრაობა — ტალღები, სპორტი, ბუნება', | |
| 'მონტაჟში: შენელება 24fps-მდე იძლევა 2.5× სლო-მო ეფექტს', | |
| 'პარამეტრები: ND16 ფილტრი · 1/120 წამი შატერი · 4K/60fps · D-Log M']} | |
| }, | |
| 34:{ | |
| en:{title:'D-Log M Grade — Step by step',steps:[ | |
| 'Set color profile to D-Log M in camera settings', | |
| 'Footage will look flat/desaturated — this is normal', | |
| 'Use ND filters always (D-Log needs proper exposure)', | |
| 'Import to DaVinci Resolve or Premiere Pro', | |
| 'Apply DJI official LUT or custom cinematic LUT', | |
| 'Settings: D-Log M · 10-bit · ND16+ · ISO 100 base']}, | |
| ka:{title:'D-Log M გრეიდი — ნაბიჯ-ნაბიჯ',steps:[ | |
| 'დააყენეთ ფერის პროფილი D-Log M-ზე კამერის პარამეტრებში', | |
| 'მასალა გამოვა ბრტყელი და დესატურირებული — ეს ნორმალურია D-Log-ისთვის', | |
| 'ND ფილტრების გამოყენება აუცილებელია (D-Log საჭიროებს სათანადო ექსპოზიციას)', | |
| 'შემოიტანეთ მასალა DaVinci Resolve-ში ან Premiere Pro-ში', | |
| 'მიამატეთ DJI-ის ოფიციალური LUT ან საკუთარი კინემატოგრაფიული LUT', | |
| 'პარამეტრები: D-Log M · 10-bit ფერი · ND16+ ფილტრი · ISO 100 ბაზური']} | |
| }, | |
| }; | |
| const _SHOT_NAMES_EN = {1:'The Reveal',2:'The Dronie',3:'Pedestal',5:'Side Slide',6:'Tilt-Up Reveal', | |
| 7:'The Orbit',9:'Tracking',10:'The Rocket',11:'Rocket+Twist',12:"Bird's Eye",13:'Low and Fast', | |
| 14:'The Helix',15:'Dolly Zoom',16:'Rising Orbit',18:'Hyperlapse',19:'Space Elevator',20:'Cat-Mouse', | |
| 22:'Shadow Chase',24:'Split Horizon',25:'Spotlight',26:'Ground Skim',27:'Pendulum', | |
| 28:'Compression Orbit',33:'4K Slow-Mo',34:'D-Log M'}; | |
| const _SHOT_NAMES_KA = {1:'გამოვლენა',2:'დრონი',3:'პედესტალი',5:'სლაიდი',6:'გიმბ. გამოვ.', | |
| 7:'ორბიტა',9:'თრექინგი',10:'რაკეტა',11:'სპირ.რაკ.',12:'ჩიტის თვალი',13:'დაბ.+სწრ.', | |
| 14:'ჰელიქსი',15:'დოლი-ზუმი',16:'ამ. ორბ.',18:'ჰაიპერლეფსი',19:'სივ. ლიფტი',20:'კატ-თაგ.', | |
| 22:'ჩრდ. დევნა',24:'ჰორიზონტი',25:'სპოტლაიტი',26:'ზედ. სრიალი',27:'ქანქარა', | |
| 28:'კომპ. ორბ.',33:'4K სლო-მო',34:'D-Log M'}; | |
| // Helper to find shot data by number from SHOTS array | |
| function getShotByNum(num){ | |
| return SHOTS.find(s => s[0] === num); | |
| } | |
| // Generate compact visual diagram for a shot (sticks + flight path) | |
| function getShotDiagram(shotNum, color){ | |
| const sh = getShotByNum(shotNum); | |
| if(!sh) return ''; | |
| const L = currentLang; | |
| const ls = sh[9], rs = sh[10], pathKey = sh[11], isAuto = sh[12]; | |
| const pathSVG = fp(pathKey, color); | |
| const isAutoBadge = isAuto ? `<div style="position:absolute;top:4px;right:4px;font-size:7px;font-weight:700;padding:2px 7px;border-radius:6px;background:${color}22;color:${color};border:1px solid ${color}44">${L==='ka'?'⚡ ავტო':'⚡ AUTO'}</div>` : ''; | |
| return `<div style="background:#1a2c44;border:1px solid ${color}33;border-radius:10px;padding:10px;margin-top:8px"> | |
| <div style="display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:8px"> | |
| ${stick(ls, color, L)} | |
| <div style="display:flex;flex-direction:column;align-items:center;gap:2px"> | |
| <span style="font-size:16px">🎮</span> | |
| <span style="font-size:6px;color:#4a6380;letter-spacing:1px">L · R</span> | |
| </div> | |
| ${stick(rs, color, L)} | |
| </div> | |
| <div style="position:relative;background:#1f3250;border:1px solid ${color}22;border-radius:8px;overflow:hidden;height:78px"> | |
| <svg viewBox="0 0 280 92" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" style="width:100%;height:100%">${pathSVG}</svg> | |
| ${isAutoBadge} | |
| </div> | |
| </div>`; | |
| } | |
| function openComboModal(comboIdx){ | |
| const c = COMBOS[comboIdx]; | |
| if(!c) return; | |
| const L = currentLang; | |
| const title = L==='ka' ? c.ka_title : c.en_title; | |
| const icon = c.icon; | |
| let stepsHtml = ''; | |
| c.shots.forEach((shotNum, i) => { | |
| const step = SHOT_STEPS[shotNum]; | |
| if(!step) return; | |
| const data = L==='ka' ? step.ka : step.en; | |
| const shotName = L==='ka' ? _SHOT_NAMES_KA[shotNum] : _SHOT_NAMES_EN[shotNum]; | |
| const color = _CAT_COLORS[shotNum]; | |
| const diagram = getShotDiagram(shotNum, color); | |
| stepsHtml += `<div class="step-block"> | |
| <div class="step-num" style="background:${color}1f;color:${color};border:1px solid ${color}44">${i+1}</div> | |
| <div class="step-content"> | |
| <div class="step-shot-tag" style="color:${color}">SHOT #${shotNum} · ${shotName}</div> | |
| <div class="step-title">${data.title}</div> | |
| <div class="step-row" style="display:grid;grid-template-columns:1.1fr 0.9fr;gap:14px;align-items:start;margin-top:8px"> | |
| <ul class="step-instr" style="margin:0;padding-left:18px"> | |
| ${data.steps.map(s=>`<li>${s}</li>`).join('')} | |
| </ul> | |
| <div>${diagram}</div> | |
| </div> | |
| </div> | |
| </div>`; | |
| }); | |
| document.getElementById('modal-body').innerHTML = ` | |
| <div class="modal-head"> | |
| <span style="font-size:30px;flex-shrink:0">${icon}</span> | |
| <h3 style="color:${c.color}">${title}</h3> | |
| <button class="modal-close" onclick="closeModal()">✕</button> | |
| </div> | |
| <div class="modal-body">${stepsHtml}</div> | |
| `; | |
| document.getElementById('modal-bg').classList.add('show'); | |
| document.body.style.overflow = 'hidden'; | |
| } | |
| function closeModal(){ | |
| document.getElementById('modal-bg').classList.remove('show'); | |
| document.body.style.overflow = ''; | |
| } | |
| function renderCombos(){ | |
| const L=currentLang; | |
| const grid=document.getElementById('combos-grid'); | |
| if(!grid)return; | |
| let h=''; | |
| for(const c of COMBOS){ | |
| const pills=c.shots.map(n=>`<span style="background:${_CAT_COLORS[n]}18;color:${_CAT_COLORS[n]};border:1px solid ${_CAT_COLORS[n]}44;border-radius:8px;padding:3px 10px;font-size:11px;font-weight:700;font-family:var(--font-mono)">#${n}</span>`).join(`<span style="color:#4a6380;font-size:14px;margin:0 2px">→</span>`); | |
| h+=`<div class="combo-card-click" onclick="openComboModal(${COMBOS.indexOf(c)})" style="background:var(--card);border:1px solid ${c.color}33;border-radius:16px;overflow:hidden;transition:transform .2s,box-shadow .2s" onmouseenter="this.style.transform='translateY(-4px)';this.style.boxShadow='0 12px 40px ${c.color}25'" onmouseleave="this.style.transform='';this.style.boxShadow=''"> | |
| <div style="padding:14px 16px 12px;border-bottom:1px solid ${c.color}18;display:flex;align-items:center;gap:10px"> | |
| <span style="font-size:22px">${c.icon}</span> | |
| <div> | |
| <div style="font-size:13px;font-weight:700;color:${c.color}" lang-en>${c.en_title}</div> | |
| <div style="font-size:13px;font-weight:700;color:${c.color}" lang-ka>${c.ka_title}</div> | |
| </div> | |
| </div> | |
| <div style="padding:11px 16px 6px;display:flex;gap:5px;flex-wrap:wrap;align-items:center">${pills}</div> | |
| <div style="padding:4px 16px;font-size:10px;font-weight:700;color:${c.color};font-family:var(--font-mono);opacity:.7" lang-en>${c.en_seq}</div> | |
| <div style="padding:0 16px 4px;font-size:10px;font-weight:700;color:${c.color};font-family:var(--font-mono);opacity:.7" lang-ka>${c.ka_seq}</div> | |
| <div style="padding:8px 16px;font-size:11.5px;color:#7a9ab8;line-height:1.65" lang-en>${c.en_why}</div> | |
| <div style="padding:8px 16px;font-size:11.5px;color:#7a9ab8;line-height:1.65" lang-ka>${c.ka_why}</div> | |
| <div style="margin:0 16px 12px;background:${c.color}0a;border-left:2px solid ${c.color}55;border-radius:0 8px 8px 0;padding:8px 10px;display:flex;gap:8px;align-items:flex-start"> | |
| <span style="font-size:12px">💡</span> | |
| <div> | |
| <div style="font-size:10px;color:${c.color};font-weight:600;margin-bottom:2px" lang-en>PRO TIP · ${c.en_dur}</div> | |
| <div style="font-size:10px;color:${c.color};font-weight:600;margin-bottom:2px" lang-ka>PRO რჩევა · ${c.ka_dur}</div> | |
| <div style="font-size:10px;color:#4a6080;line-height:1.55" lang-en>${c.en_tip}</div> | |
| <div style="font-size:10px;color:#4a6080;line-height:1.55" lang-ka>${c.ka_tip}</div> | |
| </div> | |
| </div> | |
| </div>`; | |
| } | |
| grid.innerHTML=h; | |
| } | |
| renderAll(); | |
| renderCombos(); | |
| </script> | |
| <!-- COMBO SECTION --> | |
| <section id="combos" style="position:relative;z-index:1;max-width:1400px;margin:0 auto;padding:28px 20px 60px"> | |
| <div class="section-divider" style="margin-bottom:8px"> | |
| <div class="nav-dot" style="background:#ffc400;width:8px;height:8px;border-radius:50%"></div> | |
| <h2 style="color:#ffc400" lang-en>🎬 COMBO SEQUENCES</h2> | |
| <h2 style="color:#ffc400" lang-ka>🎬 კომბინაციები</h2> | |
| <div class="div-line" style="background:linear-gradient(90deg,#ffc40033,transparent)"></div> | |
| <span class="div-count" style="color:#ffc400" lang-en>7 sequences</span> | |
| <span class="div-count" style="color:#ffc400" lang-ka>7 სცენარი</span> | |
| </div> | |
| <p style="font-size:11.5px;color:var(--muted);margin:0 0 20px;line-height:1.65;padding-left:20px" lang-en>Click any combo to see step-by-step shooting instructions. Each combo creates a complete cinematic arc.</p> | |
| <p style="font-size:11.5px;color:var(--muted);margin:0 0 20px;line-height:1.65;padding-left:20px" lang-ka>დააწექით ნებისმიერ კომბოს — ნახავთ ნაბიჯ-ნაბიჯ ინსტრუქციებს. თითოეული კომბო სრულ კინემატოგრაფიულ ისტორიას ყვება.</p> | |
| <div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px" id="combos-grid"></div> | |
| </section> | |
| <!-- ND FILTER & CAMERA SETTINGS SECTION --> | |
| <section id="filters" style="position:relative;z-index:1;max-width:1400px;margin:0 auto;padding:28px 20px 60px"> | |
| <div class="section-divider" style="margin-bottom:8px"> | |
| <div class="nav-dot" style="background:#00e676;width:8px;height:8px;border-radius:50%"></div> | |
| <h2 style="color:#00e676" lang-en>📷 CAMERA SETTINGS — ND FILTERS · SHUTTER · FPS</h2> | |
| <h2 style="color:#00e676" lang-ka>📷 კამერის პარამეტრები — ND · შატერი · FPS</h2> | |
| <div class="div-line" style="background:linear-gradient(90deg,#00e67633,transparent)"></div> | |
| </div> | |
| <p style="font-size:11.5px;color:var(--muted);margin:0 0 24px;line-height:1.65;padding-left:20px" lang-en>The right ND filter + shutter speed combo creates cinematic motion blur. Follow the 180° shutter rule for natural-looking video.</p> | |
| <p style="font-size:11.5px;color:var(--muted);margin:0 0 24px;line-height:1.65;padding-left:20px" lang-ka>სწორი ND ფილტრი + შატერი = კინემატოგრაფიული მოძრაობის ბუნდი. 180° შატერის წესი — ბუნებრივი ვიდეო.</p> | |
| <!-- 180 RULE --> | |
| <div style="background:linear-gradient(135deg,rgba(0,230,118,0.06),rgba(0,180,90,0.02));border:1px solid #00e67644;border-radius:16px;padding:20px 24px;margin-bottom:24px"> | |
| <div style="font-size:12px;font-weight:700;color:#00e676;letter-spacing:2px;margin-bottom:10px" lang-en>📐 THE 180° SHUTTER RULE</div> | |
| <div style="font-size:12px;font-weight:700;color:#00e676;letter-spacing:2px;margin-bottom:10px" lang-ka>📐 180° შატერის წესი</div> | |
| <div style="font-size:13px;color:var(--text);line-height:1.7" lang-en>Set shutter speed to <b>2× your frame rate</b> for natural motion blur. Example: shooting 30fps → shutter 1/60s. Shooting 60fps → shutter 1/120s.</div> | |
| <div style="font-size:13px;color:var(--text);line-height:1.7" lang-ka>დააყენეთ შატერი <b>2× ფრეიმის სიხშირისა</b> ბუნებრივი ბუნდისთვის. მაგ.: 30fps → 1/60 წმ. 60fps → 1/120 წმ.</div> | |
| <div style="display:flex;gap:12px;margin-top:14px;flex-wrap:wrap"> | |
| <div style="background:rgba(0,230,118,0.08);border:1px solid #00e67633;border-radius:10px;padding:8px 14px;font-family:var(--font-mono);font-size:11px;color:#00e676"><b>24fps</b> → 1/50s</div> | |
| <div style="background:rgba(0,230,118,0.08);border:1px solid #00e67633;border-radius:10px;padding:8px 14px;font-family:var(--font-mono);font-size:11px;color:#00e676"><b>30fps</b> → 1/60s</div> | |
| <div style="background:rgba(0,230,118,0.08);border:1px solid #00e67633;border-radius:10px;padding:8px 14px;font-family:var(--font-mono);font-size:11px;color:#00e676"><b>60fps</b> → 1/120s</div> | |
| <div style="background:rgba(0,230,118,0.08);border:1px solid #00e67633;border-radius:10px;padding:8px 14px;font-family:var(--font-mono);font-size:11px;color:#00e676"><b>120fps</b> → 1/240s</div> | |
| </div> | |
| </div> | |
| <!-- CINEMATIC EXPOSURE TABLE --> | |
| <div style="background:var(--card);border:1px solid #00e67644;border-radius:14px;overflow:hidden;margin-bottom:24px"> | |
| <div style="background:linear-gradient(135deg,rgba(0,230,118,0.12),rgba(0,180,90,0.04));padding:14px 18px;border-bottom:1px solid #00e67633"> | |
| <div style="font-size:13px;font-weight:700;color:#00e676;letter-spacing:1.5px;margin-bottom:4px" lang-en>🎬 CINEMATIC EXPOSURE GUIDE (ISO 100)</div> | |
| <div style="font-size:13px;font-weight:700;color:#00e676;letter-spacing:1.5px;margin-bottom:4px" lang-ka>🎬 კინემატოგრაფიული ექსპოზიციის გზამკვლევი (ISO 100-ზე)</div> | |
| <div style="font-size:11px;color:var(--muted)" lang-en>Match the right ND filter to your FPS and shooting conditions for professional motion blur.</div> | |
| <div style="font-size:11px;color:var(--muted)" lang-ka>შეუსაბამეთ სწორი ND ფილტრი თქვენს FPS-ს და გადაღების პირობებს პროფესიონალური Motion Blur-ისთვის.</div> | |
| </div> | |
| <div style="overflow-x:auto"> | |
| <table style="width:100%;border-collapse:collapse;font-size:12px;min-width:640px"> | |
| <thead> | |
| <tr style="background:rgba(0,230,118,0.06);border-bottom:1px solid #00e67633"> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-en>ND FILTER</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-en>FPS</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-en>SHUTTER</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-en>WHEN TO USE</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-ka>ND ფილტრი</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-ka>FPS</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-ka>შატერი</th> | |
| <th style="padding:12px 14px;text-align:left;color:#00e676;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-ka>როდის გამოვიყენოთ</th> | |
| </tr> | |
| </thead> | |
| <tbody id="exposure-table-body"></tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- TIP BOX --> | |
| <div style="background:linear-gradient(135deg,rgba(0,180,216,0.08),rgba(0,229,255,0.02));border:1px solid #00b4d844;border-radius:14px;padding:16px 18px;margin-bottom:24px;display:flex;gap:14px;align-items:flex-start"> | |
| <div style="font-size:24px;flex-shrink:0">💡</div> | |
| <div> | |
| <div style="font-size:11px;font-weight:700;color:#00b4d8;letter-spacing:1.5px;margin-bottom:6px;text-transform:uppercase" lang-en>WATERFALL / SILKY WATER TIP</div> | |
| <div style="font-size:11px;font-weight:700;color:#00b4d8;letter-spacing:1.5px;margin-bottom:6px;text-transform:uppercase" lang-ka>რჩევა: ჩანჩქერი და აბრეშუმისებრი წყალი</div> | |
| <div style="font-size:12px;color:var(--text);line-height:1.7" lang-en>To shoot waterfalls with silky-smooth water, use an <b>ND1000 filter</b> with very slow shutter speed (0.5 to 2 seconds) while the drone hovers perfectly still.</div> | |
| <div style="font-size:12px;color:var(--text);line-height:1.7" lang-ka>თუ გსურთ გადაიღოთ ჩანჩქერი ისე, რომ წყალი აბრეშუმივით რბილი ჩანდეს, გამოიყენეთ <b>ND1000 ფილტრი</b> და ძალიან დაბალი ჩამკეტის სიჩქარე (0.5-დან 2 წამამდე), როცა დრონი ჰაერში სტაბილურად დგას.</div> | |
| </div> | |
| </div> | |
| <!-- WHITE BALANCE TABLE --> | |
| <div style="background:var(--card);border:1px solid #ffc40044;border-radius:14px;overflow:hidden;margin-bottom:24px"> | |
| <div style="background:linear-gradient(135deg,rgba(255,196,0,0.1),rgba(255,180,0,0.02));padding:14px 18px;border-bottom:1px solid #ffc40033"> | |
| <div style="font-size:13px;font-weight:700;color:#ffc400;letter-spacing:1.5px;margin-bottom:4px" lang-en>🌈 WHITE BALANCE (KELVIN)</div> | |
| <div style="font-size:13px;font-weight:700;color:#ffc400;letter-spacing:1.5px;margin-bottom:4px" lang-ka>🌈 თეთრი ბალანსი (კელვინი)</div> | |
| <div style="font-size:11px;color:var(--muted)" lang-en>Lock your white balance per weather condition for consistent color across all shots.</div> | |
| <div style="font-size:11px;color:var(--muted)" lang-ka>დაფიქსირეთ თეთრი ბალანსი ამინდის მიხედვით თანმიმდევრული ფერებისთვის ყველა კადრში.</div> | |
| </div> | |
| <div style="overflow-x:auto"> | |
| <table style="width:100%;border-collapse:collapse;font-size:12px;min-width:380px"> | |
| <thead> | |
| <tr style="background:rgba(255,196,0,0.06);border-bottom:1px solid #ffc40033"> | |
| <th style="padding:12px 14px;text-align:left;color:#ffc400;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-en>WEATHER CONDITION</th> | |
| <th style="padding:12px 14px;text-align:left;color:#ffc400;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-en>KELVIN (K)</th> | |
| <th style="padding:12px 14px;text-align:left;color:#ffc400;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-ka>ამინდი</th> | |
| <th style="padding:12px 14px;text-align:left;color:#ffc400;font-weight:700;letter-spacing:1px;font-family:var(--font-mono);font-size:10px" lang-ka>კელვინი (K)</th> | |
| </tr> | |
| </thead> | |
| <tbody id="wb-table-body"></tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- PRACTICAL GUIDE BOX --> | |
| <div style="background:var(--card);border:1px solid #ab47bc44;border-radius:14px;padding:16px 18px;margin-bottom:24px"> | |
| <div style="font-size:13px;font-weight:700;color:#ab47bc;letter-spacing:1.5px;margin-bottom:10px" lang-en>📋 HOW TO USE THIS GUIDE IN PRACTICE</div> | |
| <div style="font-size:13px;font-weight:700;color:#ab47bc;letter-spacing:1.5px;margin-bottom:10px" lang-ka>📋 როგორ გამოვიყენოთ ეს გზამკვლევი პრაქტიკაში</div> | |
| <ol style="margin:0;padding-left:24px;color:var(--text)" lang-en> | |
| <li style="font-size:12px;line-height:1.7;margin-bottom:6px"><b>Choose your FPS:</b> For cinematic nature shots, set 24 or 30 fps.</li> | |
| <li style="font-size:12px;line-height:1.7;margin-bottom:6px"><b>Lock the shutter:</b> Set it to double your FPS (e.g., 30 fps → 1/60s).</li> | |
| <li style="font-size:12px;line-height:1.7;margin-bottom:6px"><b>Check exposure:</b> If the screen is too bright (overexposed), add a stronger ND filter (e.g., switch ND16 → ND32) until exposure meter (MM) reads 0.0.</li> | |
| </ol> | |
| <ol style="margin:0;padding-left:24px;color:var(--text)" lang-ka> | |
| <li style="font-size:12px;line-height:1.7;margin-bottom:6px"><b>აირჩიეთ FPS:</b> ბუნების კინემატოგრაფიული კადრებისთვის დააყენეთ 24 ან 30.</li> | |
| <li style="font-size:12px;line-height:1.7;margin-bottom:6px"><b>ჩაკეტეთ ჩამკეტი (Shutter Speed):</b> დააყენეთ ის FPS-ის ორმაგზე (მაგალითად, 30 fps-ზე აირჩიეთ 1/60).</li> | |
| <li style="font-size:12px;line-height:1.7;margin-bottom:6px"><b>შეამოწმეთ გამოსახულება:</b> თუ ეკრანი ძალიან განათებულია (თეთრდება), დაუმატეთ უფრო ძლიერი ND ფილტრი (მაგ., ND16-დან გადადით ND32-ზე), სანამ ექსპოზიციის მაჩვენებელი (MM) არ გახდება 0.0.</li> | |
| </ol> | |
| </div> | |
| <!-- ND FILTER GRID --> | |
| <div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;margin-bottom:24px" id="nd-filters-grid"></div> | |
| <!-- FPS GUIDE --> | |
| <div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px" id="fps-guide-grid"></div> | |
| </section> | |
| <script> | |
| const ND_FILTERS = [ | |
| { | |
| name:'ND4', stops:'2 stops', icon:'☁️☁️', | |
| en_when:'Overcast / Cloudy / Heavy shade', | |
| ka_when:'მოღრუბლული / ღრუბლიანი / ჩრდილში', | |
| en_use:'Mild overcast or shaded outdoor scenes. Light enough that less filtering is needed but still controls exposure.', | |
| ka_use:'მსუბუქი ღრუბლიანი ან ჩრდილში გადაღება. შუქი საკმარისად ცოტაა და მსუბუქი ფილტრაცია საკმარისია.', | |
| en_set:'Use for shutter 1/60s at ISO 100 in overcast conditions', | |
| ka_set:'შატერი 1/60 წმ, ISO 100 ღრუბლიან ამინდში' | |
| }, | |
| { | |
| name:'ND8', stops:'3 stops', icon:'⛅', | |
| en_when:'Cloudy bright / Late afternoon', | |
| ka_when:'ნათელი ღრუბლიანი / საღამოს', | |
| en_use:'Bright cloudy days or golden hour conditions. Most versatile filter for unpredictable weather.', | |
| ka_use:'ნათელი ღრუბლიანი დღეები ან ოქროს საათი. ყველაზე უნივერსალური ფილტრი.', | |
| en_set:'Default golden hour filter — pair with D-Log M for cinematic grade', | |
| ka_set:'ოქროს საათის ფილტრი — D-Log M-თან ერთად კინემატ. გრეიდისთვის' | |
| }, | |
| { | |
| name:'ND16', stops:'4 stops', icon:'🌤️', | |
| en_when:'Partly sunny / Standard daylight', | |
| ka_when:'ნაწილობრივ მზიანი / დღის შუქი', | |
| en_use:'Most common filter for general daytime shooting. Use when sun is partly out or in standard daylight scenes.', | |
| ka_use:'ყველაზე ხშირად გამოყენებადი ფილტრი. ნაწილობრივ მზიანი ან ჩვეულებრივი დღის სცენები.', | |
| en_set:'The default daytime filter — works for 90% of outdoor shots', | |
| ka_set:'სტანდარტული დღის ფილტრი — გარე გადაღების 90%-სთვის' | |
| }, | |
| { | |
| name:'ND32', stops:'5 stops', icon:'☀️', | |
| en_when:'Sunny / Bright midday', | |
| ka_when:'მზიანი / ნათელი შუადღე', | |
| en_use:'Bright sunny conditions, midday sun, snow scenes. Required to maintain 1/60s shutter on sunny days.', | |
| ka_use:'ნათელი მზიანი, შუადღის მზე, თოვლიანი სცენები. სავალდებულოა მზიან დღეებში.', | |
| en_set:'Essential for snow, beach, and high-altitude shots', | |
| ka_set:'აუცილებელია თოვლის, პლაჟის, მაღალმთიანი გადაღებებისთვის' | |
| }, | |
| { | |
| name:'ND64', stops:'6 stops', icon:'☀️☀️', | |
| en_when:'Very bright / Reflective surfaces', | |
| ka_when:'ძალიან ნათელი / ამრეკლი ზედაპირები', | |
| en_use:'Very bright conditions over water, snow, or white sand. Use for high frame rate (60fps+) in bright light.', | |
| ka_use:'ძალიან ნათელი წყალზე, თოვლზე, თეთრ ქვიშაზე. გამოიყენეთ მაღალი fps-სთვის ნათელ შუქზე.', | |
| en_set:'Use for 60fps slow-mo + 1/120s shutter in sun', | |
| ka_set:'60fps სლო-მო + 1/120 წმ მზეზე' | |
| }, | |
| { | |
| name:'ND128', stops:'7 stops', icon:'☀️☀️☀️', | |
| en_when:'Direct sun / Ground skim / Motion blur', | |
| ka_when:'პირდაპირი მზე / ზედ. სრიალი / ბუნდი', | |
| en_use:'Direct overhead sun, motion blur effects, ground skim shots over water. Creates buttery smooth motion.', | |
| ka_use:'პირდაპირი მზე ზემოდან, მოძრაობის ბუნდი, ზედაპირის სრიალი წყალზე. გლუვი მოძრაობა.', | |
| en_set:'Use for cinematic motion blur on bright days', | |
| ka_set:'კინემატოგრაფიული ბუნდი ნათელ დღეებში' | |
| }, | |
| ]; | |
| const FPS_GUIDE = [ | |
| { | |
| name:'24 fps', icon:'🎬', | |
| en_title:'Cinema Standard', | |
| ka_title:'კინო სტანდარტი', | |
| en_use:'The classic film look. Use for narrative storytelling, dramatic scenes, cinematic landscapes.', | |
| ka_use:'კლასიკური კინო-სიხშირე. ისტორიის თხრობა, დრამატ. სცენები, კინ. პეიზაჟები.', | |
| en_shutter:'Shutter: 1/50s', | |
| ka_shutter:'შატერი: 1/50 წმ', | |
| en_filter:'ND8 — ND32 depending on light', | |
| ka_filter:'ND8 — ND32 შუქის მიხედვით' | |
| }, | |
| { | |
| name:'30 fps', icon:'📺', | |
| en_title:'Web/Social Standard', | |
| ka_title:'ვებ/სოც. სტანდარტი', | |
| en_use:'Smoother than 24fps but still cinematic. Best for YouTube, Instagram, TikTok content.', | |
| ka_use:'უფრო გლუვი ვიდრე 24fps. YouTube, Instagram, TikTok-ისთვის საუკეთესო.', | |
| en_shutter:'Shutter: 1/60s', | |
| ka_shutter:'შატერი: 1/60 წმ', | |
| en_filter:'ND16 — most versatile', | |
| ka_filter:'ND16 — ყველაზე უნივერსალური' | |
| }, | |
| { | |
| name:'60 fps', icon:'⚡', | |
| en_title:'Slow Motion (2.5×)', | |
| ka_title:'სლო-მო (2.5×)', | |
| en_use:'Shoot at 60fps then play at 24fps in edit for 2.5× slow motion. Great for action, sports, wildlife.', | |
| ka_use:'გადაიღეთ 60fps-ზე, ითამაშეთ 24fps-ზე = 2.5× სლო-მო. სპორტი, მოქმედება, ბუნება.', | |
| en_shutter:'Shutter: 1/120s', | |
| ka_shutter:'შატერი: 1/120 წმ', | |
| en_filter:'ND32 — ND64 needed', | |
| ka_filter:'ND32 — ND64 საჭიროა' | |
| }, | |
| { | |
| name:'120 fps', icon:'💨', | |
| en_title:'Ultra Slow Motion (5×)', | |
| ka_title:'ულტრა სლო-მო (5×)', | |
| en_use:'Mini 4 Pro supports 1080p/100fps. Play at 24fps for extreme slow motion. Water drops, explosions, fast motion.', | |
| ka_use:'Mini 4 Pro აქვს 1080p/100fps. 24fps-ზე ექსტრემალური სლო-მო. წყლის წვეთები, აფეთქებები.', | |
| en_shutter:'Shutter: 1/240s', | |
| ka_shutter:'შატერი: 1/240 წმ', | |
| en_filter:'ND64 — ND128 required', | |
| ka_filter:'ND64 — ND128 აუცილებელია' | |
| }, | |
| ]; | |
| function renderNDFilters(){ | |
| const L = currentLang; | |
| const grid = document.getElementById('nd-filters-grid'); | |
| if(!grid) return; | |
| let h = ''; | |
| for(const f of ND_FILTERS){ | |
| const when = L==='ka' ? f.ka_when : f.en_when; | |
| const use = L==='ka' ? f.ka_use : f.en_use; | |
| const set = L==='ka' ? f.ka_set : f.en_set; | |
| h += `<div style="background:var(--card);border:1px solid #00e67633;border-radius:14px;padding:16px 18px;transition:transform .2s,box-shadow .2s" onmouseenter="this.style.transform='translateY(-3px)';this.style.boxShadow='0 10px 30px rgba(0,230,118,0.15)'" onmouseleave="this.style.transform='';this.style.boxShadow=''"> | |
| <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px"> | |
| <span style="font-size:20px">${f.icon}</span> | |
| <div style="font-size:18px;font-weight:700;color:#00e676;font-family:var(--font-mono)">${f.name}</div> | |
| <div style="font-size:9px;background:#00e67618;color:#00e676;border:1px solid #00e67644;border-radius:6px;padding:3px 8px;font-family:var(--font-mono);margin-left:auto">${f.stops}</div> | |
| </div> | |
| <div style="font-size:11px;font-weight:700;color:#00e676;letter-spacing:1px;margin-bottom:8px;text-transform:uppercase">${when}</div> | |
| <div style="font-size:11.5px;color:var(--text);line-height:1.65;margin-bottom:10px">${use}</div> | |
| <div style="background:rgba(0,230,118,0.06);border-left:2px solid #00e676;border-radius:0 8px 8px 0;padding:8px 12px;font-size:10.5px;color:var(--muted);line-height:1.55">💡 ${set}</div> | |
| </div>`; | |
| } | |
| grid.innerHTML = h; | |
| } | |
| // ── CINEMATIC EXPOSURE TABLE DATA ── | |
| const EXPOSURE_TABLE = [ | |
| { | |
| nd:'ND8', fps:'24 / 30', shutter:'1/50 — 1/60', | |
| en:'Golden Hour: sunrise, sunset, or very cloudy/overcast weather. Can also work in fog, sometimes no filter needed in fog.', | |
| ka:'"ოქროს საათი": მზის ამოსვლა, მზის ჩასვლა ან ძალიან ღრუბლიანი, პირქუში ამინდი. შეიძლება ნისლშიც, ხანდახან არც ჭირდება ფილტრი ნისლის დროს.' | |
| }, | |
| { | |
| nd:'ND16', fps:'24 / 30', shutter:'1/50 — 1/60', | |
| en:'Slight clouds with sun not shining directly, slightly hazy weather, or when sun is low.', | |
| ka:'ცაზე ცოტა ღრუბელია და მზე პირდაპირ არ ანათებს, ოდნავ ბურუსიანი ამინდი, ან როცა მზე დაბლაა.' | |
| }, | |
| { | |
| nd:'ND32', fps:'24 / 30', shutter:'1/50 — 1/60', | |
| en:'Bright sun: standard sunny day with clear skies. The most commonly used filter.', | |
| ka:'კაშკაშა მზე: სტანდარტული მზიანი დღე მოწმენდილი ცის პირობებში. ყველაზე ხშირად გამოყენებადი ფილტრი.' | |
| }, | |
| { | |
| nd:'ND64', fps:'24 / 30', shutter:'1/50 — 1/60', | |
| en:'Midday peak when sun is intense, desert or snowy landscapes with strong reflections.', | |
| ka:'შუადღის პიკი, როცა მზე ძალიან აჭერს, უდაბნო ან თოვლიანი ლანდშაფტი ძლიერი არეკვლით.' | |
| }, | |
| { | |
| nd:'ND16', fps:'60', shutter:'1/120', | |
| en:'Action / Slow Motion: moderate light, when you plan to slow down the video (Slow-mo).', | |
| ka:'ექშენი / ნელი მოძრაობა: საშუალო განათებისას, როცა აპირებთ ვიდეოს შენელებას (Slow-mo).' | |
| }, | |
| { | |
| nd:'ND32', fps:'60', shutter:'1/120', | |
| en:'Action / Slow Motion: bright sun for sports or fast action shots.', | |
| ka:'ექშენი / ნელი მოძრაობა: კაშკაშა მზეზე სპორტული ან სწრაფი კადრების გადასაღებად.' | |
| }, | |
| ]; | |
| const WB_TABLE = [ | |
| { en:'Sunny day', ka:'მზიანი დღე', k:'5200K – 5600K' }, | |
| { en:'Partly cloudy', ka:'ნაწილობრივ მოღრუბლული', k:'5800K – 6000K' }, | |
| { en:'Overcast / Foggy', ka:'მოღრუბლული / ნისლიანი', k:'6500K+' }, | |
| { en:'Shade / Sunset', ka:'ჩრდილი / მზის ჩასვლა', k:'7000K – 7500K' }, | |
| ]; | |
| function renderExposureTable(){ | |
| const L = currentLang; | |
| const body = document.getElementById('exposure-table-body'); | |
| if(!body) return; | |
| let h = ''; | |
| for(const row of EXPOSURE_TABLE){ | |
| h += `<tr style="border-bottom:1px solid var(--border)"> | |
| <td style="padding:12px 14px;color:#00e676;font-family:var(--font-mono);font-weight:700;font-size:11px" lang-en>${row.nd}</td> | |
| <td style="padding:12px 14px;color:var(--text);font-family:var(--font-mono);font-size:11px" lang-en>${row.fps}</td> | |
| <td style="padding:12px 14px;color:var(--text);font-family:var(--font-mono);font-size:11px" lang-en>${row.shutter}</td> | |
| <td style="padding:12px 14px;color:var(--muted);font-size:11.5px;line-height:1.55;max-width:340px" lang-en>${row.en}</td> | |
| <td style="padding:12px 14px;color:#00e676;font-family:var(--font-mono);font-weight:700;font-size:11px" lang-ka>${row.nd}</td> | |
| <td style="padding:12px 14px;color:var(--text);font-family:var(--font-mono);font-size:11px" lang-ka>${row.fps}</td> | |
| <td style="padding:12px 14px;color:var(--text);font-family:var(--font-mono);font-size:11px" lang-ka>${row.shutter}</td> | |
| <td style="padding:12px 14px;color:var(--muted);font-size:11.5px;line-height:1.55;max-width:340px" lang-ka>${row.ka}</td> | |
| </tr>`; | |
| } | |
| body.innerHTML = h; | |
| } | |
| function renderWBTable(){ | |
| const body = document.getElementById('wb-table-body'); | |
| if(!body) return; | |
| let h = ''; | |
| for(const row of WB_TABLE){ | |
| h += `<tr style="border-bottom:1px solid var(--border)"> | |
| <td style="padding:12px 14px;color:var(--text);font-size:11.5px" lang-en>${row.en}</td> | |
| <td style="padding:12px 14px;color:#ffc400;font-family:var(--font-mono);font-weight:700;font-size:11px" lang-en>${row.k}</td> | |
| <td style="padding:12px 14px;color:var(--text);font-size:11.5px" lang-ka>${row.ka}</td> | |
| <td style="padding:12px 14px;color:#ffc400;font-family:var(--font-mono);font-weight:700;font-size:11px" lang-ka>${row.k}</td> | |
| </tr>`; | |
| } | |
| body.innerHTML = h; | |
| } | |
| function renderFPSGuide(){ | |
| const L = currentLang; | |
| const grid = document.getElementById('fps-guide-grid'); | |
| if(!grid) return; | |
| let h = ''; | |
| for(const f of FPS_GUIDE){ | |
| const title = L==='ka' ? f.ka_title : f.en_title; | |
| const use = L==='ka' ? f.ka_use : f.en_use; | |
| const shutter = L==='ka' ? f.ka_shutter : f.en_shutter; | |
| const filter = L==='ka' ? f.ka_filter : f.en_filter; | |
| h += `<div style="background:var(--card);border:1px solid #ff6d0033;border-radius:14px;padding:16px 18px;transition:transform .2s,box-shadow .2s" onmouseenter="this.style.transform='translateY(-3px)';this.style.boxShadow='0 10px 30px rgba(255,109,0,0.15)'" onmouseleave="this.style.transform='';this.style.boxShadow=''"> | |
| <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px"> | |
| <span style="font-size:20px">${f.icon}</span> | |
| <div style="font-size:18px;font-weight:700;color:#ff6d00;font-family:var(--font-mono)">${f.name}</div> | |
| </div> | |
| <div style="font-size:11px;font-weight:700;color:#ff6d00;letter-spacing:1px;margin-bottom:8px;text-transform:uppercase">${title}</div> | |
| <div style="font-size:11.5px;color:var(--text);line-height:1.65;margin-bottom:12px">${use}</div> | |
| <div style="display:flex;gap:8px;flex-wrap:wrap"> | |
| <div style="background:rgba(255,109,0,0.08);border:1px solid #ff6d0033;border-radius:8px;padding:6px 11px;font-size:10.5px;color:#ff6d00;font-family:var(--font-mono)">⏱ ${shutter}</div> | |
| <div style="background:rgba(255,109,0,0.08);border:1px solid #ff6d0033;border-radius:8px;padding:6px 11px;font-size:10.5px;color:#ff6d00;font-family:var(--font-mono)">📷 ${filter}</div> | |
| </div> | |
| </div>`; | |
| } | |
| grid.innerHTML = h; | |
| } | |
| // Initial render of ND/FPS sections (defined in this script) | |
| renderNDFilters(); | |
| renderFPSGuide(); | |
| renderExposureTable(); | |
| renderWBTable(); | |
| </script> | |
| <!-- COMBO DETAIL MODAL --> | |
| <div class="modal-bg" id="modal-bg" onclick="if(event.target===this)closeModal()"> | |
| <div class="modal-card" id="modal-body"></div> | |
| </div> | |
| </body> | |
| </html> |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://raw.githack.com/
ამ საიტზე ჩავაკოპირებთ ლინკს და მოგვცემს ისეთ ლინკს რომლითაც ტელეფონის ბრაუზერში გავხსნით