4 puan yazan GN⁺ 5 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • pxpipe, Claude Code isteklerindeki büyük bağlamı yerel bir proxy’de PNG görsellere dönüştürerek girdi token’larını azalttığını ve Fable’ın mevcut liste fiyatına göre uçtan uca faturalandırmayı yaklaşık %59~70 düşürdüğünü belirtiyor
  • Temel ilke, görsel token maliyetinin görselin içindeki metin miktarına değil piksel boyutuna göre belirlenmesi; kod, JSON ve araç çıktısı gibi yoğun metinler gerçek Claude Code trafiğinde görsel token başına yaklaşık 3,1 karakter, metin token’ı başına yaklaşık 1 karakter taşıyor
  • Sıkıştırma hedefleri büyük tool_result’lar, eski katlanmış geçmiş, statik sistem prompt’ları ve araç dokümantasyonu; son turlar, kullanıcı mesajları, model çıktıları, seyrek prose ve izin listesinin dışındaki modeller ise metin olarak aynen geçirilir
  • Kayıplı bir yöntem olduğundan, 12 karakterlik hex dizelerini tam hatırlama Fable 5’te 13/15, Opus’ta 0/15 oldu; eksikler hata olarak değil makul görünen yanlış cevaplar olarak ortaya çıkabildiğinden ID, hash ve secret gibi byte düzeyinde doğruluk gerektiren değerler metin olarak tutulmalı
  • Varsayılan hedef modeller claude-fable-5,gpt-5.6; Opus 4.7/4.8 ve GPT 5.5, görsel bağlam okuma performansındaki düşüş nedeniyle yalnızca opt-in olarak kullanılıyor; gerçekten uygulanıp uygulanmadığı ve tasarruf miktarı istek bazında ~/.pxpipe/events.jsonl üzerinden görülebiliyor

pxpipe’ın azaltmaya çalıştığı maliyet

  • pxpipe, Claude Code’un girdi token’larını azaltmak için büyük bağlamı görsel olarak render eden yerel bir proxy’dir
  • Hedefi, sistem prompt’u, araç dokümantasyonu, geçmiş history ve büyük araç çıktıları gibi istek gövdesindeki hacimli girdi bloklarıdır
  • Model çıktısını sıkıştırmaz ve yanıt streaming’i normal şekilde çalışır
  • Bir görselin token maliyeti, görseldeki karakter sayısına değil piksel boyutuna göre belirlenir
    • Gerçek Claude Code trafiğinde yoğun içerik, görsel token başına yaklaşık 3,1 karakter taşır
    • Metin token’ının yaklaşık 1 karakter seviyesinde olduğu ölçülmüştür
  • Örnek render, yaklaşık 48 bin karakterlik sistem prompt’u ve araç dokümantasyonunu tek bir 1573×1248 görsele sığdırdı; metin olarak yaklaşık 25 bin token, görsel olarak ise yaklaşık 2,7 bin görsel token gerekiyordu

Çalıştırma ve dashboard

npx pxpipe-proxy                                  # proxy on 127.0.0.1:47821
ANTHROPIC_BASE_URL=http://127.0.0.1:47821 claude  # point Claude Code at it
  • Proxy 127.0.0.1:47821 üzerinde çalışır
  • Dashboard http://127.0.0.1:47821/ adresinden sunulur
    • Kaydedilen token sayısı
    • Metin→görsel dönüşümünün yan yana karşılaştırması
    • Kill switch
    • Gerçek zamanlı model chip’i
  • Son turlar metin olarak tutulur; sistem prompt’u, araç dokümantasyonu ve eski büyük history görselleştirilir

Demoda görülen sonuçlar

  • Fable 5 varsayılandır ve README’de 100/100 okuma modeli olarak sunulur
    • 39 görselleştirilmiş filler dosyada tam token sayısını 10/10 doğru bildi
    • grep sonuçlarıyla satır satır eşleşti
    • Çok adımlı ledger aritmetiğini doğru yaptı
    • Oturum maliyeti pxpipe ile $6.06, düz metinle $42.21 olarak sunuldu
    • pxpipe tarafında istenen tek satırlık çıktı formatına uyması için bir kez nudging gerekti
  • Opus 4.8 varsayılan olarak devre dışıdır
    • Metin needle her iki tarafta da okundu
    • Görselleştirilmiş phrase-count Opus tarafından okunamadı ve pxpipe sayı uydurmak yerine başarısızlığı gösterdi
    • Bu yanlış okuma oranı nedeniyle Opus opt-in kapsamındadır

