All posts

What I know so far about the 26.4 panorama seed

9 min read

Everything I ruled out for the ice cave panorama seed from snapshot 7. I think its a 64 bit seed.

Blue ice pillars and a frozen ocean at sunrise, from the 26.4-snapshot-7 panorama
In this post
  1. Older panoramas
  2. The 6 faces
  3. The camera
  4. The 3 filters
  5. Checks
  6. The searches
  7. Other stuff I tried
  8. What I think
  9. Update
  10. Tools and sources

This isnt the final version. Ill keep updating it as I find more.

For the last few weeks I was cracking the seeds from the ElRichMC snapshot videos for 26.4, so I already had filters and searchers ready for this version. On Tuesday 26.4-snapshot-7 came out with a new panorama, an ice cave next to a frozen ocean. I got the ElRich one (video) in under a minute, but thats for another post. Then I went for the panorama. I really wanted it.

Ive been on its seed for a few days and still dont have it. Here is everything I tried so nobody has to do it again.

The thumbnails I made for the ElRich one
The seed of the ElRich world
The best of his world

The panorama came out on Tuesday November 3rd. I finished the 2^48281,474,976,710,656 seeds on Friday the 6th. Since then Ive only been documenting everything and getting ready for when the Bedrock Edition panorama comes out, it could give new clues.

tldr its not a 32 bit2^32 = 4,294,967,296 possible seeds seed (that includes every text seed), not any of the ~18 million usual numbers someone would type and not a random 48 bit2^48 = 281,474,976,710,656 possible seeds Java seed in any snapshot with ice caves (snapshot 3 to 7). For me its a 64 bit2^64 = 18,446,744,073,709,551,616 possible seeds seed or something really weird. If it was a random 48 bit seed from s3 to s7 I would have it by now, so its bigger and you cant check all of it.

You can drag it and zoom with the wheel. The Show the cave button makes it brighter

Older panoramas

A few panoramas got cracked before. The original one was cracked by Minecraft@Home with distributed computing. Pale Garden too (code). Wilderness Bound was cracked by Bachale (coords from grass rotations) and Fragrant_Result_186 (seed from the poplars). It was the text “NewPanoramaUpdatedFeatures” (video).

A seed from “Create New World” with the seed box empty comes from a 48 bit generator. You can check that from the seed itself. The last ones dont come from there (newest first):

VersionPanoramaSeedRandom seed (48 bit)
26.3Wilderness Bound822930755 (“NewPanoramaUpdatedFeatures”)no, its a text seed
26.2Chaos Cubed3520020736007334307no
26w14a (April Fools)Herdcraft Updateunknown?
26.1Tiny Takeover-1701815224735573849no
1.21.11Mounts of Mayhem-6464260789280200050no
1.21.9The Copper Age7904846446833094596no
1.21.6Chase the Skies8819392414030687460yes
1.21.5Spring to Life2043584565 (“Desert”)no, its a text seed
1.21.4The Garden Awakens-2132177964578008911yes
1.21Tricky Trialsunknown?
24w14potato (April Fools)Poisonous Potato Update-4643277814275016011yes
1.20Trails & Tales8554477380691140270yes
1.19The Wild Update-1696067516 (“thewildupdate”)no, its a text seed
1.18Caves & Cliffs: Part II2151901553968352745yes (same low 48 bits as the original)
1.17Caves & Cliffs: Part I-5535916609452687941yes
1.16Nether Update6006096527635909600yes
1.15Buzzy Bees-4404205509303106230yes
1.14Village & Pillage2802867088795589976yes
1.13Update Aquatic1458140401 (“18w22a”)no, its a text seed
Beta 1.8 to 1.12Original25357015387625 (low 48 bits only)unknown

Seeds from the wiki. xpple already made a table like this on the Discord. Tricky Trials and Herdcraft Update still have no known seed.

So I started knowing a 64 bit seed was the most likely. But this is the first one in a while released on Java before Bedrock. And if it was 48 bit it could be checked completely, so I tried.

The 6 faces

The 6 faces, from 0 to 5

The panorama is really dark. If you raise the exposure you can see the stone, the ores and the ice.

