
  VMD Retarget   V1.21i7 
                               Copyright(c) F.Issiki 2022, 2026  


This is a set of VMD Retarget V1.21 for Win32 compatible environment. 

This tool converts a motion file (VMD/BVH/VRMA) for an Miku Miku Dance 
(MMD) model to refit it to other models (VRM or PMX: target models). 

This tool converts VMD/BVH/VRMA files so that the converted VMD motion 
files reproduce almost the same motion with the target models having  
different bone angles. 


<< How to use >> 

- Converting VMDs to VMDs 

  (1) Drag and drop the source model onto "learningSourcePMX", 
      or "learningSourceVRM." 
      (PMX files are to be dropped onto learningSourcePMX.exe.)  
      (VRM files are to be dropped onto learningSourceVRM.exe.)  
      
      If you are unable to obtain source PMX/VRM models, 
      drag and drop source VMD file onto learningSourceVMD.exe 
      instead. 
        (In that case, only arm-to-finger bone angles will be 
         corrected.)  
      
  (2) Drag and drop the target model onto "learningTargetPMX", 
      or "learningTargetVRM."
      (PMX files are to be dropped onto learningTargetPMX.exe.)  
      (VRM files are to be dropped onto learningTargetVRM.exe.)  

  (3) Drag and drop a VMD file that you want to convert 
      onto VmdRetarget.exe. 


- Converting BVH/VRMA files to VMDs 

  (1) Drag and drop the BVH or VRMA file onto "learningSourceBVH", 
      or "learningSourceVRMA."
      (BVH files are to be dropped onto learningSourceBVH.exe.)  
      (VRMA files are to be dropped onto learningSourceVRMA.exe.)  
      
        (*note: learningSourceBVH.exe/learningSourceVRMA.exe 
                exist only in Fully-captured motion conversion   
                set.)  
      
      Then the pre-converted VMD file will be generated in the 
      same folder as the BVH or VRMA file. 

  (2) Drag and drop the target model onto "learningTargetPMX", 
      or "learningTargetVRM."
      (PMX files are to be dropped onto learningTargetPMX.exe.)  
      (VRM files are to be dropped onto learningTargetVRM.exe.)  

  (3) Drag and drop the pre-converted VMD file onto 
      VmdRetarget.exe.  
      
      If you have finished converting BVH files, please delete 
      the macro.ini file, as this file contains BVH-specific 
      conversion setup. 


  VmdRetarget.exe will generate the converted VMD in the original 
  VMD folder. 
  The converted file name will be as "****-ret.VMD", where the
  additional string "-ret" will be attached to the end of the 
  original file name. 
  
  The "source model" is the model that was used for editing 
  the original VMD file. 
  The "target model" is the model that will be used with the  
  converted VMD file. 
  BVH/VRMA files include the source model information in the motion 
  files themselves, then no source model file is necessary.   
  
  Current version (V1.21i) supports only Y-up BVH (T-pose arms are 
  on X direction) read-in.   
  
  If you are converting fully-captured VMD motion files, BVH, or 
  VRMA files, please confirm that the -FCAP option is enabled in the 
  macro.ini file. (The details are explained below.) 



<< How to cancel leg/ankle (foot) motion conversion  (ext. V1.20f6) >> 

- You can disable conversion for upper leg, lower leg, and foot (ankle) 
  bones, if you assign options shown below in modsetup.ini. 
  
    "-PCLUL=0" - disables Left Upper Leg conversion 
    "-PCLLL=0" - disables Left Lower Leg conversion 
    "-PCLF=0"  - disables Left Foot (ankle) conversion 
    "-PCRUL=0" - disables Right Upper Leg conversion 
    "-PCRLL=0" - disables Right Lower Leg conversion 
    "-PCRF=0"  - disables Right Foot (ankle) conversion 

  These options are enabled by default, if you are using modsetup.ini 
  as it was extracted. 
  If you assign =1 for each option, conversion will be enabled. 
  


<< How to cancel finger motion conversion  (from V1.20f6) >> 

