Team Cereustooling wiki

DSAS fork reference

Checkedagainst the code on 2026-11-12 11:45

Everything here was read from the source on branch claude-automation of S:\_modding\tools\DSAnimStudio.

Locations

What Where
Source S:\_modding\tools\DSAnimStudio, branch claude-automation (uncommitted edits on upstream v5-rc6.1)
Batch mode code DSAnimStudioNETCore\DSASAutomation.cs
Build dotnet build DSAnimStudioNETCore\DSAnimStudioNETCore.csproj -c Release (target net9.0-windows7.0, assembly name DS ANIM STUDIO)
Built exe DSAnimStudioNETCore\bin\Release\net9.0-windows7.0\DS ANIM STUDIO.exe
Other copies install\DS ANIM STUDIO.exe is what run-dsas.bat starts. install-auto\ is a second copy. Whether either has the fork's changes was not checked: use the build output above for --auto.

Command line

Argument Meaning
--auto <job.json> Batch mode. Reads the job, opens the character, captures, exits.
--use-workspace Skip the folder picker when _DSAS_WORKSPACE.json exists next to the opened file and has a GameDirectory.
dsas://open?... Open a file at startup. See Browse ports interactively.

Job file fields

JSON. Field names are not case-sensitive.

Core

Field Type Default Meaning
ani string none, needed Path of the anibnd.
chr string none, needed Path of the chrbnd.
out string none, needed Output folder. Created if missing. Gets the PNGs and auto.log.
anims list of numbers [] Full animation ids. Empty = one capture, loaded.png.
times list of numbers [0] Seconds into each animation. Every animation is captured at every time.
settleFrames number 30 Frames to wait after load, after an animation change and after a scrub.
openTimeoutFrames number 6000 Frames to wait for the load before giving up.
exit bool true Close DSAS when done (a hard exit, no save prompt).
width number 1280 Capture width in pixels.
height number 720 Capture height in pixels.

View and camera

Field Type Default Meaning
hideHelpers bool false Hide the grid, all helper shapes (bones, dummy polys, root motion markers, hit capsules) and the camera pivot box.
background [r, g, b], 0-255 none Viewport colour. Also turns the skybox off.
autoFrame bool false Fit the camera to the drawn model. Needs a flat background.
margin number 0.06 With autoFrame: share of the view kept free on each side.
yaw number 0 With autoFrame: degrees around the model.
pitch number 0 With autoFrame: degrees of tilt.
frameIterations number 10 With autoFrame: fitting steps before it settles for the current frame.
zoom number 1.0 After fitting: multiplies the camera distance (0.4 = 2.5 times closer).
panX, panY number 0 After fitting: move the view centre by a fraction of the view (panY above 0 = up, panX above 0 = right).
fov number 0 Vertical field of view in degrees. 0 = the viewer's own.
camCenter [x, y, z] none With autoFrame and camDist: skip fitting and use this centre.
camDist number 0 With autoFrame and camCenter: the fixed camera distance.

Lighting

All optional. Left out = as DSAS is configured.

Field Type Meaning
sceneBrightness number Scene brightness.
directLight number Direct light multiplier.
indirectLight number Indirect light multiplier.
ambientLight number Ambient light multiplier.
contrast number Scene contrast.
ssaa whole number Supersampling factor.

Hiding things

Field Type Meaning
showMasks list of numbers Only these model mask indices are drawn. Unmasked materials are always drawn. [] hides every masked part.
hideMasks list of numbers These mask indices are hidden. Wins over showMasks.
hideMaterials list of strings Hide every submesh whose full material name contains one of these (case-insensitive).
hideSubmeshes list of numbers or strings A number hides that submesh index of the base model. A string "part:index" hides a submesh of a c0000 part model.
hideParts list of strings c0000 only: hide whole part models by slot name or part file name.

Part names for hideSubmeshes and hideParts: the slot name (Head, Body, Arms, Legs, RightWeapon#0 to RightWeapon#3, and the same for LeftWeapon) or the part file name (for example bd_m_9948). RightWeapon without # matches all four. The PART lines of auto.log list them.

c0000 (human) only

Field Type Meaning
equip object, slot name to row id Armour slots (Head, Body, Arms, Legs) take an EquipParamProtector row. RightWeapon and LeftWeapon take an EquipParamWeapon row. Rows are read from the regulation of ModEngineDirectory.
remapMode string How part skeletons follow the body: DirectBoneMap, DirectFKOrientationOnly, RetargetRelative or RetargetRelativeAndDirectFKOrientation. Left out = the game's default.

Outputs

File When
<out>\a<anim id, 9 digits>_t<time, 3 decimals>.png One per animation and time.
<out>\loaded.png When anims is empty.
<out>\auto.log Always. Overwritten on each run.

auto.log categories: AUTO, MESH, SLOT, PART, DIALOG, NOTIF/<type>, plus DSAS's own error log categories.

_DSAS_WORKSPACE.json

Lives in the same folder as the opened anibnd.

Field Default Meaning
GameDirectory none The game's Game folder.
ModEngineDirectory none The mod folder. Files are looked up here first.
LoadLooseParams false Read loose param files.
LoadUnpackedGameFiles false Read an unpacked game folder.
DisableInterrootDCX false DSAS's own switch; left as is.
WorldViews one "Default" view Saved camera views. DSAS fills it in.

What the fork changes in DSAS

From the working-tree diff against upstream:

  • --auto is started from Main.cs; the automation ticks every update and captures right after the 3D scene is drawn, before any UI.
  • In batch mode the splash, the Welcome window, the folder picker and the model override prompt are skipped, and native dialogs are logged and closed by a watchdog thread.
  • With --auto on the command line, ImGui gets no ini file and the config save returns early, so a batch run never changes the user's layout.
  • In batch mode the 3D view has a fixed size (width x height) and DSAS counts as focused, so it keeps updating.
  • In batch mode, loose material\matbin\<name>.matbin files of the mod folder are read when a material is not in the material binder.
  • --use-workspace (see above).
  • The start camera for a character fits the narrower viewport side with a 1.6 margin. This one also applies to normal use.
Source files this page documents (5)
  • modding:DSAnimStudio/DSAnimStudioNETCore/DSASAutomation.cs
  • modding:DSAnimStudio/DSAnimStudioNETCore/DSASURILoader.cs
  • modding:DSAnimStudio/DSAnimStudioNETCore/zzz_GameRootIns.cs
  • modding:DSAnimStudio/DSAnimStudioNETCore/TaeEditor/TaeProjectJson.cs
  • modding:DSAnimStudio/DSAnimStudioNETCore/DSAnimStudioNETCore.csproj

Changed one of these? Update this page: dsas/reference.md (how).