Face 2 as shipped, almost blackThe same face with the exposure raisedOriginalExposure

The camera

Laggy (i_am_sheep) found the position from the stone texture rotations (with their CoordsFinder). They also saw it was right in the center of a block and Bachale posted the rounded /tp. I got it with my own tool too and its the same:

/tp -175049.5 110 -269602.5 -135 0

Stone faces marked in WebCoordsFinder

fanda857 got part of the Z from the clouds (with the cloudfinder by humhue).

The cloud grid for the cloudfinder

Later I checked it myself with WebCoordsFinder on face 2, marking 91 stone faces. Heads up, I only searched near the position we already knew, thats why it only takes a minute. Without knowing it you have to search a way bigger area, like Laggy did. It gives a single match with 0 errors, a few blocks from the camera:

One single match, 0 errors
CoordsFinder config (in case someone wants to repeat it)

There are also the WebCoordsFinder projects for face 2 and face 1 with the faces marked, to open them directly on their site.

algorithm = Vanilla-3
scanOrder = spiral
directions = [0, 90, 180, 270]

xRange = (-180000, -160000)
yRange = (100, 120)
zRange = (-270000, -260000)

errorTolerance = 0

cpuTileSize = (1024, 1024)
gpuTileSize = (8192, 8192)
verbose = false

[filter]
-13 3 -8 | 1 side
-13 3 -7 | 1 side
-14 3 -4 | 1 side
-14 3 -3 | 1 side
-15 3 -2 | 1 side
-13 4 -10 | 1 side
-13 4 -9 | 0 side
-13 4 -8 | 1 side
-13 4 -7 | 0 side
-14 4 -6 | 1 side
-14 4 -5 | 0 side
-14 4 -4 | 0 side
-14 4 -3 | 0 side
-15 4 -2 | 0 side
-10 5 -7 | 1 side
-11 5 -6 | 0 side
-10 5 -6 | 1 side
-12 5 -5 | 1 side
-13 5 -4 | 0 side
-13 5 -3 | 1 side
-14 5 -2 | 1 side
-14 5 -1 | 0 side
-9 6 -10 | 1 side
-9 6 -9 | 1 side
-10 6 -6 | 1 side
-10 6 -5 | 1 side
-11 6 -4 | 1 side
-13 6 -3 | 0 side
-13 6 -2 | 0 side
-14 6 -1 | 1 side
-14 6 0 | 1 side
-9 7 -10 | 0 side
-9 7 -9 | 0 side
-9 7 -6 | 1 side
-10 7 -5 | 0 side
-11 7 -4 | 0 side
-12 7 -3 | 0 side
-13 7 -2 | 1 side
-13 7 -1 | 0 side
-14 7 0 | 0 side
-14 7 1 | 0 side
-7 8 -11 | 0 side
-9 8 -10 | 0 side
-9 8 -9 | 0 side
-9 8 -8 | 1 side
-9 8 -7 | 0 side
-9 8 -6 | 0 side
-10 8 -5 | 1 side
-11 8 -4 | 1 side
-10 8 -4 | 1 side
-12 8 -3 | 1 side
-13 8 -2 | 0 side
-13 8 -1 | 0 side
-13 8 0 | 1 side
-14 8 1 | 0 side
-14 8 2 | 1 side
-8 9 -11 | 1 side
-9 9 -10 | 1 side
-9 9 -9 | 1 side
-9 9 -8 | 0 side
-9 9 -7 | 0 side
-9 9 -6 | 0 side
-9 9 -5 | 0 side
-13 9 -1 | 0 side
-14 9 1 | 1 side
-14 9 2 | 1 side
-8 10 -11 | 0 side
-9 10 -10 | 1 side
-9 10 -9 | 0 side
-9 10 -8 | 1 side
-9 10 -7 | 1 side
-9 10 -6 | 1 side
-9 10 -5 | 1 side
-8 11 -11 | 1 side
-9 11 -10 | 0 side
-9 11 -9 | 0 side
-9 11 -8 | 1 side
-9 11 -7 | 0 side
-9 11 -5 | 1 side
-8 12 -11 | 1 side
-9 12 -10 | 0 side
-9 12 -9 | 1 side
-9 12 -8 | 0 side
-9 12 -7 | 1 side
-9 12 -6 | 0 side
-5 13 -11 | 1 side
-6 13 -10 | 0 side
-6 13 -9 | 1 side
-6 13 -8 | 0 side
-7 13 -7 | 0 side
-7 13 -6 | 1 side