Doğruluk ve kayıplılık

  • pxpipe kayıplı sıkıştırma yöntemidir
  • Yoğun görsel içerikte 12 karakterlik hex dizelerini tam hatırlama sonuçları modele göre büyük ölçüde değişti
    • Fable 5: 13/15
    • Opus: 0/15
  • Eksiklikler hata olarak değil sessiz confabulation olarak ortaya çıkabilir
  • ID, hash ve secret gibi byte düzeyinde doğruluk gerektiren değerler metin olarak tutulmalıdır
  • Özel bir verbatim-risk guard henüz yerleşik değildir
  • İzin listesinde olmayan bir model kullanan subagent metin olarak geçirilebilir
    • CLAUDE_CODE_SUBAGENT_MODEL=claude-sonnet-4-6
    • agent frontmatter’ında model: sonnet

Benchmark’lar ve ölçümler

  • Yeni rastgele sayı problemlerine dayalı benchmark’ta modelin ezberlemiş olma ihtimali düşük problemler kullanıldı
Test N Metin pxpipe görsel Token
novel arithmetic, claude-fable-5 100 100% 100% −38%
novel arithmetic, claude-opus-4-8 100 100% 93% −38%
gist recall A/B, Fable 5 98/arm 98/98 98/98 -
state tracking, Fable 5 18/arm 18/18 18/18 -
never-stated facts confabulation, Fable 5 16/arm 0/16 0/16 -
verbatim 12-char hex recall, dense render, Opus 15 15/15 0/15 -
verbatim 12-char hex recall, dense render, Fable 5 15 - 13/15 -
  • SWE-bench Lite pilot’ta iki taraf da 10/10 oldu ve istek boyutu −%65’ti
  • SWE-bench Pro’da ON 14/19, OFF 15/19 oldu; istek boyutu −%60’tı
    • Kararlar 18/19’da eşleşti
    • Bir split, tekrar çalıştırmada 3/3 olarak yeniden çözüldü
    • README bunu sıkıştırma problemi değil, çalıştırmalar arası değişkenlik olarak ele alıyor
    • Örneklem sayısının küçük olduğuna dair caveat eklenmiş
  • GSM8K görselleştirilmiş halde %96’ydı, ancak eğitim verisine dahil olabilir; bu yüzden README novel-number değerlendirmesini öne çıkarıyor

Çalışma biçimi

tool_result string ──► wrap at 1928px-wide columns ──► pack ~92,000 chars/page ──► PNG[]
  • Proxy /v1/messages’ı yakalar ve uygun büyük girdileri image block olarak yeniden yazar
  • Dönüştürülen bloklar cache dostu şekilde yeniden eklenir; statik prefix korunur ve prompt caching çalışmaya devam eder
  • 1928×1928 görsel yaklaşık 4.761 vision token kullanır ve yaklaşık 92.000 karakter taşır
  • Metnin kazanması için yaklaşık 19 karakter/token’ı aşması gerekir; Claude Code trafiği N=391 bazında yaklaşık 1,91 olarak ölçüldü
  • İstek bazlı tahminleyici, görselleştirme yapılıp yapılmayacağına karar verir; seyrek prose metin olarak tutulur
  • Olaylar ~/.pxpipe/events.jsonl dosyasına kaydedilir

