Is it possible to have a particle randomly rotate around a single axis?
It it possible to modify certain properties of particles with Python.

I only managed to modify particles that are alive as their properties seem to be overwritten as they are born. But if the properties are set after a frame change, i.e. as soon as new particles are born, this method works.

The following script registers a handler that inverts the angular velocity of half of the new particles after every frame change. I'm not familiar with a way to trigger the handler during baking, but caching the animation and using “Current Cache to Bake” works.

import bpy
from math import floor
from random import random

ps = bpy.data.objects['Cube'].particle_systems['ParticleSystem']

def refreshNow(val):
    current_frame = bpy.context.scene.frame_current
    for p in ps.particles:
        if current_frame == floor(p.birth_time) and random() &lt; .5:
            p.angular_velocity *= -1
            p.prev_angular_velocity *= -1
    bpy.context.scene.update()
    return val

def my_handler(scene):
    refreshNow(0)

def register():
    bpy.app.handlers.frame_change_post.append(my_handler)

if __name__ == "__main__":
    register()