- You can disable conversion for finger bones, if you assign options 
  shown below in modsetup.ini. 
  
    "-PCFLT=0" - disables Left Thumb 1 and 2 conversion 
    "-PCFLI=0" - disables Left Index  Finger conversion 
    "-PCFLM=0" - disables Left Middle Finger conversion 
    "-PCFLR=0" - disables Left Ring   Finger conversion 
    "-PCFLL=0" - disables Left Little Finger conversion 
    "-PCFRT=0" - disables Right Thumb 1 and 2 conversion 
    "-PCFRI=0" - disables Right Index  Finger conversion 
    "-PCFRM=0" - disables Right Middle Finger conversion 
    "-PCFRR=0" - disables Right Ring   Finger conversion 
    "-PCFRL=0" - disables Right Little Finger conversion 

  These options are enabled by default, if you are using modsetup.ini 
  as it was extracted. 
  If you assign =1 for each option, conversion will be enabled. 



<< How to enable thumb-zero bone conversion 
                                   (from V1.20f6, f11, and f17) >> 

- VMD Retarget supports Thumb 0 bone conversion. 
  By default, the Thumb 0 conversion is disabled in modsetup.ini. 

- The Thumb 0 conversion will be activated, if the -PCLTZ and/or 
  -PCRTZ options in modsetup.ini are enabled, and both models are 
  found to have Thumb 0 bones. 

- Thumb 0 conversion will also be activated, if the enforced 
  conversion (-FPCTZ option) is enabled, even if the Thumb 0 bones 
  are not found in source or target models, supposing default 
  angles of thumb 0 bones (which can be setup with -PC*ATZ* 
  options). 

    "-PCLTZ=1" - enables Left  Thumb 0 model-difference conversion 
    "-PCRTZ=1" - enables Right Thumb 0 model-difference conversion 
    "-FPCTZ=1" - enables Enforced Conversion for Thumb 0  

  Note: "-PCFLT" and "-PCFRT" options are independent of "-PCLTZ" 
        and "-PCRTZ" on/off switching. 
  
  If you assign =0 for those options, conversion will be disabled. 

- You can change default angles of thumb 0 bones for both PMX and 
  VRM models, if you assign options shown below in modsetup.ini. 

    "-PCPATZZ=36.5" - sets default angles of thumb 0 bones of PMX 
                      models from x axis projected onto X-Z screen 
    "-PCPATZY=55.6" - sets default angles of thumb 0 bones of PMX 
                      models from x axis projected onto X-Y screen 
    "-PCVATZZ=38.2" - sets default angles of thumb 0 bones of VRM 
                      models from x axis projected onto X-Z screen 
    "-PCVATZY=18.7" - sets default angles of thumb 0 bones of VRM 
                      models from x axis projected onto X-Y screen 
  
  Each value is assigned in degree (1 rotation=360 degrees).
  Those values are used to suppose the thumb 0 bone angles, when 
  the PMX/VRM models do not have thumb 0 finger bones. (V1.20f11) 
  
- You can assign additional arbitrary rotation angles for thumb 0 
  bones, if you assign options shown below in modsetup.ini. 

    "-FLTZRZ=20.01"  - enables additional rotation of left thumb 0 
                       bone for z axis (rotated in X-Y plane)  
    "-FLTZRY=-30.01" - enables additional rotation of left thumb 0 
                       bone for y axis (rotated in Z-X plane)  
    "-FLTZRX=10.01"  - enables additional rotation of left thumb 0 
                       bone for x axis (rotated in Y-Z plane)  
    "-FRTZRZ=-20.01" - enables additional rotation of right thumb 0 
                       bone for z axis (rotated in X-Y plane)  
    "-FRTZRY=30.01"  - enables additional rotation of right thumb 0 
                       bone for y axis (rotated in Z-X plane)  
    "-FRTZRX=10.01"  - enables additional rotation of right thumb 0 
                       bone for x axis (rotated in Y-Z plane)  
  
  Each value is assigned in degree (1 rotation=360 degrees). 
  The rotation will be executed in Z-Y-X order. 
  These additional rotation will be operated over above all thumb-0 
  correction. (V1.20f17) 



