ppy/osu · error · InvalidDataException

Unknown command type: {commandType}

Error message

Unknown command type: {commandType}

What it means

Thrown by LegacyStoryboardDecoder when parsing a storyboard command inside a sprite/animation's command list (depth>0, after the 'T'/'C'/'P' command-group markers) and the command letter doesn't match any recognized case (F, M, S, V, R, C, L, MX, MY, P, E, etc.). The default branch of the inner switch fires for any unrecognized command character.

Source

Thrown at osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs:335

                                    case "A":
                                        currentCommandsGroup?.AddBlendingParameters(easing, startTime, endTime, BlendingParameters.Additive,
                                            startTime == endTime ? BlendingParameters.Additive : BlendingParameters.Inherit);
                                        break;

                                    case "H":
                                        currentCommandsGroup?.AddFlipH(easing, startTime, endTime, true, startTime == endTime);
                                        break;

                                    case "V":
                                        currentCommandsGroup?.AddFlipV(easing, startTime, endTime, true, startTime == endTime);
                                        break;
                                }

                                break;
                            }

                            default:
                                throw new InvalidDataException($@"Unknown command type: {commandType}");
                        }

                        break;
                    }
                }
            }
        }

        private string parseLayer(string value) => Enum.Parse<LegacyStoryLayer>(value).ToString();

        private Anchor parseOrigin(string value)
        {
            var origin = Enum.Parse<LegacyOrigins>(value);

            switch (origin)
            {
                case LegacyOrigins.TopLeft:
                    return Anchor.TopLeft;

View on GitHub (pinned to d9c73e12ad)

Solutions

  1. Inspect the storyboard command shown in the error message and identify the unrecognized command letter.
  2. Replace it with a valid command letter or remove the offending command line.
  3. Valid command letters include: F (fade), M (move), MX/MY (move X/Y), S (scale), V (vector scale), R (rotate), C (colour), L (loop), P (parameter), T (trigger), E (event).
  4. Re-export the storyboard from a compatible editor.
Defensive patterns

Strategy: try-catch

Try / catch

try
{
    storyboardDecoder.Decode(reader);
}
catch (InvalidDataException ex) when (ex.Message.Contains("Unknown command type"))
{
    Logger.Log($"Unrecognized storyboard command — file may be corrupt: {ex.Message}", LoggingTarget.Database);
}

Prevention

When it happens

Trigger: Decoding a .osu/.osb storyboard where a sprite's command block contains a command with an unrecognized letter prefix — e.g. '_X,0,1000,0,1' where 'X' is not a valid command. The commandType string is the first field after the leading underscores/spaces in a depth>0 event line.

Common situations: A storyboard created by a non-standard or experimental tool that emits unsupported command types; manual editing introducing a typo in a command letter (e.g. 'G' instead of 'F'); a corrupt storyboard file with garbled command data.

Related errors


AI-assisted analysis of ppy/osu@d9c73e12ad (2026-08-13). Data as JSON: /api/errors/b3d8aa4488881dd8. Report an issue: GitHub.