İçeriğe atla
← Hazır setler ve kurulum rehberleri

Kurulum rehberi · son kontrol 17 Ekim 2026

Sayfa aşağı kaydırılınca hareket eden ürün sitesi kuran sistem

İki yoldan birini seçersin: kısa videodan çıkardığın kareleri kaydırmayla sırayla gösterirsin ya da lisansı sende olan gerçek bir 3B modeli sayfada döndürürsün. İkisinde de dar ekranda ve hareketi azaltma tercihinde kaydırma bağı kurulmaz; ürün sabit görünür.

Resmî belgelerden düzenlendi. Her adımın dayanağı altında yazılı.

Ne elde edersin

Kaydırdıkça kare ya da model ilerleyen, telefonda ekranı taşırmayan ve hareketi azaltma tercihinde de içeriği okunabilen bir ürün bölümü.

Nasıl çalışır

Sen başlatırsın. Her adımı sen başlatırsın; kendiliğinden çalışan, zamanlanmış ya da dışarıya mesaj gönderen bir parça yoktur.

Nerede çalışır

Windows · macOS · Linux

Maliyet neye bağlı

Abonelik · Ücret yok · Kurulum hizmeti · Barındırma

Kime uygun

  • Ürününü sayfada kaydırmayla tanıtmak isteyen markalar ve girişimciler
  • Elinde ürün videosu ya da kullanım hakkı olan bir 3B modeli olup bunu siteye taşıyamayanlar

Kime uygun değil

  • Hazır bir videosu ya da modeli olmayıp bunları sıfırdan ürettirmek isteyenler: üretim bu rehberin ana yolu değildir
  • Kare dizisiyle sayfada gerçek 3B model döndürmeyi bekleyenler: kare dizisi 3B model oluşturmaz
  • Sürükle-bırak animasyon aracı yapıp başkalarına sunacak olanlar: GSAP lisansında bu kullanım için ayrı bir kısıt vardır
  • Siteyi yayına alma ve barındırma adımlarını bu rehberden bekleyenler

Sistem nasıl bağlanıyor

Seçtiğin yola göre: (A) video → kareler → canvas + ScrollTrigger, ya da (B) lisanslı GLB model → three + React Three Fiber → isteğe bağlı ScrollTrigger. Her iki yolda yedek görünüm ve telefon kontrolü yapılır.

  • Claude Code gerekli

    Sayfa ve bileşen kodunu yazar, hataları düzeltir

    Araç rehberi

  • GSAP ve ScrollTrigger gerekli

    Kaydırma ilerlemesini kareye ya da sahneye bağlar

    Tasarım kaynaklarında

  • ezgif video-to-JPG isteğe bağlı

    Kısa videodan kare dosyaları çıkarır (tarayıcıda)

    Alternatif: Yalnız kare dizisi yolunda ve videoyu üçüncü taraf bir siteye yüklemekte sakınca yoksa; özel ürün videosu için yerel FFmpeg yolunu seç

    Resmî sitesi

  • FFmpeg isteğe bağlı

    Aynı kare çıkarma işini kendi bilgisayarında yapar

    Alternatif: Video özelse ya da ezgif'in dosya sınırını aşıyorsa

    Resmî sitesi

  • three ve React Three Fiber isteğe bağlı

    Gerçek 3B modeli sayfada çizer

    Alternatif: Yalnız gerçek 3B yolunda gerekir

    Tasarım kaynaklarında

  • Google Flow isteğe bağlı

    İsteğe bağlı: başlangıç ve bitiş karesinden kısa video üretir

    Alternatif: Elinde kullanım hakkı olan bir ürün videosu yoksa

    Araç rehberi

  • Lenis isteğe bağlı

    İsteğe bağlı: kaydırmayı yumuşatır

    Alternatif: Yalnız tasarım gerçekten yumuşak kaydırma gerektiriyorsa

    Tasarım kaynaklarında

  • Playwright CLI isteğe bağlı

    Telefon genişliğinde ekran görüntüsü alır

    Alternatif: Telefon genişliğini tarayıcının geliştirici araçlarından da denetleyebilirsin

    Araç rehberi