Neyi sıkıştırır, neyi olduğu gibi bırakır

  • Sıkıştırma hedefleri üç girdi bloğudur ve hepsi kârlılık kapısının arkasındadır
    • Yaklaşık 6 bin karakterden uzun, token yoğun tool_result gövdeleri
    • live tail’in arkasındaki eski katlanmış history
    • Statik sistem prompt’u ve araç dokümantasyonu slab’i
  • Aynen geçirilen öğeler de açıkça belirtilmiştir
    • Kullanıcı mesajları
    • Son turlar
    • Model çıktıları
    • Seyrek prose
    • Fayda sağlamayacak kadar küçük bloklar
    • İzin listesi dışındaki modeller
  • Varsayılan kapsam Fable 5 ve GPT 5.6’dır
  • Opus 4.8 ve GPT 5.5, görsel içeriği okuma performansları zayıf olduğu için dashboard’dan veya PXPIPE_MODELS ile açıkça etkinleştirilmelidir
  • PXPIPE_MODELS=off görselleştirmeyi devre dışı bırakır
  • GPT yolunda araç tanımları native JSON olarak tutulur ve Anthropic cache_control işaretçileri kullanılmaz

Maliyet hesaplama yöntemi

  • Başlıktaki tasarruf oranı yalnızca girdi dilimleri değil, toplam fatura bazındadır
  • 13.709 istekten oluşan snapshot’ta $100 yaklaşık $41’e düşerek %59 tasarruf olarak hesaplandı
  • Daha sonra 8.904 sıkıştırılmış istek trace’inde yaklaşık %70 ölçüldü
  • Yalnızca sıkıştırılmış isteklere bakıldığında oran 72~74% seviyesinde, ancak README bunu başlık olarak kullanmıyor
  • Her /v1/messages POST’u için orijinal sıkıştırılmamış gövde üzerinde ücretsiz count_tokens counterfactual paralel çalıştırılır
  • Gerçek faturalandırılmış kullanım, Anthropic yanıtındaki usage block’tan okunur
  • Orijinal ve gerçek kullanım aynı ~/.pxpipe/events.jsonl satırına kaydedilerek turn-count veya run-to-run confound önlenir
  • Dolar dönüşümü Fable 5 liste fiyatı oranlarını kullanır
    • input ×1.0
    • cache write ×1.25
    • cache read ×0.1
    • output ×5
  • Cache fiyatı iki tarafa da aynı uygulanır; böylece cache indirimi tasarruf olarak iki kez sayılmaz

Kütüphane kullanımı

import { renderTextToPngs, transformAnthropicMessages } from "pxpipe";

const imgs = await renderTextToPngs(toolResultText);            // RenderedImage[]
const { body, applied, info } = await transformAnthropicMessages({
  body: requestBytes,
  model: "claude-fable-5",
});
  • Proxy olmadan kütüphane olarak da kullanılabilir
  • options.keepSharp(block) belirli bir bloğu metin olarak sabitler
  • options.emitRecoverable görselleştirilmiş bloğun orijinalini döndürür
  • Runtime Pure JS’tir ve Node ile edge/Workers’ı destekler
  • @napi-rs/canvas yalnızca build time’da kullanılır
  • Tüm API src/core/index.ts içindedir

Gerçek başarısızlıklar ve sınırlar

  • Birkaç haftalık günlük kullanım sırasında bir kez, görselleştirilmiş sohbet geçmişinden bir insan adını hatırlarken kendinden emin şekilde yanlış verdiği bir vaka oldu
  • Kodlama oturumları düzenleme öncesinde dosyayı tekrar okuduğu için bu failure mode’a dayanabilir, ancak saf sohbet hatırlamasında aynı doğrulama yoktur
  • legibility audit, render sayfasındaki tam string hatırlamayı ölçer
    • Yoğun identifier’larda blind read en fazla %63’tü
    • Tüm miss’ler glyph-confusability matrix ile öngörüldü
    • API resample cap’e uymak için page geometry’yi sınırlayan bir hafifletme uygulandı
    • SHA ve sayılar gibi exact identifier’lar metin olarak birlikte taşındı
  • Sınırlamalar da belirtilmiş
    • Görsel tabanlı verbatim recall güvenilir değildir
    • Büyük isteklerde gönderim öncesi PNG encoding gecikmesi eklenir
    • ASCII/Latin-1 iyi test edilmiştir
    • CJK çalışır, ancak muhafazakâr şekilde ele alınır

Geliştirme ve yol haritası