<< How to cancel twist-motion separation of arm and elbow bones
                                                  (professional) >> 

- You can disable twist-motion separation of left arm, left elbow, 
  right arm, and right elbow bones and let the twisting stay on the 
  arm and elbow bones, if you assign "-RMXLA", "-RMXLH", "-RMXRA", 
  and "-RMXRH" options in modsetup.ini. 



<< 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 name  (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) 



<< How to assign arm angles supposed in target VMD player
           (new in V1.20f10, updated in V1.21a2 and V1.21i) >> 

- You can change default arm angles of A-pose supposed in a VMD 
  player actually used with T-pose VRM models, if you assign 
  "-PCVAA" option in modsetup.ini. 
  You can assign "-PCVAAS" "-PCVAAT" options to set -PCVAA for 
  source and/or target models separately. 

    "-PCVAA=30.0" - assigns default arm angles of VRM 
                    to 30.0 degrees (A-pose) 
                    for both left and right arms 
                    for both source and target models 
  
    "-PCVAAS=30.0" - assigns default arm angles of VRM 
                     to 30.0 degrees (A-pose) 
                     for both left and right arms 
                     for source models only  
                     (available from V1.21a2) 
  
    "-PCVAAT=30.0" - assigns default arm angles of VRM 
                     to 30.0 degrees (A-pose) 
                     for both left and right arms 
                     for target models only 
                     (available from V1.21a2) 
  
  The values can be ranged from -90.0 to 90.0. 
  By default, the values are set to 30.0, which is default 
  arm angle of VRM-based VMD player using UnityVMDPlayer library 
  (by Hobosore-san). 
  
  Note that -PCVAAS is fixed to =0 when you assign a VRMA motion 
  file as the source by learning the file with learningSourceVRMA. 



<< How to cancel shoulder and arm motion conversion 
                                       (ext. V1.20f14) >> 

- You can disable conversion for shoulders, upper arms, lower arms 
  (fore arms), and wrist bones, if you assign options shown below 
  in modsetup.ini. 
  
    "-PCLSL=0" - disables Left  Shoulder conversion 
    "-PCLUA=0" - disables Left  Upper Arm conversion 
    "-PCLLA=0" - disables Left  Lower Arm (fore arm) conversion 
    "-PCLW=0"  - disables Left  Wrist conversion 
    "-PCRSL=0" - disables Right Shoulder conversion 
    "-PCRUA=0" - disables Right Upper Arm conversion 
    "-PCRLA=0" - disables Right Lower Arm (fore arm) conversion 
    "-PCRW=0"  - disables Right Wrist conversion 

  These options are enabled by default, if you are using modsetup.ini 
  as it was extracted. 
  If you assign =1 for each option, conversion will be enabled. 



<< 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) > VmdRetarget -MXMTC=1 -EAP0.02  (filename).vmd 

    ex2) > VmdRetarget -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) > VmdRetarget -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. 

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

- 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 
  VmdRetarget.exe. 



<< How to enable groove-center mixing  
                (new in V1.20f23e, refined in V1.2024a, 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. 

    ex) > VmdRetarget -MXGTC=1 -EAP0.02 -GRVDH=0.2  (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, GRVDH 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. 
  
- 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 
  VmdRetarget.exe. 



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

- V1.20f23e and later supported -MXUB2 and -UBDH options, which 
  enables mixing of upper body 2 (chest) bone motion with upper 
  body 1 bone motion and 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.20f24 and later supported -MXNEK and -NECKDH option, which 
  enables mixing of neck-bone motion with head-bone motion and assign 
  difference between Head and Neck bones in PMX and VRM models.  
  
- V1.21c and later also supported -MXUB3 option, which enables 
  mixing of upper body 3 (chest) bone motion with upper body 2 or 1 
  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) > VmdRetarget -MXUB2=1 -UBDH=1.09  (filename).vmd 
  
    ex2) > VmdRetarget -MXNEK=1 -NECKDH=0.807  (filename).vmd 

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