Araçlar arası bağlantılar

  • Ürün videosu Kare dosyaları · Elle aktarım · ezgif'ten ZIP indirirsin ya da FFmpeg ile klasöre yazdırırsın
  • Kare dosyaları Site projesi · Dosya ile · Dosyalar projenin public klasörüne konur ve kökten adreslenir
  • GSAP ScrollTrigger Canvas çizimi · Dosya ile · ScrollTrigger kaydırmayı ilerleme değerine çevirir, kod bu değere göre kareyi çizer
  • GLB model dosyası React Three Fiber · Dosya ile · useGLTF ile dosya yolu okunur
  • GSAP ScrollTrigger 3B sahne · Dosya ile · ScrollTrigger'ın ilerleme değeri bir değişkene yazılır, sahne bu değeri her karede okur

Başlamadan önce

Bilgisayar ve yazılım

  • İşletim sistemi: Windows, macOS, Linux
  • Node.js: 20.19 ve üzeri ya da 22.12 ve üzeri
  • Claude Code: güncel sürüm (kurulumu kendi belgesinden yapılır)
  • FFmpeg (yalnız yerel kare çıkarma için): güncel sürüm; derlenmiş paketler ffmpeg.org indirme sayfasından bulunur

Hesaplar

  • Claude hesabı — Claude Code ile oturum açmak için. Belgeye göre Claude Pro, Max, Team ya da Enterprise aboneliği, Claude Console hesabı ya da desteklenen bir bulut sağlayıcı üzerinden erişim
  • Google Flow hesabı (isteğe bağlı) — Videon yoksa başlangıç ve bitiş karesinden kısa video üretmek istersen. Yardım sayfası Frames özelliği için bir plan şartı yazmıyor; özelliğin kullanılabilirliği ülkeye ve bölgeye göre değişebilir. Kredi koşulları Flow'un kendi kredi sayfasındadır.

Adım adım kurulum

Hangisini yapmak istiyorsun?

