store art from the live stores: storebound art pull (App Store screenshot sets and previews per locale and display type from imageAsset.templateUrl at the original size, the App Store icon from the newest build or the public artwork; per Play language icon, feature graphic, phone / 7" / 10" / TV / Wear screenshots as the =s0 originals checked against Play's sha256) into store/renders with pulled.json (sha256, store, URL host, store checksum); upsert (a re-run changes nothing, differing local files kept unless --force, the upload's file of a slot compared: Play .jpg, App Store .png, the App Store icon as a picture); onboard runs it; apple screenshots / previews and play images see unchanged pulled files as the store's own; check: render sources are notes with pulled art; local renders check: pulled files pass, store-empty sets not demanded; art live / thumb / replace; desktop Store art tab: live thumbnails per store, language and set (same / differs / not pulled), Pull from stores, store-only apps read-only, Replace with a file (image_pick, art.replace) in the lightbox and the art editor; boot check store art case; tests/art-pull.test.ts; console parity 76 rows (57 complete, 19 with the reason); store-screenshots skill (pull first for live apps), pitfall 59

This commit is contained in:
CRTkafa 2026-10-14 02:18:38 +08:00
parent 49a73c90e4
commit 00be838b76
40 changed files with 1669 additions and 58 deletions

View file

@ -1098,9 +1098,37 @@ export const en = {
'art.prev': 'Previous',
'art.next': 'Next',
'art.emptyTitle': 'No renders yet',
'art.emptyText': 'Render the store screenshots from the frames and the copy file: press Render. It runs locally (ffmpeg and Chrome) and uploads nothing.',
'art.emptyText': 'An app that is already live: Pull from stores below saves the live art here. A new app: render the store screenshots from the frames and the copy file with Render (locally, ffmpeg and Chrome; nothing is uploaded).',
'art.noIssues': 'No issues here',
'art.noIssuesText': 'Every file of this language passes the local store checks.',
'art.liveTitle': 'Live on the stores',
'art.liveRead': 'Read the stores',
'art.liveEmpty': 'Live store art not read yet',
'art.liveEmptyText': 'Reads the screenshots, previews, feature graphic and icon that are live on App Store Connect and Google Play. Read-only.',
'art.liveCount': '{count} images',
'art.liveCount_one': '1 image',
'art.liveFailed': 'could not read',
'art.liveReadOnly': 'A store-only app: the live art is shown read-only. Add the app folder to pull it into the project and edit it.',
'art.liveSummary': '{missing} store images are not in the app folder yet, {differs} differ from your files. Pull from stores adds the missing ones and keeps yours.',
'art.liveAllSame': 'The app folder has every live image, the same as on the stores: uploads send nothing.',
'art.liveStore': 'Store',
'art.liveNone': 'No store art yet',
'art.liveNoneText': 'The stores have no screenshots for this app yet.',
'art.liveNoThumb': 'no preview',
'art.liveSame': 'same as the store',
'art.liveDiffers': 'yours differs',
'art.liveMissing': 'not pulled yet',
'art.liveFoot': 'Read-only on the stores. Pull from stores saves the originals into the renders folder (pulled.json), so checks and uploads treat them as the store\'s own.',
'art.liveFootStoreOnly': 'Read-only on the stores.',
'art.iconApple': 'App Store icon',
'art.iconPlay': 'Play icon',
'art.pull': 'Pull from stores',
'art.pulled': 'Store art pulled into the app folder',
'art.pullHint': 'Downloads the live screenshots, previews, feature graphic and icons into the app folder (dry run first). Your own files that differ are kept.',
'art.replace': 'Replace with a file',
'art.replaceTitle': 'Replace {name}',
'art.replaced': 'Image replaced in the app folder',
'ed.frameLang': 'Frames of',
'art.foot': 'Local files only, read {when}. Uploading is on the Listings tab.',
'gr.analytics': 'Store analytics',

View file

@ -1100,9 +1100,37 @@ export const tr: Record<keyof typeof en, string> = {
'art.prev': 'Önceki',
'art.next': 'Sonraki',
'art.emptyTitle': 'Henüz görsel yok',
'art.emptyText': 'Mağaza ekran görüntülerini karelerden ve metin dosyasından oluşturun: Oluştur\'a basın. Yerelde çalışır (ffmpeg ve Chrome) ve hiçbir şey yüklemez.',
'art.emptyText': 'Zaten yayında olan bir uygulama: aşağıdaki Mağazalardan çek yayındaki görselleri buraya kaydeder. Yeni bir uygulama: ekran görüntülerini karelerden ve metin dosyasından Oluştur ile oluşturun (yerelde, ffmpeg ve Chrome; hiçbir şey yüklenmez).',
'art.noIssues': 'Burada sorun yok',
'art.noIssuesText': 'Bu dilin her dosyası yerel mağaza kontrollerinden geçiyor.',
'art.liveTitle': 'Mağazalarda yayında',
'art.liveRead': 'Mağazaları oku',
'art.liveEmpty': 'Yayındaki görseller henüz okunmadı',
'art.liveEmptyText': 'App Store Connect ve Google Play\'de yayında olan ekran görüntülerini, önizlemeleri, öne çıkan görseli ve simgeyi okur. Yalnızca okur.',
'art.liveCount': '{count} görsel',
'art.liveCount_one': '1 görsel',
'art.liveFailed': 'okunamadı',
'art.liveReadOnly': 'Yalnızca mağazada olan bir uygulama: yayındaki görseller salt okunur gösterilir. Projeye çekmek ve düzenlemek için uygulama klasörünü ekleyin.',
'art.liveSummary': '{missing} mağaza görseli henüz uygulama klasöründe yok, {differs} tanesi sizin dosyalarınızdan farklı. Mağazalardan çek eksikleri ekler, sizinkileri korur.',
'art.liveAllSame': 'Uygulama klasöründe yayındaki her görsel mağazadakiyle aynı: yüklemeler hiçbir şey göndermez.',
'art.liveStore': 'Mağaza',
'art.liveNone': 'Henüz mağaza görseli yok',
'art.liveNoneText': 'Mağazalarda bu uygulamanın henüz ekran görüntüsü yok.',
'art.liveNoThumb': 'önizleme yok',
'art.liveSame': 'mağazadakiyle aynı',
'art.liveDiffers': 'sizinki farklı',
'art.liveMissing': 'henüz çekilmedi',
'art.liveFoot': 'Mağazalarda yalnızca okur. Mağazalardan çek, orijinalleri renders klasörüne kaydeder (pulled.json); denetimler ve yüklemeler onları mağazanın kendi dosyası sayar.',
'art.liveFootStoreOnly': 'Mağazalarda yalnızca okur.',
'art.iconApple': 'App Store simgesi',
'art.iconPlay': 'Play simgesi',
'art.pull': 'Mağazalardan çek',
'art.pulled': 'Mağaza görselleri uygulama klasörüne çekildi',
'art.pullHint': 'Yayındaki ekran görüntülerini, önizlemeleri, öne çıkan görseli ve simgeleri uygulama klasörüne indirir (önce deneme). Farklı olan kendi dosyalarınız korunur.',
'art.replace': 'Dosyayla değiştir',
'art.replaceTitle': '{name} değiştir',
'art.replaced': 'Görsel uygulama klasöründe değiştirildi',
'ed.frameLang': 'Kareler',
'art.foot': 'Yalnızca yerel dosyalar, {when} okundu. Yükleme Mağaza metinleri sekmesinde.',
'gr.analytics': 'Mağaza analizleri',