bimime is a Go package for detecting Bi ecosystem file types
by path hint, magic bytes, and lightweight text checks.
It covers Real Virtuality and Enfusion engine formats,
plus common modding files such as configs, scripts, assets,
localization tables, project/workbench files,
and diagnostics/crash artifacts.
- fast: path/extension only, no content read.
- normal: extension + magic when needed by plan/extension.
- strict: normal + validation checks: extension/magic mismatch, text-likeness, content patterns.
Analyzesupports per-extensionAnalyzePlanoverrides.- Use
AnalyzeMatchExtensionMagicfor targeted forced magic probing on selected extensions (for examplewrp,p3d,rvmat,bisurf). - For batch processing, prefer
Analyzerto reuse normalized config.
result, err := bimime.AnalyzeFile(
bimime.BIAmbiguousRAPOptions("terrain.wrp", nil),
)
if err != nil {
return err
}
fmt.Println(result.Probe.Resolved.ID)analyzer := bimime.NewAnalyzer(bimime.AnalyzeOptions{
DefaultPlan: bimime.PlanFast(),
PlansByExtension: bimime.BIAmbiguousRAPOverrides(),
})
result, err := analyzer.AnalyzeFile("terrain.wrp")
if err != nil {
return err
}
fmt.Println(result.Probe.Resolved.ID)Equivalent explicit options:
result, err := bimime.AnalyzeFile(bimime.AnalyzeOptions{
Path: "terrain.wrp",
DefaultPlan: bimime.PlanFast(),
PlansByExtension: bimime.BIAmbiguousRAPOverrides(),
})
if err != nil {
return err
}
fmt.Println(result.Probe.Resolved.ID)result, err := bimime.AnalyzeFile(bimime.AnalyzeOptions{
Path: "x.png",
DefaultPlan: bimime.PlanNormal(),
})
if err != nil {
return err
}
result = bimime.Analyze(bimime.AnalyzeOptions{
Path: "script.sqf",
Prefix: dataPrefix,
DefaultPlan: bimime.PlanNormal(),
PlansByExtension: map[string]bimime.AnalyzePlan{
"sqf": {
Match: bimime.AnalyzeMatchExtensionMagicNeeded,
Validate: bimime.AnalyzeValidateStrict,
},
},
})NeedsContentdecides whether prefix bytes are required.AnalyzeReaderreads only a prefix, not whole payload.AnalyzeFileopens file and reads only required prefix bytes.Proberesolves type by extension and magic bytes.strictwithout payload prefix returnsinsufficient_content.