pnpm install && pnpm test
pnpm run build                # regenerates dist/
  • Geliştirme komutları kurulum-test ve build’den oluşur
  • Lisans MIT’dir
  • Yol haritası yalnızca hipotez olarak sunulur; sayı ve örneklem büyüklüğü eklenmedikçe claim olarak ele alınmaz
    • Daha keskin glyph rendering
    • Görselleştirilmiş bulk’ın aynı 1M window’da etkili bağlamı yaklaşık 2 kat artırıp artıramayacağı
    • Daha küçük active context’in uzun görev doğruluğunu artırıp artırmayacağı

1 yorum

 
GN⁺ 5 시간 전
Hacker News yorumları
  • Gemini’ye bakınca bile, PDF işlerken önce OCR yaptığını, ardından metin ve görselleri modele birlikte verdiğini ve metin token maliyetini ücretlendirmediğini biliyorum.
    Claude arka ucu da aynı şeyi yapıyorsa, bu hack token ücretlendirme yöntemindeki bir açıktan ibaret sayılır; Claude Gemini gibi davranıyorsa ileride kapatılma ihtimali yüksek.

    • Bu nokta gerçekten ilginç. İlk başta “Nasıl olsa içeride bir noktada metin token’larına dönüşecek, dolayısıyla Claude açısından gerçek çalıştırma maliyetinin daha ucuz olması mümkün değil” diye düşünmüştüm.
      Ama aşağıdaki yorumda DeepSeek’in görsel token’larla sıkıştırma oranını ciddi ölçüde iyileştirdiğinden bahsediliyor: https://news.ycombinator.com/item?id=48777848
      İç teknik ayrıntıları tamamen anlamadığım için OCR yolunun toplam güç ya da hesaplama maliyeti düşüşüne nasıl yol açabileceğini hâlâ pek kavrayamıyorum.
    • Mutlaka öyle değil. DeepSeek-OCR: Contexts Optical Compression makalesine bakmak yeterli: https://arxiv.org/abs/2510.18234
      Bir görseli LLM’e vermenin bir yolu, görseli parçalara bölmek, bu parçaları bir vision encoder sinir ağından geçirerek görsel token’lar üretmek ve sonra bunları metin token’ları gibi LLM’e girdi olarak vermektir. Elbette vision encoder ile LLM’in birbirini anlayacak şekilde eğitilmesi gerekir. Bu tür yaklaşıma uçtan uca OCR modeli denir.
      Böyle eğitilmiş bir modeliniz olduğunda, belge görselini büyütüp küçülterek aynı metin belgesini temsil etmek için kullanılan görsel token sayısını değiştirebilir; yama boyutu veya vision encoder karmaşıklığı gibi parametreleri de ayarlayabilirsiniz.
      Sonuçlar oldukça iyiydi; bazı testlerde giriş token’larını %90 azaltırken çıktı performansının %97’si korunmuş.
    • Claude Science’ta PDF çıkarmaya yarayan bir araç var, ama gerçekten OCR yapıp yapmadığından emin değilim.
  • Geçen yıl OpenAI modelleriyle aynı şeyi denemiştim; o dönemde prompt token’larını azaltmada işe yarıyordu ama completion token’larına çok daha fazla ihtiyaç duyduğu için sonuçta daha pahalı ve daha yavaş oluyordu.
    https://pagewatch.ai/blog/post/llm-text-as-image-tokens/

  • Ah, gözlerim acıdı. Vibe coding ile yazılmış bir README gibi.

    • LLM’in sıkıştırdığı açıklamaları okumak çok acı verici. Tam olarak nedenini söylemek zor ama hemen belli oluyor ve anlamak için kelimenin tam anlamıyla iki kat çaba gerekiyor.
      Örneğin:

      Honest caveat, visible in the clip: the pxpipe arm answered the count first and needed one follow-up nudge to also print the ledger balance in the requested one-line format; the plain arm followed the format on the first try. Legibility is solved on Fable — single-reply format compliance is the remaining rough edge.
      Bunu dört kez tekrar okuyunca kabaca ne olduğunu tamamlayabiliyorsunuz, ama çoğu gereksiz ve kafa karıştırıcı bilgi.
      Tüm modeller bir ölçüde böyle yazıyor, fakat Claude özellikle ağır görünüyor. GPT 5.5 biraz daha özlü ve daha değerli bilgiyi sıkıştırıyor gibi.

    • Birisi yaptığı şeyi paylaşmak istediğinde vibe coding README görürsem, bunu kişinin yaptığı şeyi yetkin biçimde açıklayacak kadar anlamadığına dair güçlü bir işaret sayarım.
      Yapay zekayla gerçekten faydalı şeyler yapılabilir; özellikle zaten uzmanlığınız olan bir alandaysa bu daha da geçerli. Ama o zaman 1) yapay zekadan yardım aldığınızı belirtmeli ve 2) tam olarak ne yaptığınızı kendi sözlerinizle açıklamalısınız. Yapay zekayla çalışmanın sınırlarından da bahsedebiliyorsanız daha iyi.
      Ancak o zaman “Bu kişinin yaptığı şey kurcalamaya değer, ne yaptığını iyi anlıyor” güveni oluşur.
      Bugün çıkan şeylerin %99’u, insanların hiç anlamadıkları alanlarda çalışmasının sonucu; böyle bir README görünce doğrudan sekmeyi kapatıyorum.
  • Bu, kaynakları yakıp tüketen bir fiyatlandırma hack’i gibi görünüyor. Açık kapatılınca OCR fiyatının artması gerekmez mi?

    • Bu bir açık değil; bilgiyi optik token’lar olarak kodlamak metne göre çok daha verimli olmaya daha yakın.
    • Şart değil. Bu yöntemin gerçekten daha fazla kaynak kullandığı da yok. Aksine, temeldeki bir verimsizlik ortadan kalkıyor olabilir.
      Düşününce mantıklı. İnsanlar da kodu kelime kelime okur, ama çoğunlukla göz gezdirip örüntü tanımayla kabaca ne yaptığını anlar. Yalnızca belirli bir soruya yanıt vermek gerektiğinde belirli kısımlara odaklanır.
      İnsanların da doğal olarak benzer bir dolambaçlı optimizasyon yaptığı söylenebilir.
  • İlgili yazı: https://blog.can.ac/2026/06/10/snapcompact/

  • Bu yöntemde dikkatli olmak gerek. Maliyetin düşmesinin nedeni aslında daha düşük performanslı başka bir modele geçilmesi olabilir.
    Dışarıdan Fable gibi görünebilir ama gerçekte öyle olmayabilir. Bu durumda boşuna ek iş yapmış olursunuz; modeli opus 4.8’e geri almak daha iyi olabilir.

  • Oh-My-Pi (OMP.sh) bağlam sıkıştırma için görselleri kullanıyor gibi. OMP, Pi coding agent’ın üzerine inşa edilmiş.

  • Bu teknik hakkında DeepSeek teknik incelemesi de var: https://www.seangoedecke.com/text-tokens-as-image-tokens

  • Eskiden birinin tweet’ini görmüştüm; muhtemelen Carmack, Geohot veya Karpathy’den biriydi ve görseller daha iyi bir seçenek olabilir mi diye soruyordu.
    O zamandan beri ajana şu anda ne olduğunu anlatırken çok basit cümlelerden oluşan bir prompt ile birlikte görseller kullanıyorum; bazen prompt’a hiç metin koymadığım da oluyor.
    Etkisi çok iyi oldu.
    Yalnız bu, Karpathy’nin kastettiği şeyle tam olarak aynı değil. Yine de o fikir daha iyi bir iş akışına götürdü.

  • Kusura bakmayın ama bu saçmalık. Çalışıyor ve akıllıca, ama açıkça bir fiyatlandırma başarısızlığını aşmanın yolu.
    Kobra ödülleri yüzünden insanların yılan yetiştirmeye başlaması gibi, bu da israfı kullanıyor ve teşvik ediyor.
    Sonuçta bu arbitrajı mümkün kılan kötü fiyatlandırma sisteminden Anthropic’in sorumlu olduğunu düşünüyorum. Ama düzeltilene kadar insanların bunu istismar etmek için üşüşmesi ve tamamen gereksiz dijital çöpün daha da artacak olması mide bulandırıcı.