The 3 filters

To rule out seeds I used three things you can see in the image.

Ice crystals

There are quite a few visible and they give the most info. Each one sits in a spot that depends on the seed, so the more you read the fewer seeds fit. I read the exact block of each one. These are the ones on face 1.

The face 1 crystals block by block

Andesite

Theres an andesite patch near the camera. It looks grey inside the ice. This is the one I used, with its exact blocks.

The andesite patch block by block

Biomes

The biomes show through the cave opening. Ice caves around the camera and frozen ocean with icebergs outside. I only checked this at the end, to drop the seeds that passed the other two filters.

Ice caves and frozen ocean

Checks

I was scared the model was wrong and the right seed would pass without me seeing it. So before searching I did this.

  • I generated worlds with known seeds in that snapshot and compared them with my sim. It got all 641 crystals and 156 andesite veins I checked, while with a random seed almost none match.
  • The decoration order changes between snapshots. I compared the jars and searched with the salts of each version, they are in the table below.
  • I read the crystals several times, by hand and with my detectors. I fixed a couple at the start. In the end there was another independent read without looking at the old ones. It gave the same blocks, some less sure than others.
  • I also marked face 1 in WebCoordsFinder. It gives the same spot. The blocks the crystals are in match mine.
  • I checked if it could be a Bedrock world converted to Java (with Chunker for example). Chunker copies the blocks as they are, so the crystals and the andesite would be where Bedrock puts them. I checked it and they dont fit, Java generated them.
  • Before renting the GPUs I planted test seeds, some with crystals put wrong on purpose. The search found all of them and every rented GPU ran that test again before starting.

These are the salts I used, taken from the decoration order of each jar. The salt is the index plus 10000 times the step, like in the code below.

Features3s4 and s5s6 and s7
ice_crystals700017000170001
ice_cave_ore_andesite_upper600276002860028
ore_andesite_upper600056000660006

s4 and s5 have the same salts as s6 and s7. What changes is that from s3 to s5 ore_andesite_upper can also show up inside the cave, so in those versions the patch could come from either feature and I tried both.

The searches

  • 32 bit seeds, which include every text seed, by biomes. Nothing (M33_Galaxy got the same).
  • Numbers someone could type by hand in the seed box, like dates, versions or round numbers. Around 18 million. I made that list with AI help while I was coding other stuff. It was easy to check by hand. Nothing there either.
  • Every seed nextLong can give, for s3 and for s4-s7. In 26.x a random seed comes from RandomSource.create().nextLong(), which has 48 bits of state (I checked the game code). nextLong glues two 32 bit numbers from that same state, so out of the 2^64 possible seeds it can give at most 2^48 different ones. I tried all of those states while allowing some misread crystals and no seed got to the biome step.

By Wednesday I had almost given up on Java. On the Discord I said I was 99% sure it was a Bedrock seed. The last panoramas didnt come from nextLong and Bedrock random seeds dont either. And the wiki says the Wilderness Bound one copied stuff from the Bedrock terrain. So I was gonna wait for the Bedrock one. I had started a first 48 bit run on my GPU, but it had only gone through a small part with nothing found, so that didnt rule the seed out.

The next day Laggy reminded me on the Discord that this one came out on Java first, so you couldnt rule out a 48 bit seed. I already knew but it made me push again in case I was wrong. Also there was no other option, for 64 bit all I could do was wait and 48 bit could actually be checked. I went for it even if it was a bit of a gamble.

With my first filters my graphics card would take like a month. My GPU was already crying and I was going a bit crazy. I kept adding faster filters and in the end I rented GPUs (4 RTX 4090). I finished s4-s7 with my PC plus the rented ones, then did all of s3 on the rented ones. I didnt mind paying a bit to get it faster. That way I could use the time for other stuff and if I messed something up I would know sooner. With all that a full pass went down to about an hour. Around $4 total.

