Custom Sky#


All property names are case-sensitive.

Custom Sky changes the skybox texture, and can apply different sets of skies depending on the time, biome, heights, weather, etc.




Space skybox with moon#

Properties that specify a path to a texture file can use any of the following syntax:

Relative to assets/minecraft/


Relative to assets/minecraft/optifine/


Relative to location of properties file

./path/filename(path of properties file)/path/filename

Absolute path with namespace


Place the file at

  • ~/sky/world0/

  • ~/sky/world0/

  • … etc.

in the resource pack. Each file represents one layer of the sky. OptiFine will continue loading them until a .properties file is not found. The order of the numbers is the order in which they will be rendered in game.

Additionally, two special properties files are applied to the sun and moon if present. This is mainly intended to allow overriding the blend method used by the sun and moon:

  • ~/sky/world0/ replaces sun.png

  • ~/sky/world0/ replaces moon_phases.png


The Vanilla sun.png#


The Vanilla moon_phases.png#

Instead of a full skybox, the source texture should match the layout of sun.png or moon_phases.png.


The “world0” in the path refers to the overworld. If there were other worlds with skies (the Nether and End do not use the standard sky rendering# methods), their files would be in ~/sky/world<world number>.


A simple template for a skybox, with directions labelled#


An example of how a skybox might look#



speed does not affect the fading in and out, which always occurs on a 24-hour cycle





Values: String, hh:mm 24-hour format
Required: ❌ No
Fade in/out times. All times are in hh:mm 24-hour format. See Time format.
If no times are specified the layer is always rendered.


Values: See above
Required: ❌ No


Values: See above
Required: ❌ No


Values: String, path to texture
Required: ❌ No
Default: sky<n>.png in same directory
Name of source texture.
This can be anywhere in the resource pack and multiple properties files can share the same source.


Values: add, subtract, multiply, dodge, burn, screen, replace, overlay, or alpha
Required: ❌ No
Default: add
Here, ‘previous layer’ can refer to the default sky or to the previous custom sky defined by sky<n-1>.properties.
Supported blending methods are:
add: Add this sky bitmap to the previous layer. In case of overflow, white is displayed.
subtract: Subtracts this sky bitmap to the previous layer. In case of negative values, black is displayed.
multiply: Multiply the previous RGBA values by the RGBA values in the current bitmap.
dodge: Lightens the sky bitmap
burn: Darkens the sky bitmap
screen: Inverts both layers, multiplies them, and then inverts that result.
replace: Replace the previous layer entirely with the current bitmap. There is no gradual fading with this method; if brightness computed from the fade times is > 0, the full pixel value is used.
overlay: RGB value > 0.5 brightens the image, < 0.5 darkens.
alpha: Weighted average by alpha value.


Values: Boolean
Required: ❌ No
Default: true
Whether or not the bitmap should rotate with the time of day.


Values: Positive float
Required: ❌ No
Default: 1.0
Rotation speed as a multiple of the default of one 360-degree cycle per game day.
A value of 0.5 rotates every two days.
Irrational values can be useful to make clouds appear in different positions each day.


Values: List of three floats
Required: ❌ No
Default: 0.0 0.0 1.0
Axis of rotation.
If a player is looking in the given direction, the skybox will appear to be rotating clockwise around the line of sight.
Default rotation is along the southern axis (rising in the east and setting in the west).
For reference, the vectors corresponding to the six cardinal directions are below.
However, the rotation axis can be any vector except 0.0 0.0 0.0.
down = 0 -1 0
up = 0 1 0
north = 0 0 -1
south = 0 0 1
west = -1 0 0
east = 1 0 0


Values: List of integers or integer ranges
Required: ❌ No
Days for which the layer is to be rendered.
Days are numbered from 0 to daysLoop-1, for example: days=0 2-4 6


Values: Positive integer
Required: ❌ No
Default: 8

Number of days in a loop, see above


Values: clear, rain, or thunder
Required: ❌ No
Default: clear
Weather for which the layer is to be rendered.
Several values can be specified separated by space, for example weather=clear rain thunder


Values: List of biome IDs
Required: ❌ No

Limit the sky layer to only certain biomes.


Values: List of integers or integer range
Required: ❌ No
Limit the sky layer to only certain heights.
Since 1.18, negative values may be specified for height. When used in a range they have to be put in parenthesis ( ).


Values: Integer
Required: ❌ No
Default: 1
Transition time (in seconds) for the layer brightness.
It is used to smooth sharp transitions, for example between different biomes.

Time format#

All times are in hh:mm 24-hour format.

For reference,



/time set 0



/time set 6000



/time set 12000



/time set 18000

The fade times control the brightness when blending.

between startFadeIn and endFadeIn: 0 up to 1 between endFadeIn and startFadeOut: always 1 between startFadeOut and endFadeOut: 1 down to 0 between endFadeOut and startFadeIn: always 0


startFadeOut does not need to be specified; its value is uniquely determined by the other three.

🆚️ This documentation assumes the latest OptiFine version. Notes are not made for legacy versions (1.8).
🔙️ This documentation is updated to commit 8410499f.
©️ This file is offered without any copyright restrictions. Please copy and modify it to suit your needs. Credit is optional, but appreciated.