- If the UBDH is not assigned in VMD Retarget, 
  the default values of the UBDH will be automatically set 
  to height difference between Upper Body 2 and Upper Body bones 
  read from trgpose.ini or srcpose.ini in PMX model cases. 

- If the UBDH is not assigned in VMD Retarget, 
  the default values of the UBDH will be automatically set 
  to height difference between chest and spine bones 
  read from trgpose.ini or srcpose.ini in VRM model cases. 

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

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

- 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 -MXUB2 and -MXUB3 options only supports =0/=1 (on/off) 
  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) > VmdRetarget -MXLIKP=1 -HEELH=1.62  (filename).vmd 
    ex2) > VmdRetarget -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)  

- If the heel height (-HEELH) is not assigned in VMD Retarget, 
  the default values of the heel height will be automatically set 
  to height of the ankles or the foot nodes of the target model 
  (PMX/VRM) read from trgpose.ini. 

- 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 is disabled by default in the "modsetup.ini" 
  file, if you are using as it was extracted. 

- 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. 

    ex1) > VmdRetarget -MXLBTC=1 -EAP0.02 
                       -LBCTRDH=4.75 -LBCTRDZ=-0.51 (filename).vmd 

    ex2) > VmdRetarget -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 values of the LBCTRDH will be the height 
  difference between the Lower Body and Center bones of the 
  learned target model (in trgpose.ini).
  
- 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 the learned source model (in srcpose.ini).  
  
- 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 
  VmdRetarget.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) > VmdRetarget -REVLBTC  (filename).vmd 

    ex2) > VmdRetarget -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 values of the LBCTRDH will be the height 
  difference between the Lower Body and Center bones of the 
  learned target model (in trgpose.ini).
  
- 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 the learned target model (in trgpose.ini).  
  
- 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 -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 
  VmdRetarget.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) > VmdRetarget -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 
  VmdRetarget.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) > VmdRetarget -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., 
  VmdRetarget will not change leg-IK settings. 

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

- If you assign -IKFZT=0, it will cancel IK-overwriting, i.e., 
  VmdRetarget 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, modified in V1.21f20a) >> 

- 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. 
  
  
    ex1) > VmdRetarget -CLIKLW=1  (filename).vmd 

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

    ex3) > VmdRetarget -CLIKLW=-1 -LEGDW=2.4  (filename).vmd 

    ex4) > VmdRetarget -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 "increase the distances between the 
                           left and right legs by 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 direction 
  of the waist (leg top). 

- 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) > VmdRetarget -FNFIX=tmp1  (filename).vmd 
  
  where, 
   - "-FNFIX=tmp1" meaning "fixing output file name to [tmp1.vmd] 
                            and its save position within the same 
                            folder with VmdRetarget.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 auto-setup of the mixing options 
                                        (new in V1.21e6) >> 

- V1.21e6 and later supported -AS (auto-setup) option, which 
  enable setup of all the mixing (-MXNEK, -MXUB3, -MXUB2, -MXLBTC, 
  -MXGTC, -MXWSTC, -MXMTC, -MXLIKP, -MXSP, -MXTZ, -RMXLA, -RMXLH,  
  -RMXRA, and -RMXRH) options. 

  If the -AS option is assigned in modsetup.ini or in a command 
  line, all the mixing options are automatically set in the 
  VmdRetarget reflecting the existing bones in the target PMX/VRM 
  models.  
  
    ex) > VmdRetarget -AS  (filename).vmd 
  
  where, 
   - "-AS"  meaning "enable auto-setup of bone mixing." 
   