İşaretlediğin adımlar yalnız bu tarayıcıda kalır; kurulumun çalıştığını doğrulamaz. 0/7 adımı bitirdin.

  1. 1. adım · Terminalde

    Çalışacağın projeyi hazırla

    Ne için: Kare ya da model dosyalarının konacağı çalışan bir site projen olsun.

    1. Zaten bir React projen varsa terminali o klasörde aç ve bu adımın komutunu atla. Projenin package.json dosyasında react satırındaki sürüme bak; 3B yolunda paket sürümleri buna göre seçilir. Yükseltme yapma.
    2. Yeni başlıyorsan Node.js sürümünü kontrol et, sonra aşağıdaki komutla React şablonunu oluştur. Komut, create-vite kaynak kodundaki --no-immediate seçeneğiyle kurulum ve başlatmayı atlar; bunları sonraki maddede kendin yaparsın. Yine de kurup başlatmayı soran bir soru çıkarsa Hayır de.
    3. Proje klasörüne gir, paketleri kur (npm install) ve npm run dev ile geliştirme sunucusunu başlat. Sunucunun yazdığı adres tarayıcıda açılmalı.
    Windows · macOS · LinuxKlasör: Herhangi bir klasör
    › node --version
    Windows · macOS · LinuxKlasör: Projeyi koymak istediğin üst klasör
    › npm create vite@9.2.1 urun-sitesi -- --template react --no-immediate

    Sürüm sabit (10 Eylül 2026 itibarıyla). Yeni sürüme geçmeden önce üreticinin belgesine bak.

    Doğru yaptığını şuradan anlarsın

    • Geliştirme sunucusu bir yerel adres yazar ve şablon sayfası tarayıcıda açılır.
    Takılırsan: bu adıma özgü sorunlar
    • Komut Node.js sürümünden şikâyet ediyor
      Vite, Node.js 20.19 ve üzeri ya da 22.12 ve üzeri ister; sürümünü yükselt.
    • Şablon beklediğimden yeni bir React sürümüyle geldi
      Kare dizisi yolunda sorun olmaz. 3B yolunda 7. adımdaki sürüm eşleşmesini oku ve paketleri projenin React sürümüne göre seç.
  2. 2. adım · Tarayıcıda

    Kısa ürün videonu hazırla

    Ne için: Kareleri çıkaracağın, kullanım hakkı sende olan kısa ve tek hareketli bir video olsun.

    Burada sen kontrol edersin; sistem bu adımı senin onayın olmadan ilerletmemeli.

    1. Kendi çektiğin ya da kullanım hakkı olan kısa bir ürün videonu seç. Kamera sabit, ürün tek bir akıcı hareket yapıyorsa kareler arası geçiş düzgün olur (bu DijiKoçum'un önerisidir). Hazır videon varsa bu adımı atla; abonelik gerekmez.
    2. Videon yoksa Google Flow'da projenin istem kutusunda model adına tıkla, sonra Video'yu ve Frames'i seç. Başlangıç ve bitiş karesi için görsellerini sürükle, aradaki hareketi istemde yaz, video tercihlerini seç ve Generate'e tıkla.
    3. Yardım sayfasına göre özelliğin kullanılabilirliği ülkeye ve bölgeye göre değişebilir, bazı görsel türleri desteklenmeyebilir. Kredi ayrıntıları için Flow'un kredi sayfasına bak; üretimin ücretli olabileceğini hesaba kat.
    4. Üretilen videoyu kullanmadan önce Flow'un kullanım koşullarında ticari kullanıma izin verilip verilmediğini oku.

    Doğru yaptığını şuradan anlarsın

    • Bilgisayarında, hakkını taşıdığın kısa bir video dosyası olur.
    Takılırsan: bu adıma özgü sorunlar
    • Flow'da Frames seçeneği görünmüyor
      Yardım sayfası arayüz adlarının sürümle değişebildiğini, özelliğin ülkeye göre farklılaşabildiğini söyler; arayüzde video ve başlangıç/bitiş karesi seçeneğini ara ya da hazır videoyla devam et.
  3. 3. adım · Tarayıcıda

    Videodan kareleri ezgif ile çıkar

    Ne için: Videoyu sıralı JPG karelere çevirip ZIP olarak indir.

    Burada sen kontrol edersin; sistem bu adımı senin onayın olmadan ilerletmemeli.

    1. ezgif video-to-JPG sayfasını aç. Sayfa videolar için en çok 200 MB dosya boyutu, 1 ile 30 arası kare hızı ve çıktıda 1920 piksele kadar çözünürlük belirtir.
    2. Videoyu yükle, istersen yalnız kullanacağın zaman aralığını kırp, kare hızını ve boyutu seç. Başlangıç önerimiz (kaynağı yok, kendin ölç): genişliği 1280 piksel ya da altında tut ve birkaç düzine ile yüz civarı kare üret. Kare sayısı ve boyutu arttıkça sayfa ağırlaşır; tarayıcı kareleri çözünce JPG dosya boyutundan çok daha fazla bellek tutar.
    3. Kareleri ZIP olarak indir ve proje klasöründe public/kareler klasörüne aç. ZIP içindeki dosya adlarına bak: ezgif sayfası adlandırma biçimini belgelemiyor, kod ise kare-0001.jpg biçimini bekliyor. Adlar farklıysa gerçek deseni ajana ver ve kodu o desene uydurt, ya da dosyaları kare-0001.jpg biçiminde yeniden adlandırt.
    4. Toplam klasör boyutuna (MB) bak; çok büyükse daha düşük kare hızı ya da boyutla yeniden çıkar. Telefonda kare dizisi yüklenmeyecek (5. adımdaki kod böyle çalışır), ama bilgisayardaki ziyaretçi için de boyut önemlidir.
    5. Dikkat: video üçüncü taraf bir siteye yüklenir. Sayfa yüklenen dosyaların otomatik silindiğini söylüyor; yine de özel ya da yayımlanmamış bir ürün videosu için sonraki adımdaki yerel yolu seç.

    Doğru yaptığını şuradan anlarsın

    • public/kareler klasöründe sıralı numaralı JPG dosyaları görünür.
    Takılırsan: bu adıma özgü sorunlar
    • Video 200 MB sınırını aşıyor
      Videoyu kısalt ya da 4. adımdaki yerel FFmpeg yolunu kullan; sınır ezgif'e özgüdür.
    • Kareler çok büyük, sayfa ağır
      Daha düşük kare hızı ve daha küçük boyut seçip yeniden çıkar; ezgif 1-30 kare hızı ve boyut seçeneği sunar.
    • Canvas boş kalıyor, ZIP içindeki dosya adları kare-0001.jpg biçiminde değil
      ezgif dosya adı biçimini belgelemiyor. Dosyaları yeniden adlandırt ya da ajana gerçek ad desenini verip kodu ona uydurt.
  4. 4. adım · Terminalde

    Ya da kareleri kendi bilgisayarında FFmpeg ile çıkar

    Ne için: Videoyu hiçbir siteye yüklemeden sıralı JPG karelere çevir.

    Burada sen kontrol edersin; sistem bu adımı senin onayın olmadan ilerletmemeli.

    1. FFmpeg kurulu değilse ffmpeg.org indirme sayfasına git; sayfa FFmpeg'in yalnız kaynak kod sağladığını, derlenmiş paketler için bağlantılar verdiğini söyler. Kendi işletim sistemin için olanı kur.
    2. Terminali videonun bulunduğu klasörde aç, kareler klasörünü oluştur ve aşağıdaki FFmpeg komutunu çalıştır. Videonun adı urun.mp4 değilse onu değiştir. fps=24 saniyedeki kare sayısını, scale=1280:-2 genişliği 1280 piksel yapıp yüksekliği oranı koruyarak ayarlamayı, -q:v ise JPG kalitesini belirler.
    3. Bu üç değer DijiKoçum'un başlangıç önerisidir, kaynaklarda öneri olarak geçmez. -q değeri kodeke bağlıdır (FFmpeg belgesi); kaliteyi ve klasör boyutunu kendin ölçüp değerleri ayarla. Kareleri azaltmak için fps değerini düşür ya da videoyu kısalt.
    4. Çıkan klasörü projenin public klasörünün içine taşı (public/kareler) ve toplam boyuta (MB) bak.
    Windows · macOS · LinuxKlasör: Videonun bulunduğu klasör
    › mkdir kareler
    Windows · macOS · LinuxKlasör: Videonun bulunduğu klasör
    › ffmpeg -i urun.mp4 -vf fps=24,scale=1280:-2 -q:v 4 kareler/kare-%04d.jpg

    Doğru yaptığını şuradan anlarsın

    • kareler klasöründe kare-0001.jpg, kare-0002.jpg gibi sıralı dosyalar oluşur.
    Takılırsan: bu adıma özgü sorunlar
    • ffmpeg komutu bulunamadı
      FFmpeg kurulu değil ya da PATH'te değil; indirme sayfasındaki paketlerden birini kur ve terminali yeniden aç.
    • Çıktı dosyaları oluşmadı, klasör hatası var
      Kareler klasörü yoksa FFmpeg dosyaları yazamaz ve hata verir; önce mkdir kareler komutunu çalıştır. Bu davranışı gösterilen belge anlatmıyor, bilinen çalışma biçimidir.
  5. 5. adım · Kod ajanında

    Kareleri canvas'a çiz ve kaydırmaya bağla

    Ne için: Kaydırdıkça kare numarası ilerlesin ve ilgili kare canvas'a çizilsin.

    1. GSAP'ı kur. Lisans: standart lisans ticari projelerde ücretsiz kullanıma izin verir; lisans metni, kodsuz görsel animasyon oluşturma araçlarında Webflow ile rekabet eden kullanımı yasaklar.
    2. Claude Code'a şunu yaz: kareleri sayıp React bileşeni olarak bir canvas bölümü ekle; GSAP ScrollTrigger ile kaydırmaya göre kareleri çiz; canvas %100 genişlikte ama en çok 100vh yükseklikte olsun, iç çözünürlüğü karenin boyutundan alsın, boyut değişince ScrollTrigger.refresh() çağırsın; ilk kare hep gösterilsin; kalan kareler yalnız geniş ekranda ve hareketi azaltma kapalıyken insin; yüklenemeyen kare hata vermesin.
    3. Aşağıdaki bileşen bu isteğin iskeletidir; GSAP'ın resmî görüntü dizisi yardımcısının mantığından uyarlandı. Resmî yardımcı ekran boyutu ve yük yönetimini ele almaz, bunlar bu rehberde eklendi. Kare sayısını kendi dosya sayınla değiştir, ajanın kodunla karşılaştır.
    4. Bileşeni App.jsx içinde göster. Kod, canvas elemanı sayfaya konduktan sonra çalışsın diye useEffect içindedir; sayfa kapanırken mm.revert() ile temizlenir.
    5. Hatırlatma: bu teknik 3B model oluşturmaz. Ziyaretçi, aynı videonun karelerinin kaydırmayla sırayla gösterildiğini görür.
    Windows · macOS · LinuxKlasör: urun-sitesi (ya da kendi proje klasörün)
    › npm install gsap@3.15.0

    Sürüm sabit (13 Nisan 2026 itibarıyla). Yeni sürüme geçmeden önce üreticinin belgesine bak.

    KareSahnesi.jsx · jsx
    import { useEffect, useRef } from "react";
    import gsap from "gsap";
    import { ScrollTrigger } from "gsap/ScrollTrigger";
    
    gsap.registerPlugin(ScrollTrigger);
    
    const KARE_SAYISI = 120; // public/kareler içindeki dosya sayınla değiştir
    const kareYolu = (i) => `/kareler/kare-${String(i + 1).padStart(4, "0")}.jpg`;
    
    function kareYukle(yol) {
      return new Promise((coz) => {
        const img = new Image();
        img.onload = () => coz(img);
        img.onerror = () => coz(null); // eksik ya da kırık dosyada çizimi atla
        img.src = yol;
      });
    }
    
    export default function KareSahnesi() {
      const bolum = useRef(null);
      const tuval = useRef(null);
    
      useEffect(() => {
        const ctx = tuval.current.getContext("2d");
        let iptal = false;
        let kareler = [];
        const durum = { kare: 0 };
    
        const ciz = () => {
          const img = kareler[Math.round(durum.kare)];
          if (img && img.naturalWidth > 0) {
            ctx.drawImage(img, 0, 0, tuval.current.width, tuval.current.height);
          }
        };
    
        // İlk kare her koşulda gösterilir: yedek görünüm budur.
        kareYukle(kareYolu(0)).then((ilk) => {
          if (iptal || !ilk) return;
          tuval.current.width = ilk.naturalWidth; // iç çözünürlük karenin kendi boyutundan
          tuval.current.height = ilk.naturalHeight;
          kareler[0] = ilk;
          ciz();
          ScrollTrigger.refresh(); // canvas boyutu değişti: pin alanını yeniden hesapla
        });
    
        const mm = gsap.matchMedia();
        mm.add("(min-width: 800px) and (prefers-reduced-motion: no-preference)", () => {
          // Kalan kareler yalnız bu koşulda indirilir.
          const kalan = Array.from({ length: KARE_SAYISI - 1 }, (_, i) => kareYukle(kareYolu(i + 1)));
          Promise.all(kalan).then((geri) => {
            if (iptal) return;
            kareler = [kareler[0], ...geri];
            ciz();
          });
          gsap.to(durum, {
            kare: KARE_SAYISI - 1,
            ease: "none",
            onUpdate: ciz,
            scrollTrigger: {
              trigger: bolum.current,
              start: "top top",
              end: "+=3000",
              scrub: true,
              pin: true,
            },
          });
        });
    
        return () => {
          iptal = true;
          mm.revert();
        };
      }, []);
    
      return (
        <section ref={bolum}>
          <canvas ref={tuval} style={{ display: "block", width: "100%", height: "auto", maxHeight: "100vh", objectFit: "contain" }} />
        </section>
      );
    }

    Resmî yardımcının mantığından (görüntü dizisini canvas'a çizme ve ScrollTrigger ile scrub), gsap.matchMedia koşul biçiminden ve useEffect temizliğinden uyarlanmış bir iskelettir. Yüksek çözünürlüklü ekranda keskinlik için karelerin genişliği ekranda gösterilen genişlikten az olmamalıdır. Yükleme bitmeden kaydıran ziyaretçi son çizilen kareyi görür. Canvas ilk karenin boyutunu alınca ScrollTrigger.refresh() çağrılır; çünkü GSAP belgesine göre başlangıç ve bitiş konumları ScrollTrigger oluşturulurken ve pencere yeniden boyutlanırken hesaplanır, canvas büyüyünce kendiliğinden yenilenmez. maxHeight ve objectFit, geniş ekranda sabitlenen bölümün ekran yüksekliğini aşıp ürünün alt kısmının kesilmesini önler (DijiKoçum eklemesi, kaynakta yoktur).

    Doğru yaptığını şuradan anlarsın

    • Sayfayı kaydırınca canvas'taki görüntü videonun karelerinde ilerler.
    • Ekran 800 pikselden darsa ya da hareketi azaltma açıksa yalnız ilk kare indirilir ve gösterilir; canvas ekran genişliğini aşmaz; geniş ekranda canvas ekran yüksekliğine sığar, alt kısmı kesilmez.
    Takılırsan: bu adıma özgü sorunlar
    • Canvas boş kalıyor
      Tarayıcıda /kareler/kare-0001.jpg adresini aç. Açılmıyorsa dosya adı biçimi ya da klasör yolu koda uymuyordur (Vite, public içindeki dosyaları kökten sunar). Kod yüklenemeyen kareyi sessizce atlar; konsolu ve Ağ sekmesini ajana göster.
    • Görüntü yarım kare ya da titrek ilerliyor
      scrub değeri ve sayfa uzunluğunu (end) ayarlat; kare sayısı çok azsa kare hızını yükseltip yeniden çıkar. Kareler tam inmeden kaydırırsan son çizilen kare görünür kalır.
    • Sayfa çok yavaş açılıyor ya da telefonda sekme çöküyor
      Kare sayısını ve boyutunu düşür; toplam klasör boyutunu ölç. Bu kod telefonda yalnız ilk kareyi indirir, sorun bilgisayarda görülüyorsa kareler fazla büyüktür.
    • Bölümün altındaki içerik canvas'ın üstüne biniyor ya da kaydırma bitişi yanlış yerde
      Canvas boyutu değişince ScrollTrigger sabitlenen alanı yeniden hesaplamalıdır. Kodda kare boyutu atandıktan sonra ScrollTrigger.refresh() çağrıldığını ajana kontrol ettir.
    • Geniş ekranda ürünün alt kısmı kesiliyor
      Canvas ekrandan uzun olabilir. Stilde maxHeight: "100vh" ve objectFit: "contain" olduğunu kontrol ettir.
  6. 6. adım · Terminalde

    Yedek görünümü ve telefon genişliğini kontrol et

    Ne için: İçerik hareket kapalıyken ve telefonda da kullanılabilir olsun; sayfa ekranı taşırmasın.

    Burada sen kontrol edersin; sistem bu adımı senin onayın olmadan ilerletmemeli.

    1. Hareketi azaltma: MDN'ye göre prefers-reduced-motion, kullanıcının cihazında hareketi azaltma ayarını açtığını bildirir. İşletim sisteminin bu ayarını aç, sayfayı yenile ve içeriğin okunabildiğini, ürünün (ilk kare ya da duran model) görünür olduğunu kontrol et.
    2. Telefon genişliği: geliştirme sunucusu çalışırken Playwright CLI'ı kur, sayfayı aç, pencereyi 390 piksel genişliğe getirip ekran görüntüsü al. Ekran görüntüsü yalnız görünen alanı gösterir ve yatay taşmayı güvenilir ölçmez; bu yüzden aşağıdaki eval komutuyla sayfa genişliğinden ekran genişliğini çıkar. Sonuç 0 ya da negatifse taşma yoktur.
    3. Kaydırma: sayfayı elle yukarıdan aşağı kaydır; kare ya da model ilerliyor mu, kaydırma bölümden sonra sorunsuz devam ediyor mu bak.
    4. Sorun görürsen ekran görüntüsünü ajana ver, düzelttir ve aynı komutlarla yeni görüntü al.
    Windows · macOS · LinuxKlasör: Herhangi bir klasör
    › npm install -g @playwright/cli@0.1.22

    Sürüm sabit (28 Eylül 2026 itibarıyla). Yeni sürüme geçmeden önce üreticinin belgesine bak.

    Windows · macOS · LinuxKlasör: Herhangi bir klasör
    › playwright-cli open http://localhost:5173
    Windows · macOS · LinuxKlasör: Herhangi bir klasör
    › playwright-cli resize 390 844
    Windows · macOS · LinuxKlasör: urun-sitesi (ya da kendi proje klasörün)
    › playwright-cli screenshot --filename=mobil-urun.png
    Windows · macOS · LinuxKlasör: Herhangi bir klasör
    › playwright-cli eval "document.documentElement.scrollWidth - window.innerWidth"

    Doğru yaptığını şuradan anlarsın

    • Hareketi azaltma açıkken ürün görünür ve içerik okunur.
    • mobil-urun.png görüntüsü kaydedilir ve eval komutunun sonucu 0 ya da negatiftir.
    Takılırsan: bu adıma özgü sorunlar
    • open komutundaki adres açılmıyor
      Vite'in terminale yazdığı adresi kullan; 5173 örnektir.
    • Tarayıcı bulunamadı hatası
      open komutuna --browser=chrome ekleyerek bilgisayarındaki Chrome'u seçebilirsin; README bu seçeneği listeler.
    • Hareketi azaltma açıkken sayfa hâlâ kayarak değişiyor
      Kaydırma bağı gsap.matchMedia koşulunun içinde kurulmalı. Koşulun (prefers-reduced-motion: no-preference) olduğunu kodda ajana kontrol ettir.
    • eval komutu hata veriyor
      README eval komutunu bir JavaScript ifadesi çalıştıran komut olarak listeler, resmî SKILL.md ise öğe seçmeden verilen metnin doğrudan değerlendirildiğini gösterir. Sonuç sayı yerine boş ya da farklı bir şey dönerse ajana aynı ölçümü (scrollWidth ile innerWidth farkı) yaptır.
  7. 7. adım · Kod editöründe

    Yalnız gerçekten gerekiyorsa yumuşak kaydırma (Lenis) ekle

    Ne için: Tasarım bilerek yumuşak kaydırma istiyorsa ekle; istemiyorsan bu adımı atla.

    1. Bu adım zorunlu değildir. Önce yukarıdaki kaydırma bağı ile yetinip yetinmediğine bak.
    2. Lenis'in README'si GSAP ScrollTrigger ile kullanım için kurulum adımları verir: Lenis'in scroll olayını ScrollTrigger.update'e bağlamak ve Lenis'in raf çağrısını gsap.ticker'a eklemek. Kurmak istersen aşağıdaki komutu çalıştır ve örnek dosyadaki bağlamayı uygula; ayrıntı için README'nin Setup bölümüne bak.
    3. Hareketi azaltma: README'ye göre Lenis varsayılan olarak bu tercihi dikkate alır, yumuşatmayı kapatır (respectReducedMotion varsayılanı true). Bu ayarı false yapma.
    4. Ekledikten sonra yedek görünüm ve telefon kontrolünü yeniden yap.
    Windows · macOS · LinuxKlasör: urun-sitesi (ya da kendi proje klasörün)
    › npm install lenis@1.3.27

    Sürüm sabit (15 Ekim 2026 itibarıyla). Yeni sürüme geçmeden önce üreticinin belgesine bak.

    lenis-baglama.js · javascript
    import Lenis from "lenis";
    import gsap from "gsap";
    import { ScrollTrigger } from "gsap/ScrollTrigger";
    
    const lenis = new Lenis();
    
    // Lenis kaydırmasını ScrollTrigger ile eşle
    lenis.on("scroll", ScrollTrigger.update);
    
    // Lenis raf çağrısını GSAP ticker'ına ekle
    gsap.ticker.add((time) => {
      lenis.raf(time * 1000);
    });
    
    gsap.ticker.lagSmoothing(0);

    Lenis README'sindeki GSAP ScrollTrigger bölümünden alınmıştır. React bileşeninde useEffect içinde kur ve temizlikte lenis.destroy() çağırmayı ajana kontrol ettir (bu temizlik README'den değil, DijiKoçum'un önerisidir).

    Doğru yaptığını şuradan anlarsın

    • package.json dosyasında lenis satırı görünür.
    Takılırsan: bu adıma özgü sorunlar
    • Kaydırma beklenmedik şekilde takılıyor
      Lenis'i geçici olarak kaldır ve sorunun sürmediğini gör; bağlama için README'deki Setup ve Troubleshooting bölümlerine bak.

Kurulum çalışıyor mu? Şunlara bak

  • Sayfayı kaydırınca kare dizisi ya da 3B model ilerler/döner.
  • 390 piksel genişlikte sayfa genişliği ekran genişliğini aşmaz (scrollWidth - innerWidth sonucu 0 ya da negatif).
  • İşletim sisteminde hareketi azaltma açıkken ürün görünür kalır ve içerik okunur.

Neye para ödenir

Kalemler ayrıdır ve toplam değildir; hangilerinin sana gerektiği kurduğun yola bağlıdır. Fiyatlar değişir, her kalemin kaynağına bak.

  • AbonelikClaude Code erişimi

    Belgeye göre Claude Pro, Max, Team ya da Enterprise aboneliği, Claude Console hesabı ya da bir bulut sağlayıcı gerekir. Güncel fiyatlar Anthropic'in fiyat sayfasındadır. kaynak

  • AbonelikGoogle Flow ile video üretimi (isteğe bağlı)

    Yalnız videonu kendin üretmek istersen. Kredi ve plan ayrıntıları Flow'un kendi sayfalarındadır; hazır videosu olana zorunlu değildir. kaynak

  • Ücret yokGSAP

    Standart lisansa göre ticari projelerde ücretsiz kullanılabilir; Webflow ile rekabet eden kodsuz animasyon araçlarında kullanım yasaktır. Lisans değişebilir, kullanmadan önce güncel metni oku. kaynak

  • Ücret yokezgif, FFmpeg, three, React Three Fiber, Lenis, Playwright CLI

    Paket kayıtları three, fiber, drei ve Lenis için MIT, Playwright CLI için Apache-2.0 lisansı gösterir. ezgif sayfasında bir ücret belirtilmemiştir. kaynak

  • Kurulum hizmeti3B model (yalnız gerçek 3B yolu)

    Modelin üretimi ya da lisanslı bir kaynaktan alınması ayrı bir kalemdir; fiyat modelin kaynağına bağlıdır. Ticari kullanımı yasaklayan lisanslı model kullanılamaz. kaynak

  • BarındırmaSite yayını ve barındırma

    Bu rehber yayını kapsamaz. Kare dosyaları sayfanın boyutunu artırır; barındırma planının dosya ve trafik sınırlarına bak. kaynak

  • Kurulum hizmetiKurulum desteği

    İstersen varlık hazırlığını, hareketin uygulanmasını, optimizasyonu ya da sitenin tamamını bizden alabilirsin; kapsam görüşmeyle belli olur. kaynak

Kaynaklar

Kendin kurabilirsin; takıldığın adımı birlikte yapalım

İstediğin adımları işaretle. İstek formuna sistemin adı ve seçtiğin adımlar görünür bir özet olarak geçer; sen değiştirebilirsin. Şifre ya da API anahtarı paylaşmana gerek yok.

Yardım istediğin adımlar
Kurulum ihtiyacımı görüşelim Video ya da model varlıklarının hazırlanması, kare çıkarma, canvas ya da 3B sahnenin kaydırmaya bağlanması, yedek görünüm ve optimizasyon adımlarında yardım alınabilir. Kesin kapsam ve fiyat görüşmede belli olur.

Başka bir yol arıyorsan

Rehber ücretsiz ve üyeliksiz; buradaki adımları kendin uygulayabilirsin. Bir noktada profesyonel destek istersen ihtiyacına uygun yolu seç. Rehberdeki sıralama bundan etkilenmez.