Permuya
Constraints

Shape how every trait fits.

Use six constraints to choose which combinations pass and how trait probabilities change.

Two kinds

Set boundaries or shift the odds.

Some constraints reject combinations. Others change how traits are sampled.

Validator constraints

A validator checks whether a combination passes. A violation blocks generation.

  • Mutual Exclusion
  • Mutually Inclusive
  • Group Exclusion
  • Required Pair

Sampler constraints

A sampler changes trait weights or probabilities. It never blocks a combination.

  • Conditional Probability
  • Weight Adjustment

Validator constraint

Mutual Exclusion

At most one selected trait from this group can appear in a combination.

When to use it

Use this when two looks should never appear on the same character.

Example

Keep a red coat and a blue coat from appearing together.

Before

Red coatBlue coat

Both coats can appear together.

With constraint

Mutual Exclusion
Red coatBlue coat

Choose one coat, or choose neither.

Illustrative trait example.

Validator constraint

Mutually Inclusive

This group is all-or-nothing: select every trait or select none.

When to use it

Use this for pieces that only make sense as a set.

Example

Keep a pair of wings with its matching shadow.

Before

Wings

Only one piece of the pair is selected.

With constraint

Mutually Inclusive
WingsWing shadow

Select both pieces, or select neither.

Illustrative trait example.

Validator constraint

Group Exclusion

Limit how many traits from this group can appear together.

When to use it

Use this to cap the number of extras on one character.

Example

Allow up to 2 accessory traits from a group of 4.

Before

BowBadgeScarf

Three accessories are selected.

With constraint

Group Exclusion
BowBadge

With a limit of 2, a third accessory cannot join.

Illustrative trait example.

Validator constraint

Required Pair

If any trigger trait is selected, at least one target trait must be selected.

When to use it

Use this when one trait needs a matching counterpart.

Example

When a monocle appears, include a top hat or a cane.

Before

Monocle

The trigger appears without a matching trait.

With constraint

Required Pair
MonocleTop hat or cane

A monocle requires at least one target trait.

Illustrative trait example.

Sampler constraint

Conditional Probability

Picking a trigger trait changes the probability of a target group.

When to use it

Use this when one trait should change the odds of another group.

Example

When a snowy background is picked, raise the chance of a snowflake pin.

Before

Snowy backgroundSnowflake pin · base odds

The pin uses its regular weight.

With constraint

Conditional Probability
Snowy backgroundSnowflake pin · adjusted odds

The background changes the target group’s probability.

Illustrative trait example.

Sampler constraint

Weight Adjustment

Multiply the selected traits’ weights by a chosen amount, without a trigger.

When to use it

Use this to shift a group’s odds every time it is sampled.

Example

Give Gold Trim 3 times its base weight.

Before

Gold Trim · weight 10Silver Trim · weight 10

Both traits start with equal weight.

With constraint

Weight Adjustment
Gold Trim · weight 30Silver Trim · weight 10

A 3× multiplier changes Gold Trim’s weight.

Illustrative trait example.
Across a Set

Each constraint has a different job.

Every constraint belongs to one Set. A Set can use validators and samplers together. Validators decide whether combinations pass. Samplers adjust trait odds during generation.

Start today

Bring your layers. Leave with a set.

Start with your layers