
  VMD twist motion separator  V1.21g6 
  learningposePMX  V1.18 
    tool set  
                               Copyright(c) F.Issiki 2015, 2025 


This is a set of VMD twisting-motion separator (VMDTMS) V1.21 and 
learningposePMX V1.20 for Win32 compatible environment. 

This tool converts motion files (VMD files) for Miku Miku Dance (MMD) 
to separate twisting motion of arms and elbows to their twisting 
bones ("Nejiri-bone") and to smooth model surface around those arm 
(shoulder) and elbow hinge joints. 

Visual explanation of the contents in this ReadMe is also available on 
  https://seiga.nicovideo.jp/comic/16699
in Japanese, if you are familar with Japanese contents.  



<< How to use (easy way) >> 

- You can drag-and-drop VMD files (.vmd) onto this tool (VMDTMS.exe). 
  This tool automatically creates converted VMD files (***-cnv.vmd) 
  in the same folder. 

- You can also convert a VMD file by executing VMDTMS.exe by 
  double-clicking and then selecting the VMD file on the dialogue. 



<< How to customize (let this tool learn best conversion) >> 

  VMDTMS refers bone angles of each model (.PMX/.PMD/.X) for correct 
  conversion of VMD files. 
  
  There are two ways for learning bone angles of the model, depending 
  on the file formats of the models. 

  [1] using learningposePMX  

    If you are using PMX model files for MMD, you can use 
    learningposePMX.exe. 
    
    Drag and drop the PMX file onto "learningposePMX.exe" that you 
    want to use in the MMD (or VMD compatible players).   
    
    If the tool succeeds in learning bone angles, a dialogue 
    will appear with the message like "xxxxxx Learned bone angles," 
    showing success of the learning. 
    
    You will find a "vmdsetup.ini" file created in the VmdTms folder. 
  
  [2] using learningposeVMD 

    If you are using other model files than PMXs, you can use 
    learningposeVMD.exe. 
    
    There are four steps to let this tool learn bone angles for best 
    conversion of VMD files for each .PMD/.X model. 
    For the best learning, a VMD file with four twisting bones 
    rotated by 15-90 degrees each and recorded, should first be 
    prepared using the Miku Miku Dance (MMD).  
   
   (1) Let .PMD/.X model file read into MMD, which model you want 
       to customize for. 
  
   (2) Twist four bones below on MMD: 
       - Left  arm twisting 
       - Left  hand twisting 
       - Right arm twisting 
       - Right hand twisting 
       with angles between 15 and 90 degrees, and record those 
       poses as frame keys. 
  
   (3) Select those four bone keys (or select all bone keys) 
       (select the above 4 recorded frame keys with [SHIFT] key 
       pressed) and 
       save the motion data to VMD file from the file menu 
       in the MMD: 
      
         File(F)  >  Save motion data(L) 
      
          (Above is the direct translation of Japanese menu names)
      
       Avoid a space character in the VMD file name as possible.  
   
   (4) Drag and drop the VMD file onto "learningposeVMD.exe"   
    
    
    In both [1] and [2] cases, if the tool succeeds in learning 
    bone angles, a dialogue will appear with the message like 
    "xxxxxx Learned bone angles," showing success of the learning.  
    
    In [2] case, if the tool fails in learning bone angles, 
    a dialogue will appear with the message like 
    "xxxxxx *** Failed learning." 
    In that case, please retry steps (1)-(4). 
    Usually a VMD file with twist-bone angles rotated by 10-to-95 
    degrees can be safely recognized and learned correctly.   



<< How to assign accuracy of pose conversion  (professional) >> 

- You can change pose angle accuracy (maximum pose error) for 
  auto-key-frame insertion with "-EA" option. 
  
    ex1) > vmdtms -EA0.5 (filename).vmd 
    ex2) > vmdtms -EA3.0 (filename).vmd 
  
  where, 
   - "-EA" meaning "error admittance." 

  In the example ex1, you can convert arm and elbow motion 
  with the angle accuracy of 0.5 degrees. 
  In the ex2, the accuracy will be set to 3.0 degrees. 
  
  You can also assign the -EA option in setup file "angsetup.ini," 
  editing or creating the file with text editors, notepad, etc. 
  
  To prevent misalignments of the converted motions interpolated 
  between frame keys in the MMD, this tool estimates the 
  maximum error of the pose angles of the converted VMD motions. 
  
  If it is estimated that the poses of the arms and hands 
  differ with the original ones, this tool automatically inserts 
  new frame keys to settle the maximum angle error below the 
  limit assigned with the -EA option. 
   
  You can also cancel the auto-key-frame insertion by deleting 
  the option "-AI" (auto-insert) in "modsetup.ini" file. 



<< How to assign modes and sharing ratios of twist motion 
    between arm (elbow) and thier twist bones (professional) >> 

- You can enable/disable the conversion for the arm and elbow 
  bones, and select the twisting motions to be mixed or separated,   
  using "-LA", "-LH", "-RA", and "-RH" options. 
  
- You can assign the sharing ratios of the twist motion 
  between arm (elbow) and their twist bones 
  using "-kLA", "-kLH", "-kRA", and "-kRH" options. 
     
    ex1) > vmdtms -LA2 -kLA0.80  (filename).vmd 
    
    ex2) > vmdtms -LA2 -LH2 -RA2 -RH2 
                  -kLA0.8 -kLH0.7 -kRA0.6 -kRH0.5 (filename).vmd 
  
    ex3) > vmdtms -LA1 -LH1 -RA1 -RH1  (filename).vmd 

  where, 
   - "-LA" meaning "left-arm   conversion mode" (0-3),  
   - "-LH" meaning "left-hand  conversion mode" (0-3),  
   - "-RA" meaning "right-arm  conversion mode" (0-3),  
   - "-RH" meaning "right-hand conversion mode" (0-3), 
   - "-kLA" meaning "sharing ratio of left-arm" (0.001-1.0),  
   - "-kLH" meaning "sharing ratio of left-hand" (0.001-1.0),  
   - "-kRA" meaning "sharing ratio of right-arm" (0.001-1.0),  
   - "-kRH" meaning "sharing ratio of right-hand" (0.001-1.0),  
  where 
   - mode=0: no conversion, 
   - mode=1: mixing only  (similar /w sharing ratio=0), 
   - mode=2: sharing twist motion  (sharing ratio=0.0-1.0), 
   - mode=3: fix sharing ratio to =1.0, 

  In the example ex1, you can convert arm and elbow motion 
  with the ratio=0.8; share 80% of twisting motion of the 
  left arm to the left-arm twist bone, and leave 20% of 
  the twisting motion remained in the left arm. 
  The other bones will stay in default settings. 
  (-LH2 -RA2 -RH2 -kLH1.0 -kRA1.0 -kRH1.0). 
  
  In the ex2, the twisting motion of the left-arm, left-hand, 
  right-arm, and right-hand will be shared with those twist bones 
  will the assigned ratios. 
  
  In the ex3, only the mixing will be processed, and the 
  VmdTms.exe acts just like as the VmdMix.exe. 



<< How to enable wrist-to-elbow (WTE) correction 
   and assign sharing ratios of twist motion between wrists 
   and elbow twisting bones (new in V1.11alpha2) >> 

- The twisting motion in the left-wrist bone is mixed and 
  canceled with left-hand-twisting bone motion, if -WTE option 
  is assigned and -LH mode is set to 2 or 3. 
  
- The twisting motion in the right-wrist bone is mixed and 
  canceled with right-hand-twisting bone motion, if -WTE option 
  is assigned and -RH mode is set to 2 or 3. 

    ex1) > vmdtms -WTE -LH2 -RH2  (filename).vmd 

  where, 
   - "-WTE" meaning "wrist-to-elbow correction." 
  
- You can assign the sharing ratios of the twist motion between 
  wrists and elbow twisting bones using "-kLW" and "-kRW" 
  options. 
     
    ex2) > vmdtms -WTE -LH2 -kLW0.85  (filename).vmd 
    
  where, 
   - "-kLW" meaning "sharing ratio of left-wrist" (0.001-1.0),  
   - "-kRW" meaning "sharing ratio of right-wrist" (0.001-1.0). 
  
  The wrist-to-elbow correction is enabled by default, 
  if you are using the "modsetup.ini" file as it was extracted. 



<< How to enable arm-to-elbow (ATE) correction 
                                (new in V1.14alpha1) >> 

- This arm-to-elbow (ATE) correction is to tune the twisting  
  motion of (upper)arm-twisting bones so that it would fit to 
  the real natural human elbow behavior.  

- The ATE correction for the left elbow will be activated, 
  if -ATE option is assigned and -LA mode is set to 2 or 3. 
  
- The ATE correction for the right elbow will be activated, 
  if -ATE option is assigned and -RA mode is set to 2 or 3. 

    ex1) > vmdtms -ATE -LA2 -RA2  (filename).vmd 

  where, 
   - "-ATE" meaning "arm-to-elbow correction." 
  
- In this correction, the sharing ratios of the twist motion 
  are always fixed to 1.0 (to avoid inconsistency in the motion
  conversion). 
     
- The arm-to-elbow correction is enabled by default, 
  if you are using the "modsetup.ini" file as it was extracted. 



<< How to assign elbow hinge axis angle  (new in V1.15) >> 

- The angle of elbow folding axis (often fixed to 0 degree in 
  most of the PMX models) can be assigned and tuned to be fitted 
  for each PMX model in the arm conversion of VMDTMS. 

    ex1) > vmdtms -ATE -LA2 -RA2 -EHA14.0 (filename).vmd 

  where, 
   - "-EHA" meaning "elbow hinge axis (angle)." 
  
- The example (ex1) allows you to change the conversion using 
  -ATE option to be best fitted to the PMX models that have the 
  elbow hinges with inclined axis from the Y-axis by 14.0 
  degrees. 
     
- The -EHA option is set by default to 0 degree, 
  if you are using the "angsetup.ini" file as it was extracted. 



<< How to enable long sleeve conversion 
                                (new in V1.16alpha1) >> 

- Long sleeve conversion (SLV) is to tune the twisting  
  motion of arm bones and twisting bones so that it would fit 
  to behaviors of long sleeve clothes.  

- The long sleeve conversion for both the left and right arms 
  will be activated, if -ATE, -WTE, and -SLV options are 
  assigned, and -LA, -LH, -RA and -RH modes are set to 2 or 3. 

- You can assign the ratios of the long sleeve twisting motion 
  against the normal twisting motion (-ATE -WTE) 
  using "-kSLV" option. 

    ex1) > vmdtms -SLV -ATE -WTE 
                  -LA2 -RA2 -LH2 -RH2 (filename).vmd 

    ex2) > vmdtms -SLV2 -ATE -WTE 
                  -LA2 -RA2 -LH2 -RH2 (filename).vmd 

    ex3) > vmdtms -SLV1 -kSLV=0.70 -ATE -WTE 
                  -LA2 -RA2 -LH2 -RH2 (filename).vmd 

  where, 
   - "-SLV" meaning "sleeve correction",  
   - "-kSLV" meaning "ratio of long sleeve motion" 
                                            (0.001-1.0). 

