Steam Assets Fetcher — Téléchargement automatique des assets Steam
Steam Assets Fetcher — Téléchargement automatique des assets Steam
📖 Introduction
Steam Assets Fetcher est un script Node.js permettant de télécharger automatiquement les principaux assets graphiques associés à un jeu Steam à partir de son AppID.
Il interroge le CDN officiel de Steam et tente de récupérer un ensemble exhaustif d’images standards (capsules, headers, library assets, logos, etc.), puis les stocke localement pour une utilisation ultérieure (documentation, sites web, médias, outils internes).
Ce script est particulièrement utile pour :
- L’archivage d’assets Steam
- L’automatisation de pipelines médias
- Les outils de scraping légitimes basés sur des ressources publiques
Vous pouvez utiliser le site web StramDB pour rechercher les jeux que vous souhaitez récupérer les assets graphiques. Il vous informera l'identifiant unique du jeu qui devra être utilisé dans le script
📦 Installation / Prérequis / Dépendances
Prérequis
- Node.js ≥ 18
- Accès Internet
- Droits d’écriture sur le système de fichiers
Dépendances
Ce script utilise uniquement des modules standards de Node.js :
fspathfetch(natif à partir de Node 18)
Aucune dépendance externe n’est requise.
⚙️ Fonctionnement général
Le script :
- Prend un AppID Steam en argument de ligne de commande
- Construit l’URL CDN officielle de Steam
- Teste une liste prédéfinie de chemins d’assets possibles
- Télécharge les fichiers disponibles
- Génère un rapport récapitulatif
📄 Constantes
POSSIBLE_PATHS
const POSSIBLE_PATHS = [
"logo.png",
"logo_small.png",
"logo_medium.png",
"logo_large.png",
"header.jpg",
"header.png",
"capsule.png",
"capsule_231x87.jpg",
"capsule_467x181.jpg",
"capsule_184x69.jpg",
"capsule_616x353.jpg",
"library_600x900.jpg",
"library_hero.jpg",
"library_hero_3840x2160.jpg",
"capsule_1920x1080.jpg",
"header_586x192.jpg",
"page_bg_generated.jpg",
"page_bg_generated_v6.jpg",
"hero_capsule.jpg",
"box.jpg",
"box.png",
"glyph.png",
"icon.png",
"icon.jpg"
];
Liste complète des chemins d’assets testés. Elle couvre les formats les plus courants utilisés par Steam pour l’affichage des jeux dans le store, la bibliothèque et les pages de détails.
⚙️ Méthodes
downloadFile
async function downloadFile(url, dest) {
try {
const response = await fetch(url);
if (response.status === 200) {
const buffer = Buffer.from(await response.arrayBuffer());
fs.writeFileSync(dest, buffer);
return true;
}
} catch (error) {
console.error("Erreur de téléchargement :", error);
}
return false;
}
Description
Télécharge un fichier depuis une URL donnée et l’enregistre localement.
Paramètres
url(string) : URL du fichier à téléchargerdest(string) : Chemin de destination local
Valeur de retour
truesi le fichier existe et a été téléchargéfalsesinon
🚀 Utilisation
Exécution du script
node steamAssetsFetcher.js <AppID>
Exemple
node steamAssetsFetcher.js 570
Résultat
Les assets trouvés sont téléchargés dans :
output/<AppID>/Les fichiers sont renommés automatiquement pour éviter toute collision
Un résumé s’affiche en fin d’exécution
📂 Structure de sortie
SteamAssetsFetcher/
├── output/
| └── 570/
| ├── header.jpg
| ├── capsule_616x353.jpg
| ├── library_hero.jpg
| ├── logo.png
| └── ...
└── index.js
Chaque AppID dispose de son propre dossier, facilitant l’archivage et l’automatisation.
🔗 Ressources externes
- CDN Steam (ressources publiques)
- Documentation Steamworks (pour les formats d’assets)
- Node.js File System API
🎯 Conclusion
Steam Assets Fetcher est un outil simple, efficace et autonome pour récupérer rapidement les assets graphiques d’un jeu Steam à partir de son AppID.
Ses points forts :
- Zéro dépendance externe
- Rapide et automatisable
- Facilement extensible (ajout de nouveaux chemins)
- Compatible avec des workflows CI/CD ou médias
Il constitue une base solide pour tout projet nécessitant une récupération structurée d’assets Steam.
📜 Code complet
Projet complet ici
import fs from "fs";
import path from "path";
// -----------------------------------------------------------------------
// Liste complète des chemins possibles pour les assets Steam
// -----------------------------------------------------------------------
const POSSIBLE_PATHS = [
"logo.png",
"logo_small.png",
"logo_medium.png",
"logo_large.png",
"header.jpg",
"header.png",
"capsule.png",
"capsule_231x87.jpg",
"capsule_467x181.jpg",
"capsule_184x69.jpg",
"capsule_616x353.jpg",
"capsule_467x181.png",
"library_600x900.jpg",
"library_hero.jpg",
"library_hero_3840x2160.jpg",
"capsule_1920x1080.jpg",
"header_586x192.jpg",
"page_bg_generated.jpg",
"page_bg_generated_v6.jpg",
"page_bg_generated_v6.png",
"hero_capsule.jpg",
"box.jpg",
"box.png",
"glyph.png",
// Achievements & movies (génériques)
"icon.png",
"icon.jpg",
];
// -----------------------------------------------------------------------
// Fonction pour télécharger une URL
// -----------------------------------------------------------------------
async function downloadFile(url, dest) {
try {
const responce = await fetch (url);
if (responce.status === 200) {
const buffer = Buffer.from(await responce.arrayBuffer());
fs.writeFileSync(dest, buffer);
return true;
}
} catch (error) {
console.error("Erreur de téléchargement :", error);
}
return false;
}
// -----------------------------------------------------------------------
// Programme principal
// -----------------------------------------------------------------------
async function main() {
const appId = (process.argv[2]).trim();
if (!appId) {
console.error("Usage: node steamAssetsFetcher.js <AppID>");
process.exit(1);
}
const baseUrl = `https://cdn.cloudflare.steamstatic.com/steam/apps/${appId}`;
const outputDir = path.join("output", appId);
fs.mkdirSync(outputDir, { recursive: true });
console.log(`\nRecherche des assets pour AppID ${appId}\n`);
let found = 0;
let notFound = 0;
for (const p of POSSIBLE_PATHS) {
const url = `${baseUrl}/${p}`;
const dest = path.join(outputDir, p.replace(/\//g, "_"));
process.stdout.write(`Test: ${p} ... `);
try {
const ok = await downloadFile(url, dest);
if (ok) {
console.log("OK");
found++;
} else {
console.log("Not found");
notFound++;
}
} catch (err) {
console.log("Error" ,err);
notFound++;
}
}
console.log("\nRésultat :");
console.log(` Trouvés : ${found}`);
console.log(` Absents : ${notFound}`);
console.log(`\nFichiers stockés dans : ${outputDir}\n`);
}
main();