{"id":42557487,"url":"https://github.com/Galaco/studiomodel","last_synced_at":"2026-02-20T03:00:28.659Z","repository":{"id":51148342,"uuid":"147825765","full_name":"Galaco/studiomodel","owner":"Galaco","description":"Go package for parsing Source Engine StudioModel formats (.mdl, .vtx, .vvd, .phy)","archived":false,"fork":false,"pushed_at":"2025-11-02T07:51:29.000Z","size":56,"stargazers_count":9,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-02T09:04:20.102Z","etag":null,"topics":["mdl","parser","phy","source-engine","studiomodel","valve","vtx","vvd"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Galaco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-09-07T13:16:34.000Z","updated_at":"2025-11-02T07:03:02.000Z","dependencies_parsed_at":"2024-06-19T05:30:25.522Z","dependency_job_id":"deaf593c-4dca-4c76-a34a-e6a108d34b92","html_url":"https://github.com/Galaco/studiomodel","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Galaco/studiomodel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Galaco%2Fstudiomodel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Galaco%2Fstudiomodel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Galaco%2Fstudiomodel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Galaco%2Fstudiomodel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Galaco","download_url":"https://codeload.github.com/Galaco/studiomodel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Galaco%2Fstudiomodel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29639808,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"online","status_checked_at":"2026-02-20T02:00:07.535Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mdl","parser","phy","source-engine","studiomodel","valve","vtx","vvd"],"created_at":"2026-01-28T20:00:26.600Z","updated_at":"2026-02-20T03:00:28.652Z","avatar_url":"https://github.com/Galaco.png","language":"Go","funding_links":[],"categories":["⚙️ Engines"],"sub_categories":["Source (Valve)"],"readme":"[![GoDoc](https://godoc.org/github.com/Galaco/studiomodel?status.svg)](https://godoc.org/github.com/Galaco/studiomodel)\n[![Go report card](https://goreportcard.com/badge/github.com/galaco/studiomodel)](https://goreportcard.com/badge/github.com/galaco/studiomodel)\n[![GolangCI](https://golangci.com/badges/github.com/galaco/studiomodel.svg)](https://golangci.com)\\\n[![codecov](https://codecov.io/gh/Galaco/studiomodel/branch/master/graph/badge.svg)](https://codecov.io/gh/Galaco/studiomodel)\n[![CircleCI](https://circleci.com/gh/Galaco/studiomodel.svg?style=svg)](https://circleci.com/gh/Galaco/studiomodel)\n\n# studiomodel\nGolang library for loading Valve studiomodel formats (.mdl, .vtx, .vvd)\n\nSome parts of a prop are mandatory (mdl,vvd,vtx), others are not (phy). It's up to the \nimplementor to construct a studiomodel the way they want to. \n\nThis is a collection of parsers for different formats, it has no concept of \nthe filesystem structure (theoretically different StudioModel components could be located \nin different folders).\n\nTested against Counter Strike Source and Counter Strike Global Offensive\n\n\n#### Features\n\n* VVD reader is stable\n* VTX reader is usable, only for single LOD models\n* MDL reader is usable, currently incomplete (some properties not populated)\n* PHY reader is usable, string data table is not supported yet\n\n\n\n### Usage\n```go\npackage main\n\nimport (\n\t\"github.com/galaco/studiomodel\"\n\t\"github.com/galaco/studiomodel/mdl\"\n\t\"github.com/galaco/studiomodel/phy\"\n\t\"github.com/galaco/studiomodel/vtx\"\n\t\"github.com/galaco/studiomodel/vvd\"\n\t\"log\"\n\t\"os\"\n)\n\n\nfunc main() {\n\tfilePath := \"foo/prop\" //\n\t\n\t// create model\n\tprop := studiomodel.NewStudioModel(\"models/error\")\n\n    // MDL\n\tf,err := os.Open(filePath + \".mdl\") // file.Load just returns (io.Reader,error)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tmdlFile,err := mdl.ReadFromStream(f)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tprop.AddMdl(mdlFile)\n\n\t// VVD\n\tf,err = os.Open(filePath + \".vvd\") // file.Load just returns (io.Reader,error)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tvvdFile,err := vvd.ReadFromStream(f)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tprop.AddVvd(vvdFile)\n\n\t// VTX\n\tf,err = os.Open(filePath + \".vtx\") // file.Load just returns (io.Reader,error)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tvtxFile,err := vtx.ReadFromStream(f)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tprop.AddVtx(vtxFile)\n\n\t// PHY\n\tf,err = os.Open(filePath + \".phy\") // file.Load just returns (io.Reader,error)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tphyFile,err := phy.ReadFromStream(f)\n\tif err != nil {\n\t\tlog.Println(err)\n\t\treturn\n\t}\n\tprop.AddPhy(phyFile)\n\t\n\tlog.Println(prop)\n}\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGalaco%2Fstudiomodel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGalaco%2Fstudiomodel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGalaco%2Fstudiomodel/lists"}