GunSpec
Medien & Zeichnungen

Medien & Zeichnungen

Jede Waffe trägt eine Strichzeichnung, jede Patrone eine maßstäbliche Illustration, jede Laborierung ein Geschossdiagramm, und ein wachsender Teil des Katalogs ein Foto, eine Schemazeichnung oder ein 3D-Modell. Diese Seite zeigt, wie jedes entsteht, woraus es gezeichnet wird und wie man es abruft. Die Zeichnungen unten erzeugt derselbe Code, den Website und API nutzen, aus denselben Datensätzen.

  • 2,589Silhouetten
  • 605Gezeichnete Patronen
  • 16Felder, aus denen eine Patrone gezeichnet wird
  • 8Geschossprofile

Fünf Arten, eine Form. GET /v1/firearms/{id}/media listet alles, was eine Waffe hat, als ein Array, jedes Element mit seinem kind markiert, und /media/{selector} holt eines über diese Art ohne vorherige Abfrage.

ArtWas es istWie es entstehtAbdeckung
silhouetteEin skalierbares schwarzes Strichprofil der Waffe, auf ihre echten Maße skaliert.Von einem Bildmodell aus einem Referenzfoto gezeichnet, bereinigt, beschnitten und in Vektorpfade nachgezeichnet.2,589 von 9,162 Waffen; jeder neue Datensatz bekommt eine.
renderEin generiertes Bild der Waffe im Studiostil.Bildmodell aus dem Referenzfoto; Hintergrund entfernt.Wo eine brauchbare Referenz existiert.
photoEin Foto mit Quelle und Lizenz.Aus Herstellermaterial und lizenzierten Archiven kuratiert; nie aus einem Shop gescrapt.Wachsend; gelistet von /v1/firearms/media.
schematicEine Explosionszeichnung oder technische Zeichnung.Hersteller- und Archivdokumente, mit Quellenangabe.Wo der Hersteller eine veröffentlicht.
modelEine glTF-Binärdatei für three.js oder Babylon.Aus Quellmodellen optimiert: meshopt-Kompression, WebP-Texturen, quantisierte Meshes.Ein kuratierter Satz; mit has_3d_model=true filtern.

2,589 Waffen haben eine Strichzeichnung. Diese vier sind genau die Dateien, die die Website rendert, aus dem Bundle dieser Seite geladen; im dunklen Design werden sie invertiert, wie die Website es tut.

  1. 1Ein Referenzfoto wird normalisiert: abgeflacht, nach sRGB konvertiert, skaliert. Fotos, die die Moderation nicht passieren, fallen auf eine reine Textgenerierung zurück und werden so markiert.
  2. 2Ein Bildmodell zeichnet kräftige schwarze Strichgrafik nur des Motivs, ohne Hintergrund. Eine Anfrage nach einer gefüllten Silhouette ergibt einen Klumpen; die Pipeline fragt nach Strichgrafik und füllt danach.
  3. 3Das Ergebnis wird in einem Durchgang bereinigt: Hintergrund transparent, enger Beschnitt, Antialiasing-Saum auf Alpha abgebildet, damit auf einer dunklen Seite kein heller Rand bleibt.
  4. 4Die Bitmap wird mit VTracer ohne Verdickung in Vektorpfade nachgezeichnet, damit Linien ihre gezeichnete Stärke behalten. Das Ergebnis ist ein gefülltes SVG, keine Konturlinie.
  5. 5Die Datei wird als svgLineArtUrl am Datensatz vermerkt, auf das Asset-CDN geladen und über die API mit der gewünschten Strichfarbe und -breite ausgeliefert.

Auf der Website wird dieselbe Datei verschleiert ausgeliefert und clientseitig dekodiert; deshalb erhält ein API-Aufrufer stattdessen eine absolute CDN-URL. Ein Pfad, den kein Konsument abrufen konnte,, war eine Weile so dokumentiert, als ginge es. Das Feld steht in der Feldreferenz.

