BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
iPhone으로 차량을 촬영하면 TABOR가 번호를 인식해 스티커로 앨범에 추가합니다, 무료
Pokédex warszawskich autobusów i tramwajów na iPhone’a: skieruj aparat na pojazd, a TABOR odczyta numer taborowy i doda go do albumu jako naklejkę. Za darmo.
게임Swift · PythonGitHub @TheFilipcom4607온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기TABOR: a Pokédex for Warsaw's buses and trams. An iOS app that reads a vehicle's fleet number with on-device OCR, turns it into a die-cut sticker, and shows the ones you haven't caught on a live map, with Lock Screen tracking.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A Pokédex for Warsaw's buses and trams. Point the camera at one, and its fleet number goes into your book as a die-cut sticker — the rarer the model, the louder it lands. Ursus City Smile #1996, one of only twelve in Warsaw, caught through a car's windscreen.README 전문 보기 ↗
"Tabor" is Polish for rolling stock. Warsaw runs about 2 600 buses and trams in regular service, split across 44 models. Some models have hundreds of vehicles, and some have four. On top of that come 36 kinds of museum and club vehicles, Tramwaje Warszawskie's works cars, and the odd bus on trial. Every vehicle carries a fleet number, and ZTM's database says which model each number belongs to. So a photo of a bus is enough to know exactly what you've seen, and a list of every number is enough to know what you haven't.
TABOR does both halves. CATCH reads the fleet number off your photo, on the phone. BOOK files the vehicle under its model and batch. HUNT shows every vehicle you haven't caught yet, live, on a map, and follows one to your stop on the Lock Screen. ME keeps the score.
Get it on the App Store: apps.apple.com/app/tabor/id6816408610 (iPhone, iOS 18 or later, free). Bug reports and ideas go in issues, and questions in discussions. CONTRIBUTING.md says what makes a report or a pull request easy to act on.
Po polsku: opis i instalacja na thefilip.com/tabor.
Or build it yourself. Open the project in Xcode 27 and run it on your phone:
open Tabor.xcodeproj
Set your own team under Signing & Capabilities for the Tabor, TaborControls
and TaborShare targets.
The live map and the live-assisted number reading use Warsaw's open data. The
app doesn't carry a key: it asks TABOR's proxy (proxy/, a Cloudflare Worker
running in Warsaw), which holds the key, keeps each copy of the feed for 3
seconds so phones share one call to the city, gzips it, and allows each address
60 calls a minute. Builds from this repo use that proxy as they are. To go
direct instead, paste a free key from
dane.um.warszawa.pl into Settings › Live data. To
run your own proxy, change the domain in proxy/wrangler.toml and
TABOR_LIVE_PROXY in Config/Tabor.xcconfig, then:
cd proxy && npx wrangler secret put DANE_TOKEN && npx wrangler deploy
WX 2043F, WPI 12345), and plate digits that start with 0.
"Nr 1974" still counts, and so does a number with paint glued on.20:15, 3.14) are dropped.1O23, I974) is read as that digit, but
only when that makes a number in the fleet, and it ranks below a clean read.The photo develops while the vehicle is lifted off the background. That's the same subject-lifting model as the Photos app, running on the phone. The sticker is cut from the object the fleet number is painted on, so another bus or a car alongside doesn't steal it. People standing in front of the vehicle are erased, bike included, unless erasing them would bite into the vehicle. WRONG CUTOUT? on the reveal tries the next object in the photo.
It gets a thick white border that follows its outline, and the sticker slams down with a haptic pattern that gets longer the rarer the model is. A COMMON lands with one thunk. A LEGENDARY builds up in step with its glow, hits on the frame you see it land, and ends in sparks.
A line underneath says what the catch means for your book:
One more — 1987 — and the 2024 batch is done.
Hold the sticker to peel it off the backing and stick it in the book.
Every bus and tram you haven't caught, from Warsaw's live GPS feed. The feed is read every 10 seconds while the map is on screen, every 30 seconds elsewhere in the app (so trails are ready when you open the map), and never in the background.
Every model, with every vehicle ZTM lists, split into batches by operator, build year and depot:
2024 BATCH · R-1 WORONICZA · 1970—1987
Owned stickers come first, then the gaps. A batch turns green once you have the whole batch. Each model page has its length, drive, floor, air-con and how many people it carries, every drive it comes in, and SHOW ON MAP for the ones running now.
| Tier | What it takes |
|---|---|
| LEGENDARY | A model with 12 vehicles or fewer |
| GOLD | 48 or fewer |
| RARE | 80 or fewer |
| COMMON | Everything bigger |
| VINTAGE | Tourist and museum vehicles, only out on summer weekends and at events |
| ON TEST | Trial vehicles on loan to an operator, here for a few weeks |
| WORKS | Tramwaje Warszawskie's own works cars: measurement, transport and welding cars, out on no timetable |
Rarity is fleet size and nothing else. There's no guessing at how often a model runs. VINTAGE, ON TEST and WORKS are tiers of their own, whatever their size, and none counts toward the fleet percentage or the "complete a tier" badges. They aren't rare, they're seasonal, passing through, or not for passengers.
A vehicle's page has its age, when you first saw it, how many times you've seen it, any special livery, and every sighting: when, where (district and street), and which line it was on. A vehicle caught more than once shows the picture you pick. Swipe a sighting to fix its number, model or line, or delete it. A deleted sighting can be brought back with UNDO for a few seconds.
Tabor/Resources/fleet.json is built by scripts/fetch_fleet.py from two
sources: the ZTM vehicle database, and the city's open-data vehicle list, which
adds numbers ZTM hasn't listed yet and each model's specs. On top of that come
hand-kept lists for what neither has yet or has wrong: new deliveries already
running, buses on trial, club-owned vintage buses, Tramwaje Warszawskie's works
cars, retired vehicles still listed, vehicles filed under the wrong model,
coupled trams, and special liveries
(confirmed from photos, since the city's paint data misses repaints). The
script's header explains each list.
python3 scripts/fetch_fleet.py --offline
Rebuilds from the saved files in data/ in seconds. Leave out --offline to
fetch the city's list again, and add --scrape to scrape ZTM too, which takes a
while. ZTM blocks GitHub's runners, so the scrape runs from a home connection, not in CI.
Every night a GitHub Action fetches the city's list, rebuilds, runs the tests and
commits the result to main by itself. It asks for a human only when more than 20
vehicles would leave at once (a pull request) or the city lists a type no model has
yet (an issue). Corrections go into the script's lists, never into fleet.json by
hand: a check fails any commit whose fleet.json isn't what the script builds, so
the nightly rebuild can't undo a fix.
New buses don't need an app update. The app checks this repo's main for a
newer fleet.json once a day and uses it from the next launch. A downloaded
copy only wins while it's newer than the one built into the app, so an app update
with fresher data is never overridden by an old download. Settings can turn the
check off. When a model is split in two, catches move to the right one by
themselves.
Hand-added numbers come from a source (Warszawikia, TransInfo, the KMKM club, phototrans.eu) or were seen live on the feed. None are filled in from an order size. As soon as ZTM lists a number itself, ZTM's row wins and the hand-added one drops out. Every source is credited at the bottom of the book.
[!NOTE] The live feed and the database don't always agree. The feed keeps some vehicles' last positions for years, so anything older than three minutes is ignored. A vehicle the database doesn't know never shows on HUNT, because TABOR couldn't say which model it is.
It lives on the phone and nowhere else: there's no account, nothing of yours goes to a server, and no iCloud sync for now. What the app does send (the live feed, the weather, Lock Screen tracking) is listed in the privacy policy. Settings › Backup exports the whole book as a ZIP: every sighting, photo, sticker and hand-picked model. Importing a backup only adds what's missing, so importing the same file twice changes nothing.
The book keeps its own copy of each catch's photo at 1600 px, a few hundred KB as HEIC. The shot saved to Photos stays full size.
Location is only used while the app is on screen: it geotags a catch and tells HUNT and the camera what's nearby. There's no background location mode at all. Lock Screen tracking sends the proxy the vehicle's number, the stretch of its route up to your stop, and the token it pushes updates to. It's forgotten when tracking ends.
Debug mode (Settings) saves every shot to Files › On My iPhone › TABOR › Debug, including failed reads and retakes. Each shot is saved with the photo, the sticker and what the OCR, the live feed and the sticker cutter made of it. With debug mode on, long-pressing a caught sticker in the book deletes it.
The matching, OCR filtering, stats, badges, live feed parsing, routes and backup
logic in Tabor/Core doesn't depend on the iPhone. It also builds as a Swift
package, so it's tested on a Mac in about a second:
swift test
The proxy's tracking maths has its own:
node proxy/src/trackgeo.test.mjs
GitHub Actions runs the Swift tests on every push to main and every pull request that
touches Tabor/Core, the tests or fleet.json.
To everyone who tested the beta, and above all to @Szpieg0, @Pepe-PL and @flyingkonstal, whose issues found the bugs, named the vehicles and shaped a lot of what's here. Want to help too? Start with CONTRIBUTING.md.