diff --git a/examples/rng.rs b/examples/rng.rs
new file mode 100644
index 0000000000000000000000000000000000000000..04f7e40aba1db36692df93be38921663e41b0429
--- /dev/null
+++ b/examples/rng.rs
@@ -0,0 +1,24 @@
+use clap::Parser;
+use rand::{rngs::StdRng, Rng, SeedableRng};
+
+#[derive(Parser)]
+#[command(version, about, long_about = None)]
+struct Cli {
+    #[arg(short)]
+    n: usize,
+
+    #[arg(long)]
+    prng_seed: u8,
+}
+
+fn main() {
+    let cli = Cli::parse();
+
+    let mut seed: [u8; 32] = [0; 32];
+    seed[0] = cli.prng_seed;
+    let mut rng = StdRng::from_seed(seed);
+
+    for _ in 0..cli.n {
+        println!("{}", rng.gen::<u8>());
+    }
+}
diff --git a/scripts/inbreeding/run.nu b/scripts/inbreeding/run.nu
index 6a523b701a98740fa4ffeb3d2ae5329f1e2d0e3b..8171f2975428bd213d93d3aa7e67edd611fee734 100644
--- a/scripts/inbreeding/run.nu
+++ b/scripts/inbreeding/run.nu
@@ -29,6 +29,22 @@ export def main [
         mkdir $output_dir
         print $"data will be dumped to `($output_dir)`"
 
+        # compute a unique seed for that strategy and global seed
+        let seed = $s + $"($prng_seed)"
+            | hash sha256
+            | split chars
+            | last 2
+            | str join
+            | $"0x($in)"
+            | into int
+        # compute all the seeds for that strategy, one per scenario
+        let seeds = cargo run --release --example rng -- ...[
+            -n $options.nb_scenarii
+            --prng-seed $prng_seed
+        ]
+            | lines
+            | into int
+
         for i in 1..$options.nb_scenarii {
             let output = [ $output_dir, $"($i)" ] | path join
 
@@ -43,7 +59,7 @@ export def main [
                 --test-case recoding
                 --strategy $s
                 --environment $options.environment
-                --prng-seed $prng_seed
+                --prng-seed ($seeds | get ($i - 1))
             ] out> $output
         }