{"id":34996479,"url":"https://github.com/indyjo/blendinfo","last_synced_at":"2025-12-27T02:16:34.892Z","repository":{"id":137434160,"uuid":"209941982","full_name":"indyjo/blendinfo","owner":"indyjo","description":"Very small utility to analyze the contents of a .blend file (Blender's internal file format)","archived":false,"fork":false,"pushed_at":"2025-05-13T11:21:11.000Z","size":21,"stargazers_count":6,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-13T12:29:18.105Z","etag":null,"topics":["analyzer","blend","blender","blender3d"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/indyjo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2019-09-21T07:15:43.000Z","updated_at":"2025-05-13T11:21:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"f89e805e-4c43-4394-8a87-bc8730526928","html_url":"https://github.com/indyjo/blendinfo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/indyjo/blendinfo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indyjo%2Fblendinfo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indyjo%2Fblendinfo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indyjo%2Fblendinfo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indyjo%2Fblendinfo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/indyjo","download_url":"https://codeload.github.com/indyjo/blendinfo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indyjo%2Fblendinfo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28069263,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"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":["analyzer","blend","blender","blender3d"],"created_at":"2025-12-27T02:16:17.040Z","updated_at":"2025-12-27T02:16:34.886Z","avatar_url":"https://github.com/indyjo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blendinfo\nUtility to analyze the contents of a .blend file (Blender's internal file format).\n\n```\nusage: blendinfo.py [-h] [--info] [--dna] [--dump] [--id] [--dot] [--size]\n                    [--find ADDR]\n                    PATH\n\nExamines .blend files and prints information\n\npositional arguments:\n  PATH         .blend file to examine\n\noptional arguments:\n  -h, --help   show this help message and exit\n  --info       Print information about the .blend file itself\n  --dna        Print detailed information about DNA structs\n  --dump       Print contents of all contained DNA data\n  --id         Print summary on 'ID' structs\n  --dot        Print dot graph fo whole file\n  --size       Print statistic on size claimed by data types\n  --find ADDR  Finds the given address in the file's data\n```\nThe output is empty unless one of the information-selecting arguments is given (--info, --dna etc.).\n\nExample:\n```\n\u003e blendinfo.py --info barbershop_interior_cpu.blend\nBlend file: Little-endian, 64 bit pointers\n\n\u003e blendinfo.py --id barbershop_interior_cpu.blend\n5722 of 254794 datablocks containing 5722 of 10492836 objects totalling 7432040 of 281459712 bytes are ID\n\n\u003e blendinfo.py --dna barbershop_interior_cpu.blend | head -n 30\nstruct Link // 16 bytes [#0]\n    Link       *next                 //    8 bytes, offset 0\n    Link       *prev                 //    8 bytes, offset 8\nstruct LinkData // 24 bytes [#1]\n    LinkData   *next                 //    8 bytes, offset 0\n    LinkData   *prev                 //    8 bytes, offset 8\n    void       *data                 //    8 bytes, offset 16\nstruct ListBase // 16 bytes [#2]\n    void       *first                //    8 bytes, offset 0\n    void       *last                 //    8 bytes, offset 8\nstruct vec2s // 4 bytes [#3]\n    short      x                     //    2 bytes, offset 0\n    short      y                     //    2 bytes, offset 2\nstruct vec2f // 8 bytes [#4]\n    float      x                     //    4 bytes, offset 0\n    float      y                     //    4 bytes, offset 4\n[ ... and thousands more ...]\n\n\u003e blendinfo.py --find 7f19958b56ff barbershop_interior_cpu.blend\nFound address 7f19958b56ff in OB segment of size 1440 at 7f19958b5608 containing 1 Object of size 1440\n{ // 1440 bytes\n  ID id = { // 120 bytes\n    void *next = 7f19958b5c08\n    void *prev = 7f19958b5008\n    ID *newid = 0\n    Library *lib = 0\n    char name[66] // 66 bytes\n    short flag = 0\n    short tag = 132\n    short pad_s1 = 0\n    int us = 1\n    int icon_id = 0\n    IDProperty *properties = 7f1995878108\n  }\n  AnimData *adt = 0\n  SculptSession *sculpt = 0\n  short type = 2\n  short partype = 0\n  int par1 = 0\n  int par2 = 0\n  int par3 = 0\n  char parsubstr[64] // 64 bytes\n  Object *parent = 0\n  Object *track = 0\n  Object *proxy = 0\n  Object *proxy_group = 0\n  Object *proxy_from = 0\n  [ ...  many more fields ... ]\n}\n```\n\nResources about the .blend file format\n======================================\n - The Mystery of the Blend, written by Jeroen Bakker, is the definitive guide to the .blend file format. It is no longer available on the web but there is\n   - the [current version in the Blender source tree](https://developer.blender.org/diffusion/B/browse/master/doc/blender_file_format/mystery_of_the_blend.html )\n   - a historic version on [archive.org](http://web.archive.org/web/20160304093204/http://www.atmind.nl/blender/mystery_ot_blend.html)\n   - the original [assets, archived on GitHub](https://github.com/fschutt/mystery-of-the-blend-backup)\n - There is Python code for reading .blend files provided by the Blender developers [here](https://developer.blender.org/source/blender-file/) and [here](https://developer.blender.org/diffusion/B/browse/master/doc/blender_file_format/BlendFileReader.py).\n \n - Holger Machens provides a [Java API for reading and writing .blend files](http://homac.cakelab.org/projects/JavaBlend/index.html) which uses code generated from DNA data. He also provides a [specification of the .blend format](http://homac.cakelab.org/projects/JavaBlend/spec.html) and [out-of-tree documentation](https://github.com/homacs/JavaBlendDocs) for structs and fields.\n  - Jan Walter provides [blend_info](https://www.janwalter.org/jekyll/blender/rust/blendinfo/2019/05/28/blend_info.html), a similar tool programmed in Rust ([git repository](https://codeberg.org/wahn/rs_blender)).\n  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findyjo%2Fblendinfo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Findyjo%2Fblendinfo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findyjo%2Fblendinfo/lists"}