- Both examples (ex1) and (ex2), allow you to convert twisting 
  motion of the whole arms as they simulate the behavior of the 
  long sleeve clothes. 
  The sleeve type number of "2" is added in the example (ex2). 
  If the sleeve type number is omitted in the option, it will 
  be supposed to be "2". 
  
- The example (ex3) allows you to convert twisting motions 
  of the whole arms so that they become a mixture of 70% of 
  long sleeve cloth motion and 30% of normal human elbow motion. 
  
- Option -SLV1 allows conversion of sleeve type 1.
  (V1.16alpha1)
  The sleeve type 1 allows you to convert twisting motion 
  of the whole arms so that they become mixture of long 
  sleeve motion and normal human elbow motion. 
  
- Option -SLV2 allows conversion of sleeve type 2. 
  (V1.16alpha2)
  The sleeve type 2 allows you to convert twisting motion 
  of the whole arms so that the minimum twisting in the 
  whole arms are shared in wrist twisting bones and arm 
  twisting bones. 

- In the examples (ex1) and (ex2), the ratio kSLV is set to 
  1.0 (100%). 
  
- The long sleeve conversion is disabled by default in the 
  "modsetup.ini" file in the releases later than V1.17, 
  if you are using the file as it was extracted. 
  Please enable it manually, rewriting the setup file "mod-
  setup.ini" (deleting the comment marks "//"). 



<< How to enable/disable report error message display 
    in abnormal arm motion detection  (new in V1.17) >> 

- V1.17 supported -CHK option, which enables displaying 
  error report messages to show when and on which arm  
  motion conversion errors occurred. 
  
  If the -CHK option is assigned in modsetup.ini or in a 
  command line, VMDTMS displays a message box to show the 
  report.  

    ex) > vmdtms -CHK -ATE -WTE (filename).vmd 

  where, 
   - "-CHK" meaning "check result display". 
  
- The option -CHK is enabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 



<< How to enable/disable neural-net pose estimation  
                                  (new in V1.18alpha1) >> 

- V1.18 supported -NN option, which enables pose estimation 
  using a small neural network (NN). 
  The NN-based pose estimation typically increases pose 
  estimation accuracies by an order of magnitude at the start 
  of the VMD motion. 
  
  If the -NN option is assigned in modsetup.ini or in a 
  command line, the neural network will be used for the pose 
  estimation in converting motion files.  

    ex) > vmdtms -NN -AI -ATE -WTE (filename).vmd 

  where, 
   - "-NN" meaning "enabling neural network". 
  
- The option -NN is enabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 



<< How to enable post-process motion mixing  (new in V1.18alpha2) >> 

- V1.18alpha2 and later supported -RMX options (-RMXLA, -RMXLH, 
  -RMXRA, and -RMXRH), which enables post-process mixing of left-arm, 
  left-hand, right-arm, and right-hand twisting bone motion. 
  
  If the -RMXLA option is assigned in modsetup.ini or in a command 
  line, post-process motion mixer will be enabled to mix left-arm 
  motion and left-arm-twist motion. 

    ex) > vmdtms -RMXLA -LA2 -kLA=0.8 (filename).vmd 

  where, 
   - "-RMXLA" meaning "enabling remixing of left-arm twist", 
   - "-RMXLH" meaning "enabling remixing of left-hand twist", 
   - "-RMXRA" meaning "enabling remixing of right-arm twist", 
   - "-RMXRH" meaning "enabling remixing of right-hand twist". 

- The -RMX options are disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 



<< How to enable groove-center mixing 
           (new in V1.20e, extended in V1.20f23e, 24a, V1.21d) >> 

- V1.20e and later supported -MXGTC option, which enables 
  mixing of groove and center bones, taking composite mixing of 
  time-dependent changes of rotation and position. 

- V1.20e and later also supported -EAP option, which can change 
  error admittance for position used for the bone mixing. 
  
- V1.20f23e and later also supported -GRVDH option, which can 
  assign height difference between Groove and Center bones. 
  
  If the -MXGTC option is assigned in modsetup.ini or in a command 
  line, groove-center mixer will be enabled. 
  The option -EAP can also be assigned to change the allowance for 
  mixed position error. 

    ex1) > vmdtms -MXGTC=1  (filename).vmd 
    ex2) > vmdtms -MXGTC=1 -EAP0.02 -GRVDH=0.20  (filename).vmd 
  
  where, 
   - "-MXGTC=1" meaning "enabling groove-to-center bone mixing," 
   - "-GRVDH=0.2" meaning "height difference between Groove and 
                           Center bones is 0.2" (in MMD length) 
   - "-EAP0.02" meaning "changing error admittance for position 
                to 0.02 (in unit of VMD distance coordinate). 

- GRVDH is used for correcting height differences between Groove 
  and Center bones. 
  The height is in MMD length. Usually MMD lengths are about 13.5 
  times larger that real lengths in unit of m (meter). 
  If you are using VRM models, heel height values should be 
  multiplied by 13.5 times from the lengths recorded in the VRM 
  models.   

- If GRVDH option is not assigned, 
  the default values of the GRVDH will be automatically set 
  to height difference between Groove and Center bones read from 
  PMX model. 

- Default value for -GRVDH was 0.2 until V1.20f23e, 
  and is 0.0 in V1.20f24 and later.   
  If you omit -GRVDH option in VMDTMS, the value will be assumed 
  to be 0.0. 

- If you assign -GRVDH=0, the value will be forced to be 0.0. 

- If you assign both -MXGTC and -MXGTM options at the same time, 
  the motions of Groove and Center bones are once mixed, and then 
  only the Y-component of the mixed motion is separated to Groove, 
  as it would fit to the standard way of the usage of Groove bones  
  before any other proccessing starts for Groove and Center.
  Try assigning -MXGTC=0 and -MXGTM=0 to enable this preprocess 
  function. (V1.20f24a and later, refined in V1.21d) 

- The -MXGTC option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

- The error admittance for position is set to 0.06 by default in 
  VmdTms.exe. 



<< How to enable Mother-Center mixing 
                       (new in V1.20f21, extended V1.20f23) >> 

- V1.20f21 and later supported -MXMTC option, which enables 
  mixing of Mother and Center bones, taking composite mixing of 
  time-dependent changes of rotation and position. 

- V1.20f21 and later also supported -EAP option, which can change 
  error admittance for position used for the bone mixing. 

- V1.20f23c and later also supported -CENTERH option, which can 
  change the height of the Center bone (node). 
  
  If the -MXMTC option is assigned in modsetup.ini or in a command 
  line, Mother-Center mixer will be enabled. 
  The option -EAP can also be assigned to change the allowance for 
  mixed position error. 

  
    ex1) > VmdTms -MXMTC=1  (filename).vmd 

    ex2) > VmdTms -MXMTC=1 -EAP0.02 
                       -nameLAK='arm IK_L' -nameRAK='arm IK_R' 
                       -nameLLK='leg IK_L' -nameRLK='leg IK_R' 
                       -nameLLKP='leg IKP_L' -nameRLKP='leg IKP_R' 
                       (filename).vmd 
  
    ex3) > VmdTms -MXMTC=1 -EAP0.02 -CENTERH=8.2 
                       -nameLAK='左腕ＩＫ親' -nameRAK='右腕ＩＫ親' 
                       -nameLLK='左足ＩＫ親' -nameRLK='右腕ＩＫ親'
                       (filename).vmd 
  
  where, 
   - "-MXMTC=1" meaning "enabling Mother-to-Center bone mixing," 
   - "-CENTERH=8.2" meaning "Center height is 8.2" (in MMD length) 
   - "-EAP0.02" meaning "changing error admittance for position 
                to 0.02 (in unit of VMD distance coordinate), 
   - "-nameLAK='(name)'" meaning "changing Left  Arm IK bone name
                to the assigned name," 
   - "-nameRAK='(name)'" meaning "changing Right Arm IK bone name
                to the assigned name," 
   - "-nameLLK='(name)'" meaning "changing Left  Leg IK bone name
                to the assigned name," 
   - "-nameRLK='(name)'" meaning "changing Right Leg IK bone name
                to the assigned name." 
   - "-nameLLKP='(name)'" meaning "changing Left  Leg IK Parent 
                bone name to the assigned name," 
   - "-nameRLKP='(name)'" meaning "changing Right Leg IK Parent 
                bone name to the assigned name." 

- Center height is used for correcting position differences between 
  Center and Mother bones. 
  The height is in MMD length. Usually MMD lengths are about 13.5 
  times larger that real lengths in unit of m (meter). 
  If you are using VRM models, Center height values should be 
  multiplied by 13.5 times from the lengths recorded in the VRM 
  models in VMDTMS. 

- Default value for -CENTERH is 8.403, which is Center height of 
  the famous Tda-style Miku models. 
  If you omit -CENTERH option, the Center height will be assumed 
  to be 8.403. 

- By default,  
    -nameLAKE= is set to 'arm IK_L', 
    -nameLAKJ= is set to '左腕ＩＫ',    
    -nameRAKE= is set to 'arm IK_R', 
    -nameRAKJ= is set to '右腕ＩＫ', 
    -nameLLKE= is set to 'leg IK_L', 
    -nameLLKJ= is set to '左足ＩＫ', 
    -nameRLKE= is set to 'leg IK_R', 
    -nameRLKJ= is set to '右足ＩＫ', 
    -nameLLKPE= is set to 'leg IKP_L', 
    -nameLLKPJ= is set to '左足IK親', 
    -nameRLKPE= is set to 'leg IKP_R', 
    -nameRLKPJ= is set to '右足IK親', 
  then both Japanese and English names are recognized 
  as IK bone names and can independently be set if you use 
  -nameXXXE and -nameXXXJ options. 

- The -MXMTC option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

- The error admittance for position is set to 0.06 by default in 
  VmdTms.exe. 

- note) If the Center height (-CENTERH) is not assigned the default 
  values of the Center height will be automatically set to height 
  of the Center of the target model (PMX/VRM) read from trgpose.ini 
  in VMD Retarget. 



<< How to enable shoulder-P and thumb-0 mixing  
                 (new in V1.20f, revised in V1.20f20) >> 

- V1.20f and later supported -MXSP option, which enables mixing of 
  shoulder-P bones with shoulder and arm bones taking composite 
  mixing of time-dependent changes of rotation and position. 