- If you set -MXLBTC, -MXGTC, -MXWSTC, -MXMTC, -MXLIKP, -MXSP, 
  and -MXTZ options manually to non-zero value in advance, the 
  assigned options are excluded from the auto-setup, i.e., you 
  can tune the values of those options manually. 
  If you like to fix some of the values of -MXLBTC, -MXGTC, 
  -MXWSTC, -MXMTC, -MXLIKP, -MXSP, and -MXTZ options to 
  completely zero, just disable -AS option and set them manually.  
  
- The -AS option is enabled by default in the "modsetup.ini" file 
  in the sets for general MMD motion conversion, and disabled by 
  default in the "modsetup.ini" file in the VRM Live Viewer sets. 



<< How to enable auto-scaling of XYZ translation of all bones 
                                              (new in V1.21e6) >> 

- V1.21e6 and later supported -KA (Keep leg Angle) option, which 
  enable re-scaling the amounts of the XYZ translation of all the 
  bones in the VMD motion. 

  If the -KA option is assigned in modsetup.ini or in a command 
  line, the amounts of the XYZ translation of all the bones are 
  re-scaled by the ratio of the leg lengths of the source model 
  and the target model, so that the angles of the legs of the 
  target model are kept to the same leg angles of the source 
  model. 
  
    ex) > VmdRetarget -KA  (filename).vmd 
  
  where, 
   - "-KA"  meaning  "enable auto-scaling of XYZ for keeping 
                      leg angles." 
  
- This auto-scaling is equivalent with setting all -ALLKX/-ALLKY
  /-ALLKZ options to the same value manually, reffering the 
  LTY=(leg length) values in srcpose.ini and trgpose.ini values.
  If you like to set them to independent values, just set each 
  option manually without -KA option.

- The -KA option is enabled by default in the "modsetup.ini" file 
  in the sets for general MMD motion conversion, and disabled by 
  default in the "modsetup.ini" file in the VRM Live Viewer sets, 
  as VRM Live Viewer has its own auto-XYZ translation correction. 



<< How to enable conversion mode for fully-captured motion 
                                     (integrated in V1.21g) >> 

- V1.21g and later supported -FCAP option, which 
  enable the mode for higher-accuracy A-to-T and T-to-A pose 
  conversion for fully-captured VMD motion. 
  (This function was the same one previously supported in VMD 
   Retarget for Full Capture Motion.) 
  
  If the -FCAP option is assigned in modsetup.ini or in a command 
  line, the accuracies of the A-to-T and T-to-A pose conversion 
  are improved on the assumption that the interpolation is 
  unnecessary or ignorable in the original motion. 
  
    ex) > VmdRetarget -FCAP  (filename).vmd 
  
  where, 
   - "-FCAP"  meaning  "enable conversion mode for fully-captured 
                        motion." 
  
- Uasally, -AI (auto-key-insertion) option is unnecessary when you  
  convert the fully-captured VMD motion, then you might like to 
  disable -AI option instead of enabling the -FCAP option, and 
  vice versa. 

- The -FCAP option is disabled by default in the "modsetup.ini" 
  file in the sets for general MMD motion conversion, and enabled 
  by default in the "modsetup.ini" file in the full capture motion 
  sets. 



<< How to generate bone/morph name list file using -LIST option  
                                     (new in V1.21g7) >> 

- V1.21g7 and later supported -LIST option, which enable 
  outputting the list of the bone/morph names that is recorded 
  in the assigned VMD file. 
  The list file will be a simple text file named as 'list.txt'. 
  
  If the -LIST option is assigned in modsetup.ini or in a command 
  line, 'list.txt' file will be output in the VmdRetarget folder. 
  
    ex) > VmdRetarget -LIST  (filename).vmd 
  
  where, 
   - "-LIST"  meaning  "enable output of the list file." 
  