Eine Patrone wird nie aus ihrem Namen gezeichnet, sondern aus bis zu 16 Feldern des Kaliberdatensatzes: Rand-, Boden-, Schulter- und Halsdurchmesser, Hülsen- und Gesamtlänge, Geschosslänge und -durchmesser, Bodentyp, Hülsenform, Material, Projektilart, Geschossprofil, Verschluss und Markierungsfarbe. Die sechs unten zeichnet der gemeinsame Renderer auf dieser Seite aus dem Datensatz, wie er ist.

  • 9x19mm Parabellum14 von 16 Zeichenfeldern im Datensatz95 % KonfidenzBodenrimlessHülsetaperedProjektilbulletProfilround_noseVerschlussbullet
  • .45 ACP14 von 16 Zeichenfeldern im Datensatz95 % KonfidenzBodenrimlessHülsestraightProjektilbulletProfilround_noseVerschlussbullet
  • .223 Remington15 von 16 Zeichenfeldern im Datensatz95 % KonfidenzBodenrimlessHülsebottleneckProjektilbulletProfilspitzerVerschlussbullet
  • 7.62x39mm15 von 16 Zeichenfeldern im Datensatz95 % KonfidenzBodenrimlessHülsebottleneckProjektilbulletProfilspitzerVerschlussbullet
  • 12 Gauge12 von 16 Zeichenfeldern im Datensatz70 % KonfidenzBodenrimmedHülsestraightProjektilshotVerschlussfold_crimp
  • .50 BMG15 von 16 Zeichenfeldern im Datensatz90 % KonfidenzBodenrimlessHülsebottleneckProjektilbulletProfilspitzerVerschlussbullet
  1. 1resolveCartridgeGeometry macht aus dem Datensatz zeichenbare Millimeter. Jede vorhandene Zahl wird unverändert genutzt; eine fehlende wird Feld für Feld aus Verhältnisheuristiken ergänzt, und die Geometrie sagt, welche geraten wurden.
  2. 2Die Hülsenkontur entsteht aus Bodentyp und Hülsenform, das Projektil aus Profil und Art, dann Crimps, Pfropfen oder Schrot aus dem Verschluss. projectile_kind: none ist eine Platzpatrone und wird als solche gezeichnet.
  3. 3Materialien werden zu Verläufen: Messing ist Messing, lackierter Stahl ist lackierter Stahl, eine Papierhülse ist Papier. Die Markierungsfarbe wird dort aufgetragen, wo der Datensatz sie verortet.
  4. 4Beide Renderer, die Inline-Glyphe und das Maßdiagramm, zeichnen aus derselben Geometrie, sodass ein Kaliber auf zwei Seiten nicht unterschiedlich aussehen kann.

Die geschlossenen Vokabulare, aus denen eine Patrone gezeichnet wird

caseShapeCase profile: straight, bottleneck, tapered, belted.
straight, tapered, bottleneck, none
caseMaterialWhat the case is made of: brass, steel, aluminium, polymer.
brass, nickel_brass, steel, lacquered_steel, aluminium, polymer, paper, caseless, none
projectileKindnone is a blank.
bullet, none, shot, slug, round_ball, flechette, dart, pellet, rocket, grenade, signal
bulletProfileBullet shape: fmj, hollow_point, soft_point, spitzer, round_nose.
spitzer, spitzer_boat_tail, round_nose, flat_nose, wadcutter, semi_wadcutter, hollow_point, truncated_cone, round_ball
closureWhat seals the case mouth; a blank is a star crimp.
bullet, star_crimp, rosette_crimp, roll_crimp, fold_crimp, wad, paper, none
markingColorPaint that identifies the load: crimp lacquer on a blank, tip colour on a military round.
black, white, red, orange, yellow, green, blue, purple, pink, brown, grey, silver, gold

Die Zahlen stammen aus der veröffentlichten Zeichnung des Herstellers oder eines Normungsgremiums und tragen wie jeder Datensatz eine Konfidenzbewertung. Jede Patrone steht mit all diesen Feldern in der Kaliberreferenz.

Der bullet_type einer Laborierung wird in eines von 8 Profilen eingeordnet und als seitlicher Querschnitt gezeichnet, skaliert auf den Geschossdurchmesser des Kalibers. Die API rendert es auf Anfrage unter /v1/ammunition/{id}/bullet.svg; die Reihen unten sind die Ausgabe dieses Renderers für jedes Profil bei zwei Durchmessern.

Bei 9 mm

  • Seitenprofil eines FMJ-GeschossesFMJ
  • Seitenprofil eines JHP-GeschossesJHP
  • Seitenprofil eines AP-GeschossesAP
  • Seitenprofil eines SP-GeschossesSP
  • Seitenprofil eines OTM-GeschossesOTM
  • Seitenprofil eines Tracer-GeschossesTracer
  • Seitenprofil eines EPR-GeschossesEPR
  • Seitenprofil eines PT-GeschossesPT

Bei 5.56 mm

  • Seitenprofil eines FMJ-GeschossesFMJ
  • Seitenprofil eines JHP-GeschossesJHP
  • Seitenprofil eines AP-GeschossesAP
  • Seitenprofil eines SP-GeschossesSP
  • Seitenprofil eines OTM-GeschossesOTM
  • Seitenprofil eines Tracer-GeschossesTracer
  • Seitenprofil eines EPR-GeschossesEPR
  • Seitenprofil eines PT-GeschossesPT