- V1.20f and later also supported -MXTZ options, which enables 
  mixing of thumb-zero bones with thumb-one bones, taking 
  composite mixing of time-dependent changes of rotation and 
  position. 

  If the -MXSP option is assigned in modsetup.ini or in a command 
  line, shoulde-P mixer will be enabled. 
  If the -MXTZ option is assigned in modsetup.ini or in a command 
  line, thumb-zero mixer will be enabled. 

    ex) > vmdtms -MXSP=1 -MXTZ=0.8  (filename).vmd 
  
  where, 
   - "-MXSP=1" meaning "enabling shoulder-P bone mixing," 
   - "-MXTZ=0.8" meaning "enabling thumb-0 bone 80% mixing,  
                 which rotation angles are reduced by 20% from 
                 original thumb-0 bone rotation."
                 The remaining 20% rotation will be left in 
                 the original thumb-0 bones. 
                                      (in V1.20f20 and later) 


- The -MXSP option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

   - In V1.20f20 and later, the remaining shoulder-P rotation 
     was changed to be left in the original shoulder-P bones. 
     If you assign -MXSP=0.7, then 70% of the bone rotation 
     will be mixed into shoulder and arm bones, and 30% will be 
     left remained in the shoulder-P bones. 

   - If you assign -MXSP=1.0, there is no remaining rotation,  
     then the shoulder-P bone motion will be completely deleted  
     after the mixing with shoulder and arm bones. 
     (compatible with previous versions (V1.20f17 and before))

- The -MXTZ option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

   - In V1.20f20 and later, the remaining thumb-0 rotation 
     was changed to be left in the original thumb-0 bones. 
     If you assign -MXTZ=0.8, then 80% of the bone rotation 
     will be mixed into thumb-1 bones, and 20% will be 
     left remained in the thumb-0 bones. 

   - If you assign -MXTZ=1.0, there is no remaining rotation,  
     then the thumb-0 bone motion will be completely deleted  
     after the mixing with thumb-1 bones. 
     (compatible with previous versions (V1.20f17 and before))



<< How to enable neck and upper body 2/3 motion mixing  
              (new in V1.20f16, extended in V1.20f23e, V1.21c) >> 

- V1.20f16 and later supported -MXNEK option, which enables mixing 
  of neck-bone motion with head-bone motion.  

- V1.20f16 and later also supported -MXUB2 option, which enables 
  mixing of upper body 2 (chest) bone motion with upper body 1 bone 
  motion. 
  
- V1.20f23e and later also supported -NECKDH option, which can 
  change the height difference Head and Neck bones (nodes). 
  
- V1.20f23e and later also supported -UBDH option, which can 
  assign height difference between Upper Body 2 and Upper Body bones 
  in PMX model case, and chest and spine bones in VRM model case.   
  
- V1.21c and later also supported -MXUB3 option, which enables 
  mixing of upper body 3 bone motion with upper body 2 bone motion. 
  
  If the -MXNEK option is assigned in modsetup.ini or in a command 
  line, neck motion mixer will be enabled. 
  If the -MXUB2/3 options are assigned in modsetup.ini or in a command 
  line, upper body 2/3 motion mixer will be enabled. 

    ex1) > vmdtms -MXNEK=1 -MXUB2=0  (filename).vmd 

    ex2) > vmdtms -MXNEK=1 -NECKDH=0.807  (filename).vmd 

    ex3) > vmdtms -MXUB2=1 -UBDH=1.09  (filename).vmd 
    
    ex4) > vmdtms -MXUB3=1 -MXUB2=1  (filename).vmd 
    
  where, 
   - "-MXNEK=1" meaning "enabling neck motion mixing," 
   - "-MXUB2=1" meaning "enabling upper body 2 motion mixing,"  
   - "-MXUB3=1" meaning "enabling upper body 3 motion mixing."  
   - "-NECKDH=0.807" meaning "height difference between Head  
                              and Neck is 0.807" (in MMD length) 
   - "-UBDH=1.09" meaning "height difference between Upper Body 2 
                           and Upper Body is 1.09" (in MMD length) 

- UBDH is used for correcting height differences between Upper 
  Body 2 and Upper Body bones. 
  The height is in MMD length. Usually MMD lengths are about 13.5 
  times larger that real lengths in unit of m (meter). 
  If you are using VRM models, UBDH values should be multiplied by 
  13.5 times from the lengths recorded in the VRM models. 

- Default value for -UBDH was 1.09 in V1.20f23d-23e, 
  and is 0.0 in V1.20f24 and later. 
  If you omit -UBDH option, the value will be assumed to be 0.0. 

- Default value for -NECKDH was 0.807 in V1.20f23d-23e, 
  and is 0.0 in V1.20f24 and later. 
  If you omit -NECKDH option, the value will be assumed to be 0.0. 

- The -MXNEK option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

- The -MXUB2 option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

- The -MXUB3 option is disabled by default in the "modsetup.ini" 
  files in standard MMD sets,if you are using as it is extracted. 
  The -MXUB3 option is enabled by default in the "modsetup.ini" 
  files in the sets for VRM use, if you are using as it is 
  extracted. 
  
- The -MXNEK, -MXUB2, and -MXUB3 options only support =0/=1 
  (on/off only) switching. Fractional mixing rates are not 
  supported. 



<< How to enable Leg IKP and Leg IK motion mixing  
                                          (new in V1.20f23b) >> 

- V1.20f23b supported -MXLIKP option, which enables mixing 
  of Leg IKP motion with Leg IK motion.  

    ex1) > vmdtms -MXLIKP=1 -HEELH=1.62  (filename).vmd 
    ex2) > vmdtms -MXLIKP  (filename).vmd 
  
  where, 
   - "-MXLIKP=1" meaning "enabling neck motion mixing," 
   - "-HEELH=1.62" meaning "heel height is 1.62" (in MMD length) 
   - "-MXLIKP" is treated as "-MXLIKP=1".   

- Leg IKP is the abbreviation of Leg IK parent, which motion is 
  used to control Leg IK from bottoms of the shoes, enabling more 
  accurate control of Leg IK. 

- Mixing of Leg IKP with Leg IK allows you to use the motion with 
  models without Leg IKP bones. 

- Heel height is used for correcting position differences between 
  Leg IKP and Leg IK. 
  The height is in MMD length. Usually MMD lengths are about 13.5 
  times larger that real lengths in unit of m (meter). 
  If you are using VRM models, heel height values should be 
  multiplied by 13.5 times from the lengths recorded in the VRM 
  models. (in VMDTMS)  

- The -MXLIKP option is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

- Default value for -HEELH is 1.624, which is heel height of the 
  famous Tda-style Miku models. 
  If you omit -HEELH option, heel height will be assumed to be 
  1.624. 

- You can also set -HEELH=0, which cancels heel height correction 
  in the Leg IKP mixing.  
  
- The -MXLIKP option only support =0/=1 (on/off) 
  switching. Fractional mixing rates are not supported. 



<< How to enable lowerbody-to-center mixing  
                   (new in V1.20f25, extended in V1.21d) >> 

- V1.20f25 and later supported -MXLBTC option, which enables 
  mixing of lower body and center bones, taking composite mixing of 
  time-dependent changes of rotation and position into account. 

- V1.21d and later supported -MXPLBTC option, which enables 
  mixing of only Y-rotation and XYZ-translation of lower body 
  with center, taking composite mixing of time-dependent changes 
  of rotation and position into account. 
  
  If the -MXLBTC or -MXPLBTC option is assigned in modsetup.ini 
  or in a command line, lowerbody-center mixer will be enabled. 
  (Simultaneous assignment of both -MXLBTC and -MXPLBTC options 
   are not supported.)  
  The option -EAP can also be assigned to change the allowance for 
  mixed position error. 

    ex.1) > VmdTms -MXLBTC=1 -EAP0.02 
                   -LBCTRDH=4.75 -LBCTRDZ=-0.51 (filename).vmd 
  
    ex.2) > VmdTms -MXPLBTC=1 -EAP0.02 
                   -LBCTRDH=4.75 -LBCTRDZ=-0.51 (filename).vmd 
  
  where, 
   - "-MXLBTC=1" meaning "enabling lowerbody-to-center bone mixing," 
   - "-MXPLBTC=1" meaning "enabling mixing of Y-rotation and 
                      XYZ-translation of lowerbody bone with  
                      center bone," 
   - "-LBCTRDH=4.75" meaning "height difference between Lower Body 
                       and Center bones is 4.75" (in MMD length) 
   - "-LBCTRDZ=-0.51" meaning "forward-back position difference 
                      between Lower Body and Center bones 
                      is -0.51" (in MMD length) 
                      (-0.51 means Center is behind Lower Body) 
   - "-EAP0.06" meaning "changing error admittance for position 
                to 0.06 (in unit of VMD distance coordinate). 

- LBCTRDH is used for correcting height differences between 
  Lower Body and Center bones. 
  The height is in MMD length. 

- LBCTRDZ is used for correcting position differences 
  in Z direction between Lower Body and Center bones. 
  The height is in MMD length. 
  If LBCTRDZ value is negative, i.e. <0, it means Center bone  
  is behind Lower Body bone. 
  In most of typical PMXs, LBCTRDZ values are negative.  
  
- If LBCTRDH option is not assigned, the default value 0.0 
  will be set for -LBCTRDH in VmdTms. 
  
- If LBCTRDZ option is not assigned, 
  the default values of the LBCTRDZ will be the position 
  difference in Z direction between the Lower Body and Center 
  bones of Tda-type Miku model.  
  
- If you assign -LBCTRDH=0, the value will be forced to be 0.0. 

- If you assign -LBCTRDZ=0, the value will be forced to be 0.0. 
  
- The -MXLBTC option is disabled by default in the "modsetup.ini" 
  file in the standard set, if you are using as it was extracted. 

- The -MXPLBTC option is disabled by default in the "modsetup.ini" 
  file in the standard set, if you are using as it was extracted. 

- The error admittance for position is set to 0.06 by default in 
  VmdTms.exe. 



<< How to enable reverting of lowerbody-to-center mixing  
                                           (new in V1.21f21) >> 

- V1.21f21 and later supported -REVLBTC option, which enables 
  reverting of the LowerBody-to-Center mixing, i.e., demixing of 
  lower body motion from center-bone motion (inverted converion 
  of -MXLBTC). 

  If the -REVLBTC option is assigned in modsetup.ini or in a 
  command line and LowerBody bone is unused, the demixing will 
  be enabled. 
  The -LBCTRDH and -LBCTRDZ options are valid and the same as in 
  -MXLBTC command. 

    ex1) > VmdTms -REVLBTC -LBCTRDH=4.75 -LBCTRDZ=-0.51 
                                               (filename).vmd 
      
    ex2) > VmdTms -REVLBTC=1 -EAP0.02 
                  -LBCTRDH=4.75 -LBCTRDZ=-0.51 (filename).vmd 
  
  where, 
   - "-REVLBTC=1" meaning "enabling reverting of the 
                           lowerbody-to-center motion mixing," 
   - "-REVLBTC"   meaning "-REVLBTC=1" 
   - "-LBCTRDH=4.75" meaning "height difference between Lower Body 
                       and Center bones is 4.75" (in MMD length) 
   - "-LBCTRDZ=-0.51" meaning "forward-back position difference 
                      between Lower Body and Center bones 
                      is -0.51" (in MMD length) 
                      (-0.51 means Center is behind Lower Body) 
   - "-EAP0.06" meaning "changing error admittance for position 
                to 0.06 (in unit of VMD distance coordinate). 