- The list.txt includes all the bone names and morph names with 
  the hexadecimal dump (%00-%FF) of those names, as follows ... 
     -- 
     bone 1 (    1 keys): 操作中心    %91%80%8D%EC%92%86%90%53
     bone 2 (    2 keys): 全ての親    %91%53%82%C4%82%CC%90%65
     bone 3 (   67 keys): 腰          %8D%98
     bone 4 (  395 keys): 上半身      %8F%E3%94%BC%90%67
     -- 
     morph 1 (   7 keys): まばたき    %82%DC%82%CE%82%BD%82%AB
     morph 2 (  12 keys): 笑い        %8F%CE%82%A2
     morph 3 (   4 keys): ウィンク    %83%45%83%42%83%93%83%4E
     -- 
  Note that these are the list after the macro-script (macro.ini) 
  processing. 
  The hexadecimal code can be used in a macro script for assigning 
  bone/morph names instead of the native character-code names. 

- The -LIST option is disabled by default in the "modsetup.ini". 



<< 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, V1.21g5, V1.21g7, V1.21i, and V1.21i5) >> 

- VMD Retarget supported text command macro script from V1.20f8. 

- If "macro.ini" file exist in the same folder with VMDRetarget.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) 
    ALLB.xyz *= value         --- rescales (multiplies) all XYZ-position 
                                  by the assigned ratio value 
    ALLM *= value             --- multiplies all the morph valuea 
                                  by the assigned value 
                                                      (new V1.21i) 
    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) 

    option "(option-assignment)"   
                              --- overwrite modsetup.ini option setting 
                                                       (new V1.21i5) 

    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. 
  
  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. ) 
  
  Japanese bone/morph names are recommended to be written in UTF-8  
  or Shift-JIS (known as SJIS) in the macro.ini. 
  If it is difficult to write the bone/morph names due to the 
  language setup on your PC, use assigning hexadecimal (%00-%FF) 
  expression instead.  For example, writing -- 
     del b"%91%53%82%C4%82%CC%90%65"  
  is equivalent with -- 
     del b"全ての親"     // delete MotherBone keys.         
  The hexadecimal code (%00-%FF) is for SJIS code (displayed as 
  ANSI on Windows PCs in Japanese language environment), which is 
  the native code recorded in VMD files.  If you do not know the 
  ANSI code of the bone/morph name character, you can use -LIST 
  option to generate bone/morph name list file. 



<< Setup files >> 

  These files are the setup files of VMD Retarget, which may 
  automatically or manually be created in the folder of 
  the VMDRetarget.exe file. 
  
  "srcpose.ini"  -- for recording learned source model bone info.   
  "trgpose.ini"  -- for recording learned target model bone info. 
  "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 on Windows 10/11 in UTF-8 mode)
  RAM: 0.6 GB or more 
  