When it finished with zero results the first thing I thought was that I did something wrong, so I went over everything above again.

Example code

This is just the basics. The real search runs on GPU in my project.

This checks if a seed comes from the 48 bit generator. Thats how I made the table above.

def nextlong(seed):
    seed &= 2**64 - 1
    hi, lo = seed >> 32, seed & 0xffffffff
    for c in (0, 1):
        s = ((hi + c) & 0xffffffff) << 16
        for k in range(65536):
            n = (s | k) * 0x5DEECE66D + 0xB & 2**48 - 1
            if n >> 16 == lo and lo >> 31 == c:
                return True
    return False

print(nextlong(2802867088795589976))
print(nextlong(7904846446833094596))

The first one is 1.14 and gives True. The second is The Copper Age and gives False. A random 64 bit seed passes this by chance about 1 in 65536 times.

This is how each decoration feature gets its seed in a chunk. Its the game code, simplified. Since 1.18 that seed goes through Xoroshiro, which uses all 64 bits. Thats why you cant just search the low 48 bits like in old versions. You have to go through what nextLong gives, which are already 64 bit seeds.

long setDecorationSeed(long worldSeed, int chunkMinX, int chunkMinZ) {
    setSeed(worldSeed);
    long a = nextLong() | 1L;
    long b = nextLong() | 1L;
    long seed = (long) chunkMinX * a + (long) chunkMinZ * b ^ worldSeed;
    setSeed(seed);
    return seed;
}

void setFeatureSeed(long decorationSeed, int index, int step) {
    setSeed(decorationSeed + index + 10000L * step);
}

Other stuff I tried

  • The reddish pixel in the water, I saw it on the first day. If it was from a ruined portal or cold ocean ruins it would be a structure. With that you can get the structure seed (the low 48 bits) really fast, so it would have been a great filter. I checked its placement with the game, but the geometry didnt work. Its underwater_magma, sea floor magma. One pixel that far away is no good as a filter.
  • Frostbite textures to tell which snapshot it is. Same in s6 and s7. In the end I searched every version.
  • The icicles (icicle_cluster and large_icicle). They depend on terrain, which is slow to simulate. The base of the big ones is hard to read in the image.
  • The icebergs in the background. Too far away, a couple pixels per block.
  • Structures. None in view, so no way to get the structure seed (the low 48 bits) from them.
  • The seeds of older panoramas, in case they reused one. None has an ice cave there.
  • The metadata of the game images. Nothing.
  • The cave tunnels. Carvers (the classic cave and canyon tunnels) only use the low 48 bits of the seed, but this is a noise cave so they dont help.

What I think

Its not 48 bit in s3 to s7. The only thing I cant rule out is the screenshot being from an internal build between two snapshots, with another decoration order. Checking all 2^6418,446,744,073,709,551,616 seeds seeds is 65536 times the 48 bit search, like 7 years on the same 4 GPUs, so no brute force.

Since 1.18.30 Bedrock accepts 64 bit seeds. I also created new Bedrock worlds without typing anything and none of the seeds came from nextLong. That would fit with the last panoramas that dont come from nextLong.

I think the seed is 64 bit (maybe taken from Bedrock, but thats a guess) and that the world was generated with it in Java.

Now its just waiting for the Bedrock panorama, should be out soon.

Update

No seed yet, but the Minecraft@Home people are rebuilding the cave by hand on a server. When the Bedrock one comes out Ill add it. If the seed shows up Ill celebrate it here with alot of emojis.

If you have any lead, come share it on the Minecraft@Home Discord.

Tools and sources

The tools in this post (reading the images, simulating the crystals and andesite, the GPU searches, checking with real worlds) are from my own project, which Ive been working on since 2020. I also leaned on these community tools and sources to double check results and get ideas:

Thanks to the Minecraft@Home people, Laggy (i_am_sheep), Bachale, fanda857, M33_Galaxy, HARYA, ui (xnuuizh), xpple, sage (.sage007), elenaran, Tom (tomlacko), Cactooz and Philipp_DE for the server where they are rebuilding the cave by hand.

Thanks for reading :D