- LBCTRDH is used for correcting height differences between 
  Lower Body and Center bones. 
  The height is in MMD length. 

- LBCTRDZ is used for correcting position differences 
  in Z direction between Lower Body and Center bones. 
  The height is in MMD length. 
  If LBCTRDZ value is negative, i.e. <0, it means Center bone  
  is behind Lower Body bone. 
  In most of typical PMXs, LBCTRDZ values are negative.  
  
- If LBCTRDH option is not assigned, the default value 0.0 
  will be set for -LBCTRDH in VmdTms. 
  
- If LBCTRDH option is not assigned, 
  the default values of the LBCTRDH will be the height 
  difference between the Lower Body and Center bones of Tda-type 
  Miku model.  
  
- The -REVLBTC option is disabled by default in the "modsetup.ini" 
  file in the standard set, if you are using as it was extracted. 

- The error admittance for position is set to 0.06 by default in 
  VmdTms.exe. 



<< How to enable waist-center mixing  (new in V1.20f26) >> 

- V1.20f26 and later supported -MXWSTC option, which enables 
  mixing of waist and center bones, taking composite mixing of 
  time-dependent changes of rotation and position into account. 

  If the -MXWSTC option is assigned in modsetup.ini or in a command 
  line, waist-center mixer will be enabled. 
  The option -EAP can also be assigned to change the allowance for 
  mixed position error. 

    ex) > VmdTms -MXWSTC=1 -EAP0.02 
                 -WAISTDH=3.92 -WAISTDZ=0.26 (filename).vmd 
  
  where, 
   - "-MXWSTC=1" meaning "enabling waist-to-center bone mixing," 
   - "-WAISTDH=3.92" meaning "height difference between Waist 
                       and Center bones is 3.92" (in MMD length) 
   - "-WAISTDZ=0.26" meaning "forward-back position difference 
                      between Waist and Center bones 
                      is +0.26" (in MMD length) 
                      (+0.26 means Center is in ahead of Waist) 
   - "-EAP0.06" meaning "changing error admittance for position 
                to 0.06 (in unit of VMD distance coordinate). 

- WAISTDH is used for correcting height differences between 
  Waist and Center bones. 
  The height is in MMD length. 

- WAISTDZ is used for correcting position differences 
  in Z direction between Waist and Center bones. 
  The height is in MMD length. 
  If WAISTDZ value is positive, i.e. >0, it means Center bone 
  is in front of Waist bone. 
  In most of typical PMXs, WAISTDZ values are positive.  
  
- If WAISTDH option is not assigned, 
  the default values of the WAISTDH will be the height 
  difference between the Waist and Center bones of Tda-type 
  Miku model.  
  
- If WAISTDZ option is not assigned, 
  the default values of the WAISTDZ will be the position 
  difference in Z direction between the Waist and Center bones 
  of Tda-type Miku model.  
  
- If you assign -WAISTDH=0, the value will be forced to be 0.0. 

- If you assign -WAISTDZ=0, the value will be forced to be 0.0. 
  
- The -MXWSTC option is disabled by default in the "modsetup.ini" 
  file in the standard set, if you are using as it was extracted. 

- The error admittance for position is set to 0.06 by default in 
  VmdTms.exe. 



<< How to enable lK-off switching  (new in V1.20f25) >> 

- V1.20f25 and later supported -IKFZL, -IKFZLP, and -IKFZT options, 
  which force overwriting IK to "off."  

  If the -IKFZL option is assigned in modsetup.ini or in a command 
  line, it will force setting all leg-IK key frames to zero, i.e., 
  leg-IK will be disabled. 
  
  If the -IKFZLP option is assigned in modsetup.ini or in a command 
  line, it will force setting all leg-IK-parent key frames to zero, 
  i.e., leg-IK-parent will be disabled. 
  
  If the -IKFZT option is assigned in modsetup.ini or in a command 
  line, it will force setting all toe-IK key frames to zero, i.e., 
  toe-IK will be disabled. 
  
  
    ex) > VmdTms -IKFZL=1 -IKFZLP=1 -IKFZT=1 (filename).vmd 
  
  where, 
   - "-IKFZL=1" meaning "force-overwriting leg-IK to zero," 
   - "-IKFZLP=1" meaning "force-overwriting leg-IK-parent to zero," 
   - "-IKFZT=1" meaning "force-overwriting toe-IK to zero." 

- If you assign -IKFZL=0, it will cancel IK-overwriting, i.e., 
  VmdTms will not change leg-IK settings. 

- If you assign -IKFZLP=0, it will cancel IK-overwriting, i.e., 
  VmdTms will not change leg-IK-parent settings. 

- If you assign -IKFZT=0, it will cancel IK-overwriting, i.e., 
  VmdTms will not change toe-IK settings. 

- The -IKFZL, -IKFZLP, and -IKFZT options are disabled by default 
  in the "modsetup.ini" file, if you are using as it was extracted. 



<< How to use LeglK-spacing correction  (new in V1.21f20) >> 

- V1.21f20 and later supported -CLIKLW, -LEGDW, and -LEGDWR options, 
  which correct spacing of LeglK according to the leg widths of the 
  models. 

  If the -CLIKLW option is assigned in modsetup.ini or in a command 
  line, it will enable leg-IK offset correction. 
  
  By default in VmdRetarget, the -CLIKLW option enables leg-IK 
  position correction by the differences of the distances between 
  the left and right legs of the source and target models. 
  
  If the -LEGDW option is assigned in modsetup.ini or in a command 
  line, it will additionally increase the spacing between the left 
  and right LegIK.  
  You can change the amount of the LeglK spacing by the -LEGDW 
  option, if you use it with -CLIKLW option. 
  
  The -LEGDWR option is used to assign the leg width differences 
  between the source and target models for compensating the LeglK 
  spacing when the model is turning around with the dance.
  This option is usually used only when you cannot obtain the 
  correct source model or terget model. 
  If you assign -LEGDWR option manually, it will change the 
  supposed leg width differences ignoring the source and terget 
  model information.  By manually tuning -LEGDWR option value, 
  you can correctly compensate the LeglK spacing when the model is 
  turning around with the dance. 
  Usually, VmdRetarget will set -LEGDWR value autoatically. 
  In VmdTms, if you set -LEGDWR value manually, VmdTms will process 
  the motion as same as in VmdRetarget. 
 
   
    ex1) > VmdTms -CLIKLW=1  (filename).vmd 

    ex2) > VmdTms -CLIKLW=1 -LEGDW=2.4  (filename).vmd 

    ex3) > VmdTms -CLIKLW=-1 -LEGDW=2.4  (filename).vmd 
  
    ex4) > VmdIms -CLIKLW=1 -LEGWDR=1.58 -LEGDW=2.4 
                                              (filename).vmd 
  where, 
   - "-CLIKLW=1" meaning "enable correction of LegIK spacing," 
   - "-CLIKLW=-1" meaning "enable correction of LegIK spacing 
                           for both horizontal and vertical 
                           directions," 
   - "-LEGDWR=1.58" meaning "suppose the difference of the leg  
                             widths to be 1.58 (in MMD lengths)." 
   - "-LEGDW=2.4" meaning "suppose the increase of the 
                           distances between the left and right 
                           legs to be 2.4 (in MMD lengths)." 

- If you assign -LEGDWR option, it will overwrite the default value 
  set by the difference of the distances between the left and right 
  legs of the source and target models. 
  The differnces of the leg widths between the source and target 
  models are just ignored if you assign the -LEGDWR option.  

- The -LEGDW option is, a free-to-use LegIK-spacing tuning option,  
  and it just increases the distances between the left and right 
  leg-IK position.  The effect of the -LEGDW settings is constant 
  irrelevantly with the turning around of the dance. 

- You can also assign -LEGDW=-2.4 (negative values), and it will 
  reduce the Leg-IK spacing. 

- You can also assign -CLIKLW=2, and it will enable more 
  accurate correction reflecting the time-dependent position 
  of the leg top positions. 

- If the number of the LegIKP keys is larger than that of the LegIK 
  keys, the leg spacing correction will be applied to LegIKP bones 
  instead of the LegIK bones. 

- The -CLIKLW option is enabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 
  The -LEGDW option is disabled by default. 
  


<< How to fix output file name   (new in V1.21e4) >> 

- V1.21e4 and later supported -FNFIX option, which fixes output 
  file name. 

  If the -FNFIX option is assigned in modsetup.ini or in a 
  command line, it will fix the output file name and its path to 
  the same folder with VmdTms.exe 
  
    ex) > VmdTms -FNFIX=tmp1  (filename).vmd 
  
  where, 
   - "-FNFIX=tmp1" meaning "fixing output file name to [tmp1.vmd] 
                            and its save position within the same 
                            folder with VmdTms.exe." 
  
  In the file name, no extension (.vmd) is necessary. 
  (Please omit the extension (.vmd).) 
  The letters allowed to be used in the fixed file name are 
  alphabets ('A'-'Z' and 'a'-'z'), numbers ('0'-'9'), under-bar 
  ('_'), and hyphen ('-') except the top of the file name. 
  Other letters are prohibited and ignored. 

- This option is supposed to be used with command scripts (.bat 
  or .cmd). 
  
- The -FNFIX option is disabled by default in the "modsetup.ini" 
  file, if you are using it as it was extracted. 



<< How to enable re-conversion in arm-twist keep mode 
     when the VMD was detected to have the motion rotating hands 
     by 360 degrees   (new in V1.21e4) >> 

- V1.21e4 and later supported -RETRY360 option, which enables re-
  conversion of the arm motion in arm-twist keep mode, when it 
  fails converting in the full-arm correction mode.
  
  If the -RETRY360 option is assigned in modsetup.ini or in a 
  command line and the VmdTms.exe fails in full-arm correction 
  with -ATE/-WTE options, it will enable restarting the conversion 
  without -ATE/-WTE (arm-twist keep mode). 
  
    ex) > VmdTms -ATE -WTE -NN -RETRY360  (filename).vmd 
  
  where, 
   - "-RETRY360" meaning "enabling re-conversion of the motion 
                          rotating hands by more than 360 degrees." 
  
  If you assign -RETRY360 and the VMD was found to have the motion 
  that rotates the hands (palms) by more than 360 degrees during 
  the motion, VmdTms restarts the arm converion in arm-twist keep 
  mode. 
  In that mode, -ATE/-WTE/-NN options are disabled, and the twist 
  motion is integrated and separated just each between Arm and 
  ArmTwist and between Elbow and WristTwist. 
  