- This tool set is a Windows-95-compatible software. 
  By the default, the OS launches the VMD Retarget 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/11. 
  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 (VmdRetarget.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 VmdRetarget.exe (or learning***.exe) 
  from the scan in the "Process" menu in Norton. 


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

  The author (F.Issiki) holds overall copyrights of this tool. 
  This tool of this version (V1.21) 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. 
  Also, we prohibit AI-learning of the executable files of this tool. 
  
  (We have obsoleted the additional terms for corporate use or enterprize 
   use in V1.21d-1.21g4 for voluntarily cooperation in checking the 
   appropriate processing of the VMD motion.) 


<< version history >> 

  V1.20f4  first released version  
  V1.20f5  Bug fix: missed calculation of twisting bone axises. => Fixed. 
           Shoulder bone conversion supported for PMX-PMX conversion. 
  V1.20f6  Supported all finger bone conversion and 
           -PCLUL  -PCLLL  -PCLF 
           -PCRUL  -PCRLL  -PCRF 
           -PCLTZ  -PCRTZ  -FPCTZ  
           -PCFLT  -PCFLI  -PCFLM  -PCFLR  -PCFLL 
           -PCFRT  -PCFRI  -PCFRM  -PCFRR  -PCFRL 
           options. 
           (In V1.20f6-V1.20f22, -PCLF -PCRF options are ignored and fixed 
            to be OFF.) 
  V1.20f7  Bug fix: converted Thumb 0 motion was not correct when -FPCTZ 
           option assigned. => 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  -PCVAA  options.  
  V1.20f11 Supported 
           -PCPATZY  -PCPATZZ  -PCVATZY  -PCVATZZ options. 
  V1.20f12 Bug fix: bugs in dialogue messages (for converted file names) 
                    were fixed. 
  V1.20f14 Supported 
           -PCLSL  -PCLUA  -PCLLA  -PCLW 
           -PCRSL  -PCRUA  -PCRLA  -PCRW 
           options. 
  V1.20f15 Bug fix: motion mixing of arm and elbow bones were not stopped, 
                    even if the -PCLUA -PCLLA -PCRUA -PCRLA pose correction 
                    were disabled. => Fixed to be also disabled. 
  V1.20f16 Supported VRM format version V1.0 beta. 
             (learningSourceVRM/learningTargetVRM) 
           Supported Left Arm IK and Right Arm IK bone XYZ position 
             learning (for future compatibility).  
  V1.20f17 Supported 
           -FLTZRX -FLTZRY -FLTZRZ 
           -FRTZRX -FRTZRY -FRTZRZ  
           options. 
           Supported VRMs using local-rotation description in the bone 
           structures. (for VRM 1.0 models) 
           Supported model name rewriting in converted VMD. 
  V1.20f20 Fixed bugs in English-mode conversion.
           Extended compatibility with blender-exported VRMs.
           Fixed bugs in dialogue message display in case of multiple file 
           conversion. 
  V1.20f21 Supported -nameLAK -nameRAK -nameLLK -nameRLK and -MXMTC 
           options. 
           Revised English message display. 
  V1.20f22 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.20f23 Supported option -MNREP for selecting on/off of model name 
           rewriting, which has been supported from V1.20f17.
           Supported Left/Right Leg IK Parent bone conversion (available 
           for only some VMDs). 
           -PCLF -PCRF options enabled for actual conversion. 
           Bug fix: VRM conversion of right hand fingers (index-little) 
                    corrected. 
           Supported UTF-8 English and Japanese modes, in addition to 
           conventional Windows 95 compatible mode. 
           Supported learning arm and elbow bone angles using 
           learningSourceVMD, which was newly attached. 
 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. 
           Bug fix: learningSourceVRM/learningTargetVRM had been failed in 
                    reading VRM1 thumb finger bones due to the renaming 
                    from VRM0 in the VRM1 specification.  => fixed.  
 V1.20f24-2  Bug fix: default file type on file open dialogue in 
                      learningSourceVRM/learningTargetVRM was incorrect. 
                      => fixed. 
 V1.20f24a Dialog box message display supported when VMD Retarget failed  
           in opening a VMD file for warning character code problem 
           on Windows OS. 
 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. 
           learningSourceVMD improved in detecting arm angles. 
 V1.21a    Auto-numbering supported to avoid output file overwriting. 
           (-ret.vmd => -ret(1).vmd, -ret(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. 
 V1.21a2   Supported -PCVAAS and -PCVAAT options. 
 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/UpperBody bones 
           supported. 
           Supported -MXUB3 option. 
           Bug fix in converting VMDs without 0-fram keys. 
 V1.21d    leaningSoucePMX/learningTargetPMX supported recording of 
           UpperBody3 bones. 
 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.  
           Supported recording of UpperBody3 bones in learning PMX.  
           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: VmdRetarget failed in starting in the folders 
           that have UTF-specific letters in the folder names. 
           => Fixed. 
 V1.21e2   -FCAP option warning supported. (Ignored in this ver.) 
 V1.21e4   Supported -FNFIX option. 
 V1.21e6   Supported -AS and -KA 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 are revised.  
 V1.21f2   Revised to support conversion changing IK settings without 
           converting any bone. 
 V1.21f3   Bug fix: VmdRetarget failed in reading setup files in the  
           folders that have UTF-specific letters in the folder names. 
           => Fixed. 
           Bug fix: VmdRetarget 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  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. 
           Bug fix in pose correction in Knees and Ankles. 
           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.21f18a Default setup of modsetup.ini was changed to -PCLSL=0 -PCRSL=0. 
           (shoulder conversion OFF) 
 V1.21f20  Supported LegIK spacing correction according to the model leg 
           widths (-CLIKLW and -LEGDW options). 
           Optimized file recording properties for Windows 11. 
 V1.21f20a Modified default setting of the -LEGDWR for more accurate 
           correction of the LegIKs. 
           Bug fix: non-zero -LEGDW default values were initially set in 
                    V1.21f20. => fixed.  
 V1.21f21  Supported reverting conversion of the -MXLBTC mixing. 
           (-REVLBTC option) 
           The setup file reading of srcpose.ini and trgpose.ini are enabled 
           in mixing and demixing conversions by default irrelevantly with 
           the enabling of the pose-correction (-PC). 
           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    Full capture motion conversion mode was supported in the standard 
           set. 
           Supported -FCAP option.  
           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 assignment types 
           (VMDFILENAME/VMDMODELNAME/SRCMODELNAME/TRGMODELNAME
            /SRCMODELTYPE/TRGMODELTYPE/EXIST/USED) in macro.ini.
 V1.21g6   Supported recording of eye height (EYL:eye level) in srcpose.ini 
           and trgpose.ini.  
 V1.21g7   Supported -LIST option for generating list of bone/morph names 
           recorded in a VMD file. 
           Supported hexadecimal (00-FF) code for bone/morph name assignment 
           in macro.ini. 
 V1.21g8   Bug fix: the effectiveness of -FCAP had been lost in V1.21f-g7. 
           => Fixed. 
 V1.21i    Supported VRMA read-in. (learningSourceVRMA) 
           Supported direct-multiplying command for ALLB ALLM in macro.ini. 
           Bug fix: the effect of the -ALLKX/KY/KZ options were doubled 
           in V1.21f12-V1.21g8. => Fixed. 
 V1.21i2   Supported BVH read-in. (learningSourceBVH)
           Supported file-type (extension) check of the dropped motion files 
           and model files.  
           Bug fix: the bone angles of the original models were preserved 
           on the bones in which conversion was partially disabled by the  
           macro.ini with -PC****=0 options. => Fixed. 
 V1.21i3   Bug fix: the angles of thumb bone incorrectly converted with the 
           models other than PMXs and VRMs. => Fixed. 
 V1.21i4   Revised macro.ini output in learningSourceBVH to support finger 
           motion copy when the BVH has fewer than 5 finger motion for each 
           arm. 
           Supported auto-backup of the macro.ini file (to macro-bak.ini or 
           macro-bak2.ini) and dialog display for deleting an old macro.ini 
           file for an old BVH. 
           Revised thumb-0/1/2 conversion for PMX/VRM/BVH compatibility. 
 V1.21i5   Revised macro.ini output in learningSourceBVH to support thumb-0 
           finger conversion. 
           Supported "option" command in macro.ini. 
           Overall Revision of finger conversion for BVH compatibility and 
           stability. 
 V1.21i6   Bug fix: Thumb-0 finger bone conversion was incorrect when the 
           options -PCLTZ=0 or -PCRTZ=0 are set. => Fixed. 
 V1.21i7   Improved to detect Wrist bone angles correctly with in-bone 
           assignment instead of unused traditional bones. 


<< 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. 
  We would like to thank Kirurobo (@kirurobo) for recording F.Issiki's 
  motion using Moven (Xsens MVN) capture system and supplying the files 
  in the FBX/BVH/VMD formats. 
  We would like to thank Dunauzi (@dunauzi) for disclosing the XYZ 
  translation correction method for VMDs (in sm35292780 motion read-me), 
  and related persons developed close technical methods. 
  
  "Hatsune Miku" is the name of a vocal character by Crypton Future Media 
  Inc., Japan. 
  
  The author would like to thank all the artists of those tools, models, 
  music, and movies related with the Miku Miku Dance. 


Jan 6, 2026 
F.Issiki
Finekit, Artist Support, 
https://finekit.co.jp/base/