Ein Geschossdiagramm abrufen
bash
# Public: no key neededcurl https://api.gunspec.io/v1/ammunition/m882/bullet.svg # Or straight into an img tag<img src="https://api.gunspec.io/v1/ammunition/m882/bullet.svg" alt="M882 Ball, side profile">

Gewehrdurchmesser bekommen einen längeren Körper und eine spitzere Ogive als Pistolendurchmesser, sodass dasselbe Profil über Kaliber hinweg richtig liest. Der Endpunkt braucht keinen Schlüssel. Jede Laborierung in der Munitionsreferenz trägt ihre Diagramm-URL als bulletSvgUrl.

Die Assets, die wir hosten oder verlinken statt zeichnen. Jedes kommt mit der Quellenangabe, die es für die Weiterverwendung braucht.

  • Fotos und Renderings werden von GET /v1/firearms/media indexiert, eine dreispaltige Zeile pro Waffe für Medienraster und Spiegel, mit einem Fingerabdruck, der sich ändert, wenn Bilder hinzukommen oder wegfallen.
  • Schemata sind Explosions- und technische Zeichnungen aus Hersteller- und Archivmaterial, ab Studio; die Zugriffsmatrix hat die vollständige Freischaltung.
  • 3D-Modelle sind glTF-Binärdateien mit meshopt-Kompression, WebP-Texturen und quantisierten Meshes. Ein Loader braucht diese drei Standarderweiterungen und sonst nichts.
  • Assets, die wir verlinken statt hosten, antworten mit einem 302 auf ihren Ort; Assets in unserem eigenen Bucket streamen vom Endpunkt. In beiden Fällen ist url eines Medienelements absolut und abrufbar.

Eine Ressource für alles, plus die älteren Routen pro Art, die bestehen bleiben. Die Adressierung über die Art braucht keine vorherige Abfrage; format=json liefert die Metadaten ohne Bytes, format=datauri bettet bis zu 256 KB ein.

EndpunktLiefertTarif
/v1/firearms/{id}/mediaList every asset for a firearmapplication/jsonExplorer
/v1/firearms/{id}/media/{selector}Get one assetapplication/json, image/png, image/webp, image/jpeg, image/svg+xmlBuilder
/v1/firearms/mediaIndex every firearm that has imageryapplication/jsonExplorer
/v1/firearms/{id}/silhouetteGet silhouette line artapplication/json, image/svg+xmlBuilder
/v1/firearms/{id}/imagesList imagesapplication/jsonExplorer
/v1/firearms/{id}/images/{imageId}Get image assetapplication/json, image/png, image/webp, image/jpeg, image/svg+xmlBuilder
/v1/firearms/{id}/schematicsList schematicsapplication/jsonStudio
/v1/firearms/{id}/modelGet 3D modelmodel/gltf-binaryBuilder
/v1/ammunition/{id}/bullet.svgRender a bullet diagramimage/svg+xmlKein Schlüssel
Drei Aufrufe
bash
# Everything a firearm has, one shape, with a credit block per itemcurl -H "X-API-Key: your_api_key" \  https://api.gunspec.io/v1/firearms/ak-47/media # The silhouette as SVG, stroke recoloured, no prior lookupcurl -H "X-API-Key: your_api_key" \  "https://api.gunspec.io/v1/firearms/ak-47/media/silhouette?stroke_color=%23ffffff" # Just the metadata, no bytescurl -H "X-API-Key: your_api_key" \  "https://api.gunspec.io/v1/firearms/ak-47/media/photo?format=json"

Jede Medienantwort trägt ein ETag und antwortet mit 304, wenn unverändert, sodass ein Spiegel nichts erneut lädt, was sich nicht bewegt hat; siehe Caching. Gewinnt oder verliert eine Waffe ein Asset, feuert firearm.updated an Webhook-Abonnenten.

Jedes Medienelement trägt die nötige Quellenangabe, und jedes SVG, das die API ausliefert, ist in einer Sandbox, bevor es einen Browser erreicht.

Der Credit-Block an jedem Element

credit.source
Where the record came from: a curated entry, an inference, or an import.
credit.author
Who made the asset, where it is credited.
credit.sourceUrl
Page the asset or document was taken from.
credit.license
Licence the asset is held under, where one is recorded.

Wie SVGs ausgeliefert werden

Ein SVG kann Skript enthalten. Jedes, das die API ausliefert, darunter Silhouetten, Geschosszeichnungen und Medien, wird mit einer Content-Security-Policy gesendet, die beim direkten Öffnen jede Ausführung verhindert, und Farbwerte, die in eine Silhouette geschrieben werden, werden validiert und maskiert. Die Richtlinie, von der Seite Datenschutzmaßnahmen:

default-src
'none'
style-src
'unsafe-inline'
img-src
data:
sandbox