- In due course of the MMD motion edition, if you found the motion 
  that rotates the hands (palms) by more than 360 degrees, the 
  motion should be corrected to avoid the 360-degree rotation, 
  since the motion is unrealistic for humans. 
  This -RETRY360 option allows skipping of the correction using 
  MMD edition and proceeding to later steps with the best possible 
  result, if you do not have time to fix it. 
  
- The -RETRY360 option is enabled in some sets targeted automatic 
  conversion, and disabled in some sets targeted manual use, by 
  default, in the "modsetup.ini" files, if you are using them as 
  they are extracted. 



<< How to reset pose-estimation  (new in V1.21e6) >> 

- V1.21e6 and later supported -RESET, -RESETL, and -RESETR options, 
  which enable resetting of left/right arm pose-estimation at 
  assigned time frames. 
  
  If the -RESET/-RESETL/-RESETR options are assigned with frame 
  numbers in modsetup.ini or in a command line, VmdTms.exe will 
  reset the tracking of the arm motion and restart NN-based pose 
  estimation at the assigned frames.  
  
    ex.1) > VmdTms -ATE -WTE -NN -RESET=2100  (filename).vmd 

    ex.2) > VmdTms -ATE -WTE -NN -RESETL=1300
                                 -RESETR=1700,2500  (filename).vmd 
  
    ex.3) > VmdTms -ATE -WTE -NN 
                        -RESET=3041,6852,8937  (filename).vmd 
  
  where, 
   - "-RESET=2100"  meaning "reset pose-estimation of both arms 
                             at frame=2100," 
   - "-RESETL=1300 -RESETR=1700,2500" 
                    meaning "reset pose-estimation of 
                             left arm at frame=1300 and
                             right arm at frames=1700 and 2500," 
   - "-RESET=3041,6852,8937" 
                    meaning "reset pose-estimation of both arms 
                             at frames=3041, 6852, and 8937." 
  
- These options can be used for the VMD that have more than two 
  scenes in the one VMD, where the posing or the motion abruptly 
  changes at the scene change. 
  The time frame numbers assigned after the '=' should be the 
  start frame numbers of the new scenes. 

- The assignment of -RESET=0 is unnecessary, since the pose 
  estimation will always be reset at the start of the motion,  
  i.e., frame=0, without the -RESET option.  
  
- These options can be used in the case that the VMD has the 
  motion that rotates the hands (palms) by more than 360 degrees. 
  In that case, the frame number assigned with the RESET option 
  should be the frame at which timing you like to reset the 
  unnatural arm twisting. 
  
- No -RESET option is assigned is in the "modsetup.ini" file by 
  default, if you are using it as it is extracted. 



<< How to enable automatic reset in pose-estimation 
     when the VMD was detected to cause twisting hands by 360 
     degrees   (new in V1.21g6) >> 

- V1.21g6 and later supported -AUTORESET option, which enable 
  automatic resetting of left/right arm pose-estimation at 
  the time frames which the converting VMD was detected to cause 
  twisting hands by 360 degrees. 
  
  If the -AUTORESET option is enabled, VmdTms.exe will reset the 
  arm pose-estimation, and the embeded AI will rearrange the arm 
  pose by the AI estimation on the basis of current arm posing 
  and restarts the pose-estimaation at the reset frame time which 
  the converting VMD was detected to cause twisting hands by 360 
  degrees.  
  
    ex.1) > VmdTms -AUTORESET=1  (filename).vmd 

    ex.2) > VmdTms -AUTORESET -ATE -WTE -NN  (filename).vmd 
  
    ex.3) > VmdTms -AUTORESET=0  (filename).vmd 
  
  where, 
   - "-AUTORESET"  meaning "enable automatic reset," and same as 
                           "-AUTORESET=1", 
   - "-AUTORESET=1" meaning "enable automatic reset," 
   - "-AUTORESET=0" meaning "disable automatic reset." 
  
- "-AUTORESET=0" (disabling automatic reset) can be used for 
  manual confirming or manual editing (correction) of the motion, 
  excluding the AI correction and clarifying the time position 
  at which 360-degree twisting is caused. 
  
- In VmdTms.exe, -AUTORESET is enabled by default, even if the 
  -AUTORESET option is not assigned in the "modsetup.ini" file or 
  in a command line. 
 


<< Command Macro Script  (new in V1.20f8, extended in  
       V1.21f4, V1.21f6, V1.21f7, V1.21f10, V1.21f12, V1.21f15, 
       V1.21g, V1.21g4, and V1.21g5) >> 

- VMDTMS supported text command macro script from V1.20f8. 

- If "macro.ini" file exist in the same folder with VmdTms.exe, 
  the macro will be automatically executed.   

- The following commands are available in macro.ini. 
  
    b"(bone-name)"+= <x y z>  --- adds assigned XYZ values to the 
                                   assigned bone position 
    b"(bone-name)"+= (X angle)  --- rotates the assigned bone 
                                     by assigned X angle (deg) 
    b"(bone-name)"+= (Y angle)  --- rotates the assigned bone 
                                     by assigned Y angle (deg) 
    b"(bone-name)"+= (Z angle)  --- rotates the assigned bone 
                                     by assigned Z angle (deg) 
    
    b"(bone-name)" = b"(parent-bone)" + b"(child-bone)" 
                                --- mixes (integrates) the assigned 
                                     parent-bone and child-bone motion  
                                                      (new V1.21f12)
    b"(bone-name)".x *= value   --- multiplies x-coordinate of the bone 
                                    offsets by the assigned value 
    b"(bone-name)".y *= value   --- multiplies y-coordinate of the bone 
                                    offsets by the assigned value 
    b"(bone-name)".z *= value   --- multiplies z-coordinate of the bone 
                                    offsets by the assigned value 
    b"(bone-name)".xz *= value   --- multiplies xz-coordinate of the bone 
                                      offsets by the assigned value 
    b"(bone-name)".xyz *= value   --- multiplies xyz-coordinate of the bone 
                                      offsets by the assigned value 
    b"(bone-name)".rot *= value   --- multiplies the bone rotation angle 
                                      by the assigned value 
    b"(bone-name)".x += value   --- add the assigned value to 
                                    x-coordinate of the bone offset 
    b"(bone-name)".y += value   --- add the assigned value to 
                                    y-coordinate of the bone offset 
    b"(bone-name)".z += value   --- add the assigned value to 
                                    z-coordinate of the bone offset 
                                                      (new V1.21g)
    
    m"(morph-name)" = m"(morph-name1)" + m"(morph-name2)" 
                                --- mixes the assigned morph values 
                                    and creates a new morph   
                                                      (new V1.21g4) 
    m"(morph-name)" += value   --- adds an assigned value to the 
                                   series of the morph values   
    m"(morph-name)" -= value   --- subtracts an assigned value from 
                                   the series of the morph values
    m"(morph-name)" *= value   --- multiplies the series of the morph
                                   values by the assigned value   
    m"(morph-name)" /= value   --- divides the series of the morph
                                   values by the assigned value   
    m"(morph-name)" ~= value   --- limits the series of the morph 
                                   values by the assigned maximum value 
    m"(morph-name)" _= value   --- limits the series of the morph 
                                   values by the assigned minimum value 
    
    cam += <x y z>            --- adds assigned XYZ values to the 
                                   camera position 
    cam += (X angle)          --- adds the assigned rotation angle  
                                   to the camera X angle (deg) 
    cam += (Y angle)          --- adds the assigned rotation angle  
                                   to the camera Y angle (deg) 
    cam += (Z angle)          --- adds the assigned rotation angle  
                                   to the camera Z angle (deg) 
    cam *= value              --- multiplies the series of the 
                                   camera position coordinates and 
                                   distance values 
                                   (same with  cam.pos *= value ) 
                                                (new in V1.20f10) 
    cam.x *= value            --- multiplies x-coordinate of the  
                                  camera offsets by the assigned value 
    cam.y *= value            --- multiplies y-coordinate of the  
                                  camera offsets by the assigned value 
    cam.z *= value            --- multiplies z-coordinate of the  
                                  camera offsets by the assigned value 
    cam.xz *= value           --- multiplies xz-coordinate of the  
                                  camera offsets by the assigned value 
    cam.xyz *= value          --- multiplies xyz-coordinate of the  
                                  camera offsets by the assigned value 
    cam.dist *= value         --- multiplies distance of the camera 
                                  by the assigned value 
    cam.va *= value           --- multiplies camera viewing angle   
                                  by the assigned value 
    cam.rx *= value           --- multiplies camera rotation angle X  
                                  by the assigned value 
    cam.ry *= value           --- multiplies camera rotation angle Y  
                                  by the assigned value 
    cam.rz *= value           --- multiplies camera rotation angle Z  
                                  by the assigned value 
    cam.x += value            --- adds the assigned value to  
                                  x-coordinate of the camera offset 
    cam.y += value            --- adds the assigned value to  
                                  x-coordinate of the camera offset 
    cam.z += value            --- adds the assigned value to  
                                  x-coordinate of the camera offset 
    cam.dist += value         --- adds the assigned value to 
                                  the distance of the camera 
    cam.va += value           --- adds the assigned value to 
                                  the camera viewing angle   
    cam.rx += value           --- adds the assigned value to  
                                  camera rotation angle X 
    cam.ry += value           --- adds the assigned value to  
                                  camera rotation angle Y 
    cam.rz += value           --- adds the assigned value to  
                                  camera rotation angle Z 
                                                      (new V1.21g)
    
    light += <x y z>          --- adds assigned XYZ values to the 
                                   light position 
    light += (X angle)        --- rotates the light around (0 0 0) 
                                   origin by assigned X angle (deg) 
    light += (Y angle)        --- rotates the light around (0 0 0) 
                                   origin by assigned Y angle (deg) 
    light += (Z angle)        --- rotates the light around (0 0 0) 
                                   origin by assigned Z angle (deg) 
                                                (new in V1.20f10) 
    light.x *= value          --- multiplies x-coordinate of the  
                                  light position by the assigned value 
    light.y *= value          --- multiplies y-coordinate of the  
                                  light position by the assigned value 
    light.z *= value          --- multiplies z-coordinate of the  
                                  light position by the assigned value 
    light.xyz *= value        --- multiplies xyz-coordinate of the  
                                  light position by the assigned value 
    light.rgb *= value        --- multiplies light RGB values  
                                  by the assigned value  
    light.r *= value          --- multiplies light R values  
                                  by the assigned value  
    light.g *= value          --- multiplies light G values  
                                  by the assigned value  
    light.b *= value          --- multiplies light B values  
                                  by the assigned value  
    light.x += value          --- adds the assigned value to 
                                  x-coordinate of the light position  
    light.y += value          --- adds the assigned value to 
                                  y-coordinate of the light position  
    light.z += value          --- adds the assigned value to 
                                  z-coordinate of the light position  
    light.r += value          --- adds the assigned value to 
                                  the light R values 
    light.g += value          --- adds the assigned value to 
                                  the light G values 
    light.b += value          --- adds the assigned value to 
                                  the light B values 
                                                      (new V1.21g)
    
    ren b"(source-bone-name)"  b"(new-bone-name)" 
                              --- renames the series of the bone keys 
                                   to new bone names   (new V1.21f4)
    ren m"(source-morph-name)" m"(new-morph-name)" 
                              --- renames the series of the morph keys 
                                   to new morph names   (new V1.20f9)
    copy b"(source-bone-name)"  b"(new-bone-name)" 
                              --- copies the series of the bone keys 
                                   with different bone names 
                                                       (new V1.21f4)
    copy m"(source-morph-name)" m"(new-morph-name)" 
                              --- copies the series of the morph values 
                                   with different morph names  
    
    inskey b"(bone-name)"= <x y z> (qx qy qz qw) [Lcx Lcy Rcx Rcy] 
                                                     to (frame-time)  
    inskey b"(bone-name)"= <x y z> (X angle) (Y angle) (Z angle) 
                                   [Lcx Lcy Rcx Rcy]  to (frame-time)  
                              --- makes a new bone key with an assigned 
                                   name, translation, rotation, and 
                                   interpolation curves to an assigned 
                                   frame time 
                                       (new V1.21f4, extended V1.21g3) 
    inskey m"(morph-name)"=(newvalue) to (frame-time)  
                              --- makes a new morph key with an assigned 
                                   name and assigned value to an  
                                   assigned frame time  (new V1.20f9) 

    del b"(bone-name)"        --- deletes the series of the bone keys 
                                                       (new V1.21f4) 
    del ALLB                  --- deletes the series of all bone keys 
                                                       (new V1.21f12) 
    del m"(morph-name)"       --- deletes the series of the morph keys 
    
    del ALLM                  --- deletes the series of all morph keys 
                                                       (new V1.21f12) 
    del cam                   --- deletes the series of the camera keys 
                                                       (new V1.21f10) 
    del light                 --- deletes the series of the light keys 
                                                       (new V1.21f10) 
    del shadow                --- deletes the series of the self-shadow 
                                    keys               (new V1.21f12) 
    del showik                --- deletes the series of the 
                                    show-and-IK keys   (new V1.21f12) 
    
    mirrorX b"(bone-name)"    --- inverts the motion of the assigned 
                                   bone along the X direction 
    mirrorX ALLB              --- inverts the motion of all the bones 
                                   in a VMD along the X direction 
    mirrorX cam               --- inverts the camera motion 
                                   along the X direction 
                                                       (new V1.21f10) 
    mirrorX light             --- inverts the light position 
                                   along the X direction 
                                                       (new V1.21f10) 
    
    timeshift  value         --- time-shifts all the keys (bone, 
                                   morph, camera, light, self-shadow, 
                                   and IK keys) by the assigned value 
                                   (assigned frame numbers 
                                    (-:forward)(+:backward)) 
                                                       (new V1.21f10) 
    
    timestretch x value      --- time-stretches all the keys (bone, 
                                   morph, camera, light, self-shadow, 
                                   and IK keys) by the assigned times 
                                   (value= 0.0-100.0) 
                                                       (new V1.21f15) 
    timestretch from __ to __ fitto __ 
                              --- time-stretches all the keys (bone, 
                                   morph, camera, light, self-shadow, 
                                   and IK keys) 
                                   between 'from' and 'to' 
                                   so as to fit them into the range 
                                   between 'from' and 'fitto' 
                                                       (new V1.21f15) 
                                   
    // (comment)              --- any text letters after '//' will be 
                                  ignored until the line end 
    type b"(bone-name)"       --- prints information of the assigned 
                                  bone keys 
    type ALLB                 --- prints information of all bone keys 
                                                       (new V1.21f12)
    type m"(morph-name)"      --- prints information of the assigned 
                                  morph keys 
    type ALLM                 --- prints information of all morph keys 
                                                       (new V1.21f12)
    setmodelname "(modelname)" 
                              --- set new model name in converted  
                                  VMD file             (new V1.21f16) 
  
    
    if (cond):        --- execute following command  
                            only if the assigned (cond) condition 
                            is satisfied  
    ifnot (cond):     --- execute following command  
                            only if the assigned (cond) condition 
                            is NOT satisfied  
      -- 
      if    VMDFILENAME="(vmd-file-name)": 
      ifnot VMDFILENAME="(vmd-file-name)": 
          -- when .vmd file name corresponds to the assigned file name 
      if    VMDMODELNAME="(model-name-in-vmd)": 
      ifnot VMDMODELNAME="(model-name-in-vmd)": 
          -- when the model name recorded in the .vmd file 
             corresponds to the assigned model name 
      if    SRCMODELNAME="(learned-model-name)": 
      ifnot SRCMODELNAME="(learned-model-name)": 
          -- when the model name learned for the source model 
             corresponds to the assigned model name 
      if    TRGMODELNAME="(learned-model-name)": 
      ifnot TRGMODELNAME="(learned-model-name)": 
          -- when the model name learned for the target model 
             corresponds to the assigned model name 
      if    SRCMODELTYPE="PMX": 
      if    SRCMODELTYPE="VRM": 
      if    SRCMODELTYPE="VMD": 
      ifnot SRCMODELTYPE="PMX": 
      ifnot SRCMODELTYPE="VRM": 
      ifnot SRCMODELTYPE="VMD": 
          -- when the model file format type (PMX/VRM/VMD) 
             of the source model 
             corresponds to the assigned model type 
      if    TRGMODELTYPE="PMX": 
      if    TRGMODELTYPE="VRM": 
      ifnot TRGMODELTYPE="PMX": 
      ifnot TRGMODELTYPE="VRM": 
          -- when the model file format type (PMX/VRM) 
             of the target model 
             corresponds to the assigned model type 
      if    EXIST b"(bone-name)": 
      ifnot EXIST b"(bone-name)": 
          -- when bone data with the assigned name exist in .vmd 
      if    EXIST m"(morph-name)": 
      ifnot EXIST m"(morph-name)": 
          -- when morph data with the assigned name exist in .vmd 
      if    USED b"(bone-name)": 
      ifnot USED b"(bone-name)": 
          -- when bone data with the assigned name actually used 
      if    USED m"(morph-name)": 
      ifnot USED m"(morph-name)": 
          -- when morph data with the assigned name actually used 
      -- 
    "if"/"ifnot" prefixes can be nested as 
      if SRCMODELTYPE="PMX": if TRGMODELTYPE="VRM": ... 
    "vmd-file-name", "model-name-in-vmd", and "learned-model-name" 
      can include wild cards (?/*). 
   
  
  The "b" means the following letters are the bone name. 
  The "m" means the following letters are the morph name. 
  The "ALLB" means all the bones. 
  The "ALLM" means all the morphs. 
  The "cam" means the series of the camera keys. 
  The "light" means the series of the light keys. 
  The "shadow" means the series of the self-shadow keys. 
  The "showik" means the series of the show-and-IK keys. 
  
  If you attach "from (frame)" and "to (frame)" after those commands, 
  the effects of those commands will be limited to the assigned frame 
  time range. 
  
  Spaces are available and properly skipped between each morph name 
  and operator ("+=","-=", etc.), and between each operator and value 
  number. 
  
  Japanese bone names are recommended to be written in UTF-8 or 
  Shift-JIS (known as SJIS). 
  
  The interpolation curves in "inskey" command can be assigned 
  separately each for X,Y,Z, and R, as 
     [X Lcx Lcy Rcx Rcy]   [Y Lcx Lcy Rcx Rcy] 
     [Z Lcx Lcy Rcx Rcy]   [R Lcx Lcy Rcx Rcy], 
  instead of 
     [Lcx Lcy Rcx Rcy]. 
  
  Any assignment in "inskey" command, i.e., 
     <x y z> (qx qy qz qw) [Lcx Lcy Rcx Rcy]
  can be omitted. 
  (If those assignments are omitted, default values (<0 0 0>, 
   (0 0 0 1), [20 20 107 107]) are supposed. ) 



<< How to rescale XYZ-position and shift Center bone position 
                                             (new in V1.20f10) >> 

- You can rescale XYZ-position of all bones, if you assign 
  "-ALLKX", "-ALLKY", and "-ALLKZ" options in modsetup.ini. 

    "-ALLKX=(value)" - multiplies X-position of all bones 
                       by an assigned value 
    "-ALLKY=(value)" - multiplies Y-position of all bones 
                       by an assigned value 
    "-ALLKZ=(value)" - multiplies Z-position of all bones 
                       by an assigned value 

  The values can be ranged from 0.0 to 10.0. 
  By default, all the values are set to 1.0.  


- You can shift (transpose) XYZ-position of Center bone, if you 
  assign "-ADDCX", "-ADDCY", and "-ADDCZ" options in modsetup.ini. 

    "-ADDCX=(value)" - adds the assigned value to X-position of 
                       Center bone 
    "-ADDCY=(value)" - adds the assigned value to Y-position of 
                       Center bone 
    "-ADDCZ=(value)" - adds the assigned value to Z-position of 
                       Center bone 

  By default, all the values are set to 0.0.  



<< How to enable Upper Body 2 bone renaming  (new in V1.20f10) >> 

- You can rename different types of "Upper Body 2" name to 
  standard name, if you assign "-RENUB2" option in modsetup.ini. 

    "-RENUB2=0" - no conversion (default) 
    "-RENUB2=1" - enables conversion of Upper Body 2 name 
                  to the standard Upper Body 2 name in MMD 
                  ("上半身2" in Japanese Codes) 
    "-RENUB2=2" - enables conversion of Upper Body 2 name 
                  to non-standard Upper Body 2 name in MMD  
                  ("上半身２" in Japanese Codes) 



<< Setup files for VMDTMS >> 

  These files are the setup files of the VMDTMS, which may 
  automatically or manually be created in the folder of 
  the VMDTMS.exe file. 
  
  "vmdsetup.ini"  -- for recording learned model bone angles  
  "angsetup.ini"  -- for recording or setting up angle accuracy 
  "modsetup.ini"  -- for recording or setting up conversion modes 
  "timsetup.ini"  -- for recording or setting up time frame range  


<< Supported OS versions >> 

  OS: Windows 8, 8.1, 10, and 11  (x32, x64) 
 　　　(also available in UTF-8 mode on Windows 10/11)
  RAM: 0.4 GB or more 

- This tool set is a Windows-95-compatible software. 
  By the default, the OS launches the VMDTMS in ANSI compatible 
  mode and does not support Unicode specific characters in file/folder 
  names (including parent folders). 
  The supported character codes in the ANSI mode are typically 
  Multi-byte character codes (famous as DBCS or SHIFT-JIS, etc.).   
  If you encountered an error executing this tool, please 
  remove Unicode-specific characters in file/folder names, or 
  move all related files directly onto the Desktop.
   
  This tool set also supports UTF-8 console mode (the mode using 
  "UTF-8 for worldwide language support", which can be enabled in 
  Region Settings in Settings menu) on Windows 10. 
  You can also use UTF-8 console mode, if you encountered with 
  character code problems. 

- Norton Sonar (by NortonLifeLook Inc.(formerly Symantec)) 
  has been found to detect .exe files of this software as a "unknown 
  executable file" and automatically delete them, even if the executable 
  files are free from viruses (not infected). 
  In that case, check and re-scan the executable files (VMDTMS.EXE, 
  etc.) again with the manual scan in the Norton. If the result of the 
  re-scan shows "no infection" and clarified it to be clean from viruses, 
  please "Recover" and "Exclude" the VMDTMS.exe (or learningposePMX.exe) 
  from the scan in the "Process" menu in the Norton. 


<< Copyrights and conditions for use (legal notice) >> 

  The author (F.Issiki) holds overall copyrights of this tool. 
  This tool set (VMDTMS V1.21 and learningposePMX V1.12) is freeware.  
  This software is provided 'as-is', without any express or implied 
  warranty.  In no event will the authors be held liable for any damage 
  arising from the use of this software or inability for using the program. 
  
  We regard "defining the relation between inputs and outputs" as a 
  program design. 
  Copying "program design" using AI-learning is a copyright infringement, 
  since it is highly possible to make an almost complete copy of the 
  function processing inputs to the outputs using AI-learning of multiples 
  of the inputs and the output results of this software. 
  We prohibit AI-learning of inputs and outputs of this software 
  and making a copied function in some software and/or hardware 
  without our documented permission. 
  
  (We have obsoleted the additional terms for corporate use or enterprise 
   use in V1.21d-1.21g4 for voluntary cooperation in checking the 
   appropriate processing of the VMD motion.) 
  


<< VMDTMS Version history >> 

 V1.04a   first released version  
 V1.04c   No-dialogue ("-ND") option bug fixed. (for use with command scripts) 
 V1.05a   Learning model arm pose supported. ("-R" option) 
 V1.05c   Model name processing bug fixed (when length is of full 20 characters 
          without kanji-code termination.) 
 V1.06    Auto key frame insertion supported.  
 V1.07a   Auto interpolation Bezier curve tuning supported.  
 V1.07b   Bug fix: conversion of last key frame in VMD was missed. => Fixed. 
 V1.08a   Improved for fast and accurate auto curve fitting. 
          Pose-learning tool was separated to independent .exe file (named 
          learningpose.exe). 
 V1.08a2  Bug fix: conversion of continuous key frames with the same pose 
                   was missed. => Fixed. 
 V1.08b1  Improved for conversion speed. 
          Attached document (this readme) corrected.  
 V1.09alpha1  Auto key frame insertion test supported for stabilizing 
              converted twist motion with the option -TA.  
 V1.09alpha2  Auto key frame insertion test supported for stabilizing 
              converted twist motion with the options -TR, -SA, and -SR. 
 V1.09alpha3  Auto key frame insertion test extended for stabilizing 
              converted twist motion, supposing -180<x<180 limited twisting. 
 V1.09alpha4  Bug fix: failure in auto key frame insertion, when a rotation 
              quartenion between any two key frames is expressed in negative 
              quartenion, was corrected. 
 V1.09alpha5  Extended to support partial conversion of left-arm, left-hand, 
              right-arm, and/or right-hand motion data. 
 V1.09alpha6  Twist-motion mixing supported for re-conversion of VMD files  
              with left-arm twist, left-hand twist, right-arm twist, and 
              right-hand twist bone key-frame data. 
 V1.09alpha10 Bug fix: failure in calculating motion between original and 
              inserted key frames due to the skipped calculation. 
              => Fixed. 
 V1.10        Partial conversion of left arm, left elbow, right arm, and right 
              elbow supported using options -LA, -LH, -RA, and -RH.  
              Modified to support assignment of twist separating ratio (which 
              was fixed in V1.08 and before) with the options -kLA, -kLH, -kRA, 
              and -kRH. 
              VmdMix.exe newly attached in the set. 
 V1.11alpha1  UTF-8 console mode on Windows 10 supported.  
 V1.11alpha2  Wrist-to-elbow (WTE) correction supported.  
 V1.11alpha3  Bug fix: failure in estimating auto-keyframe insertion for 
                       motion mixing in a limited case.  => Fixed. 
 V1.14alpha1  Arm-to-elbow (ATE) correction supported. 
 V1.14alpha2  Accuracy of Bezier-curve tuning and auto-key-insertion 
              improved. 
 V1.14alpha3  Improvement in the Arm-to-elbow (ATE) correction. 
 V1.14alpha4  Cleaned up the debug information display in alpha3. 
 V1.14alpha5  Improvement in stability of the Arm-to-elbow (ATE) 
              correction. 
 V1.14alpha6  Improvement in stability for T-pose model motion. 
 V1.14alpha7  Improvement in stability for strongly twisted motions. 
 V1.14alpha8  Improvement in stability in Bezier-curve fitting. 
 V1.15    Safely extended range of movement for arms using ATE correction. 
          Elbow-hinge-axis angle (-EHA) option newly supported. 
 V1.15a   Pose estimation algorithm improved for strongly twisted motions. 
 V1.15b   Dialog message fixed for noticing existence of non-zero rotation 
          at 0 frame time for left-arm, left-hand, right-arm, and right-
          hand twisting bones. 
 V1.15c   Option read-in for -EHA in angsetup.ini extended for description 
          like "-EHA=15" as often described in modsetup.ini. 
 V1.15e   Pose estimation algorithm improved. 
 V1.15f   Supported English bone names: 
            "arm_L"         for left arm, 
            "arm_R"         for right arm, 
            "arm twist_L"   for left arm twist, 
            "arm twist_R"   for right arm twist, 
            "elbow_L"       for left elbow, 
            "elbow_R"       for right elbow, 
            "wrist twist_L" for left hand twist, 
            "wrist twist_R" for right hand twist, 
            "wrist_L"       for left wrist, 
            "wrist_R"       for right wrist. 
          Bug Fix: learningposeVMD.exe fails in learning arm angle from 
                   VMD files, if the VMD files were created using MMD 
                   with the arms and palms twisted (by 45 degrees) 
                   to the back side of the human model. 
                   => Corrected.  
 V1.15g   Option supported for assigning English bone names. 
          The bone names assigned by these options are recognized samely as 
          the Japanese bone names such as "左腕", "左腕捩", etc.  
            -nameLA='(name for left arm)'           // default 'arm_L' 
            -nameRA='(name for right arm)'          // default 'arm_R' 
            -nameLAT='(name for left arm twist)'    // default 'arm twist_L'   
            -nameRAT='(name for right arm twist)'   // default 'arm twist_R'  
            -nameLE='(name for left elbow)'         // default 'elbow_L'       
            -nameRE='(name for right elbow)'        // default 'elbow_R'  
            -nameLWT='(name for left wrist twist)'  // default 'wrist twist_L' 
            -nameRWT='(name for right wrist twist)' // default 'wrist twist_R'  
            -nameLW='(name for left wrist)'         // default 'wrist_L' 
            -nameRW='(name for right wrist)'        // default 'wrist_R' 
           (supported in both modsetup.ini and commandline prompt.) 
           (In commandline prompt, " " are required for bone names with spaces; 
             e.g. > VmdTms "-nameLAT='arm twist_L'" (cnvsrc).vmd    ) 
           Those options are available in "modsetup.ini". 
 V1.16alpha1  Long sleeve conversion (-SLV1)(sleeve type 1) supported. 
 V1.16alpha2  Long sleeve conversion (-SLV2)(sleeve type 2) supported. 
              Pose estimation improved for more reliable conversion. 
 V1.16alpha3  Speed and accuracy of Bezier-curve tuning improved.  
 V1.17     Supported error report display in case abnormal arm motion 
           detected. 
 V1.18alpha1  Supported neural-network-based pose estimation. 
 V1.18alpha2  Supported -RMX (post-process remixing) options. 
 V1.20     Formally supported -RMX (post-process remixing) function. 
           Bug fix: Unlocking of pose-tracking due to completely same 
                    arm-twist bone vector and wrist-twist bone vector 
                    appeared in V1.15- was fixed. 
           Bug fix: Incorrect conversion of elbow bones randomly happened 
                    in V1.16alpha2- was fixed. 
 V1.20a    Fixed result messages for converted motion detected to be 
           rotating hands by 360 degrees. 
 V1.20e    Supported -MXGTC and -EAP options for mixing groove bone to 
           center bone, and setting up the position error admittance 
           for the mixing. 
 V1.20f    Supported -MXSP and -MZTZ options for mixing shoulder-P and  
           thumb-zero bones. 
 V1.20f2   Conversion bug with multiple-file drop fixed. 
 V1.20f8   Supported command macro script "macro.ini". 
 V1.20f9   Supported ren and inskey commands for macro script. 
 V1.20f10  Supported 
           -ALLKX  -ALLKY  -ALLKZ 
           -ADDCX  -ADDCY  -ADDCZ 
           -RENUB2  options.  
 V1.20f11  Dialogue messages revised.  
 V1.20f12  Bug fix: bugs in converted file name diplay in dialogue 
                    messages were fixed.  
 V1.20f16  Supported -MXNEK -MXUB2 options (for VRM 1.0 and later). 
 V1.20f18  Supported fractional mixing rates for -MXTZ option. 
 V1.20f20  Revised partial thumb-0 mixing with thumb-1, leaving 
           the rest remained in original thumb-0 bones. 
           Revised partial shoulder-P mixing with shoulders and arms, 
           leaving the rest remained in original shoulder-P bones. 
 V1.20f21  Supported -nameLAK -nameRAK -nameLLK -nameRLK and -MXMTC 
           options. 
           Revised English message display. 
 V1.20f22  Provisional measures added for avoiding Windows 11 Power 
           Shell bugs about console-log display (for versions 22H2 
           build 22621 and later). 
 V1.20f23  Supported mixing of Mother bone motion with Center bone 
           motion considering Left/Right Leg IK Parent bone. 
           Supported -nameLLKP -nameRLKP options. 
 V1.20f23a Bug fix: conversion failed when more than two VMD files were 
           dropped and converted. => fixed.   
 V1.20f23b Supported mixing of Leg IKP motion with Leg IK motion. 
           Supported -MXLIKP anf -HEELH options.  
 V1.20f23c Accrate mixing of Mother and Center bones considering the 
           height of the Center bone supported.  
           Supported -CENTERH option. 
           Default value of -EAP was changed to 0.06. 
           Robustness for conversion improved in bone motion mixing. 
 V1.20f23d Bug fix: mixing of Leg IKP and Leg IK motion failed when 
           -MXLIKP option assigned in V1.20f23c. => Fixed. 
 V1.20f23e Accrate mixing of Groove and Center bones supported 
           considering the height difference of those two bones.  
           Supported -GRVDH option. 
           Accrate mixing of Upper Body 2 and Upper Body bones supported
           considering the height difference of those two bones.  
           Supported -UBDH option. 
 V1.20f24  Dialog-box Selection of Upper Body 2 (normal) and (ext.code) 
           bones supported to enable deleting one of them.   
           Accrate mixing of Head and Neck bones supported 
           considering the height difference of those two bones.  
           Supported -NECKDH option. 
 V1.20f24a Dialog box message display supported when VMDTMS failed in 
           opening a VMD file for warning character code problem 
           on Windows OS. 
           Groove-Center remixing and Y-direction motion extraction 
           supported in case both -MXGTC and -MXGTM options assigned. 
 V1.20f25  Mixing of Lower Body and Center bones supported. 
           Switching (off) of Leg-IK, Leg-IK-parent, and Toe-IK supported. 
           Supported -MXLBTC, -LBCTRDH, -LBCTRDZ, -IKFZL, -IKFZLP, and 
           -IKFZT options. 
 V1.20f26  Mixing of Waist and Center bones supported. 
           Supported -MXWSTC, -WAISTDH, and -WAISTDZ options. 
           Bug Fix: waist bone data were wrongly deleted in some cases 
           in V1.20f25 when lower body mixing was enabled. => Fixed. 
 V1.20f27  File name display removed in the dialog messages for avoiding  
           character code problems in UTF-8 mode on Windows OS (10/11) 
           sometimes supposing ANSI message letters for the dialog. 
 V1.21     Supported UTF-16 file path recognition (automatic switching 
           of ANSI, UTF-8, and UTF-16 code systems).  
           Recognition of non-zero IK bone keys improved. 
           learningposeVMD improved in detecting arm angles. 
 V1.21a    Auto-numbering supported to avoid output file overwriting. 
           (-cnv.vmd => -cnv(1).vmd, -cnv(2).vmd, etc.) 
           Supported VMDs with XYZ-position shift in LowerBody and 
           UpperBody bones. 
           Warning messages shortened in the case that non-zero 
           XYZ-position shifts are detected in non-IK bones. 
           Bug fix: -mix.vmd file name display failed in mixing mode 
                    in English in UTF-16 mode. => fixed.   
 V1.21b    Bug fix: the arm/shoulder angles of the converted VMDs 
                    differed from correct angles in shoulder-P mixing 
                    using -MXSP option. => Fixed. 
 V1.21c    Mixing of UpperBody3 bone with UpperBody2 bone supported. 
           Supported -MXUB3 option. 
           Bug fix in converting VMDs without 0-fram keys. 
 V1.21d    Groove-to-Center mixing improved for accurate conversion.   
           Lowerbody-to-Center mixing supported partial mixing 
           of Y-rotation and XYZ-translation. 
           Supported -MXPLBTC option.  
           Bug fix: conversion was force aborted when no arm bones was 
           assigned for conversion even if various bone-motion mixing 
           requested. => Fixed. 
           Windows code signing supported. 
           Additional terms are added to the terms of use for company 
           and/or enterprise use of this tool set. 
 V1.21e    Bug fix: VmdTms failed in starting in the folders that have 
           UTF-specific letters in the folder names. 
           => Fixed. 
 V1.21e4   Supported -RETRY360 and -FNFIX and options. 
 V1.21e6   Supported -RESET, -RESETL, and -RESETR options. 
 V1.21e7   Bug fix: the conversion with the -MXPLBTC option failed 
           for general VMD motion except for full-captured motion. 
           => Fixed. 
           Accuracy improved in the auto-key insertion (-AI) for all 
           bones with XYZ-translation. 
 V1.21f    Display messages after the conversion revised.  
 V1.21f2   Revised to support conversion changing IK settings without 
           converting any bone. 
 V1.21f3   Bug fix: VmdTms failed in reading setup files in the folders 
           that have UTF-specific letters in the folder names. 
           => Fixed. 
           Bug fix: VmdTms failed in reading macro.ini that have a vacant 
           line in the text.  
           => Fixed. 
 V1.21f4   Supported 
           del b"(bone-name)", 
           ren b"(old-bone-name)" b"(new-bone-name)", 
           copy b"(src-bone-name)" b"(new-bone-name)", and 
           inskey b"(bonename)" 
           commands in macro.ini script.   
           Bug fix: inskey m"(morph-name)" command failed inserting 
           a new morph key when the morph keys of the same name had 
           already existed in the VMD. 
           => Fixed. 
 V1.21f5   Refined -MXGTM option detection. 
           Error messages revised. (ConversionAborted) 
 V1.21f6   Supported 
           b"(bone-name)" += ..., 
           type b"(bone-name)", and  
           type m"(morph-name)" 
           commands in macro.ini script. 
 V1.21f7   Supported 
           mirrorX b"(bone-name)", and 
           mirrorXALLB 
           commands in macro.ini script. 
           Revised display messages for 360-degree arm twisting. 
 V1.21f8   Bug fix: Center bone motion has been canceled in the 
           conversion for PMX models. (V1.21d-1.21f7) => Fixed.  
 V1.21f10  Fastened and simplfied the process. 
           Supported 
            mirrorX cam 
            mirrorX light 
            del cam 
            del light 
            cam *= (val) 
            cam += <x y z> (X )(Y )(Z ) 
            light += <x y z> (X )(Y )(Z )  
            timeshift (val) 
           commands in macro.ini script.   
 V1.21f11  Bug fix in console messages for 360-degree arm twisting. 
           Bug fix in LeftLeg/RightLeg mixing in combination with 
           the use of the delete command in macro.ini. 
 V1.21f12  Supported 
            del shadow 
            del showik 
            del ALLB 
            del ALLM 
            type ALLB 
            type ALLM 
           and two-bone mixing commands in macro.ini. 
           Supported plural VMD-file mixing using AllVMDMix.exe, 
           which was newly attached. 
           Bug fix: Start frames of the 360-degree arm twisting had 
           been displayed incorrectly in V1.21f7-f11. => Fixed.  
 V1.21f14  Revised AllVmdMix.exe so that the converted VMD inherits 
           the model name of the main bone-motion VMD.    
           Bug fix in type/del commands for correct frame-time range 
           processing.  
 V1.21f15  Supported timestretch command in macro.ini. 
           Supported camera motion conversion. 
           Improved the processing for damaged VMD data. 
           Some display messages revides. 
 V1.21f16  Supported setmodelname command in macro.ini. 
           Improved in processing PMXs/VMDs with missing semi-standard 
           bones. 
 V1.21f17  Bug fix: macro.ini could not process more than 32768 bone keys 
                    in some commands in V1.21f8-V1.21f16. => fixed. 
 V1.21f18  Improved in conversion speed (x1.2 times). 
 V1.21f20  Supported LegIK spacing correction according to the model leg 
           widths (-CLIKLW and -LEGDW options). 
           Optimized file recording properties for Windows 11. 
 V1.21f21  Supported reverting conversion of the -MXLBTC mixing. 
           (-REVLBTC option) 
           Alias assignments of bone names except for IK-bones are obsoleted 
           (-nameCC, -nameC, -nameGV, -nameLAT, -nameLA, -nameLB, -nameLE, 
           -nameLF, -nameLHT, -nameLLL, -nameLSP, -nameLS, -nameLT0, -nameLT1, 
           -nameLT2, -nameLUL, -nameLWT, -nameLW, -nameMT, -nameRAT, -nameRA, 
           -nameRE, -nameRF, -nameRHT, -nameRLL, -nameRSP, -nameRS, -nameRT0, 
           -nameRT1, -nameRT2, -nameRUL, -nameRWT, and -nameRW options.) 
 V1.21g    Coordinate assignments (.x .y .z and .rot for the bones, .x .y .z 
           .dist .va .rx .ry and .rz for the camera, .x .y .z .r .g .b and 
           .rgb for the light) are supported in some macro.ini commands.  
           "angsetup.ini" was obsoleted and integrated into modsetup.ini 
           (although still available). 
           Bug fix in processing [~] (tilda symbol) in the file/model names. 
           License condition revised. 
 V1.21g2   Bug fix: .y/.z coordinate assignments in bone/cam/light direct 
                    addition, multiplication, and substitution were ignored 
                    in actual processing. => Fixed. 
           Bug fix: bone or morph data were broken when bone or morph data 
                    were copied or inserted with COPY/INSKEY commands. 
                    => Fixed. 
 V1.21g3   Extended INSKEY command for (X ang) (Y ang) (Z ang) assignments 
           in macro.ini.  
 V1.21g4   Supported two-morph mixing commands in macro.ini. 
 V1.21g5   Supported IF/IFNOT commands and 8 conditional assignments 
           (VMDFILENAME/VMDMODELNAME/SRCMODELNAME/TRGMODELNAME
            /SRCMODELTYPE/TRGMODELTYPE/EXIST/USED) in macro.ini.
 V1.21g6   Supported -AUTORESET option and automatic pose-estimation 
           restarting. 


<< learningposePMX version history >> 

  V0.80   First version released as an alpha version.  
  V0.81   Bug fix: auto start of modsetup read-in removed.  
  V0.82   Unlimited extension of the numbers of textures, materials, 
          bones, morphs, display-frames, rigid-bodies, and joints 
          that can be read from PMX files. (=> max. 2147483647) 
  V0.83   Bug Fix: QDEF and some PMX2.1 extended data had not been 
          supported. => Supported. 
  V1.01   Supported PMX files that seem to be created or converted using 
          other tools than PMX editor. 
  V1.02   Supported start up from batch files.  
  V1.04   Supported file extension check for dropped files. (.PMX) 
  V1.07   Corrected PMX version recognition.  
  V1.08   Supported Mother-bone recording and version recording.   
          Provisional measures added for avoiding Windows 11 Power 
          Shell bugs about console-log display (for versions 22H2 
          build 22621 and later). 
  V1.10   Supported UTF-8 mode. (English and Japanese) 
  V1.11   File name display removed in the dialog messages for avoiding  
          character code problems in UTF-8 mode on Windows OS (10/11) 
          sometimes supposing ANSI message letters for the dialog. 
  V1.12   Supported UTF-16 file path recognition (automatic switching 
          of ANSI, UTF-8, and UTF-16 code systems).  
  V1.14   Windows code signing supported. 
  V1.15   Bug fix: learningposePMX failed in starting in the folders 
          that have UTF-specific letters in the folder names. 
          => Fixed. 
  V1.18   Improved in reliability in recording vmdsetup.ini on Windows 11.


<< Acknowledgements >> 
  
  We gratefully acknowledge VMD file information by Harigane-P and  
  PMX file specification by Kyokuhoku-P with the allowance for using the 
  PMX file format for non-profit purposes. 

  "Hatsune Miku" is the name of a vocal character by Crypton Future Media 
  Inc., Japan. 
  
  The icon of the .exe file was designed by R-tenP. 
  
  The author would like to thank all the artists of those tools, models, 
  music, and movies related with Miku Miku Dance. 


Oct 17, 2025 
F.Issiki 
Finekit, Artist Support, 
https://finekit.co.jp/base/
