#Configuring skin.ini
Sometimes the default configuration for skins may not be good enough and you want to adjust them. By making a skin.ini file in the root directory of the skin folder, you are allowed to manipulate some of the values to change the look of the game.
Important note: If you are modifying the RGBA Colors and if you left the Alpha(opacity of the color) unassigned, it will use the default value, which is 255.
#General
The [General] section of the config file contains metadata about the skin—who it's by, what it's called, and the version—as well as non keymode-specific properties. It's mainly to let people know what your skin is all about.
| Value |
Data Type |
Default |
| Name |
String |
- |
| The name of the skin |
| Author |
String |
- |
| The creator/author of the skin |
| Version |
String |
- |
| The version number of the skin |
| CenterCursor |
True or False |
False |
| Whether the cursor image should be centered (for example, if it's a circle) |
| UseSkinBackgrounds |
True or False |
False |
| Whether the game should use backgrounds from the skin or not |
#Main Menu
The [MainMenu] section contains the modifications of the main menu's colors and the opacity of the audio and note visualizer. The values below may provide effects to the specific textures.
#Navigation
| Value |
Data Type |
Default |
| NavigationButtonTextColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the text in navigation button |
| NavigationQuitButtonTextColor |
R,G,B,A (0-255) |
249,100,93,255 |
The color of the Quit Game text in navigation button |
| NavigationButtonHoveredAlpha |
Float (0.00~1.00) |
0.35 |
| The opacity of the hovered navigation button element |
#Tip Panel
| Value |
Data Type |
Default |
| TipTitleColor |
R,G,B,A (0-255) |
69,214,245,255 |
| The color of the tip title |
| TipTextColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the tip text |
#News Post Panel
| Value |
Data Type |
Default |
| NewsTitleColor |
R,G,B,A (0-255) |
69,214,245,255 |
| The color of the news title |
| NewsDateColor |
R,G,B,A (0-255) |
128,128,128,255 |
| The color of the news date |
| NewsTextColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the news text |
| Value |
Data Type |
Default |
| JukeboxProgressBarColor |
R,G,B,A (0-255) |
255,222,124,255 |
| The color of the song's progress bar in the jukebox |
#Audio Visualizer & Note Visualizer Values:
| Value |
Data Type |
Default |
| AudioVisualizerColor |
R,G,B,A (0-255) |
9,165,200,255 |
| The color of the audio visualizer |
| AudioVisualizerOpacity |
Float (0.0-1.0) |
0.85 |
| The opacity of the audio visualizer |
| NoteVisualizerOpacity |
Float (0.0-1.0) |
0.60 |
| The opacity of the note visualizer that falls down in main menu |
The [MenuBorder] section contains modifications for the menu border background. The values below may provide effects for specific textures.
| Value |
Data Type |
Default |
| BackgroundLineColor |
R,G,B,A (0-255) |
9,165,200,255 |
| The color of the background of the border's outline |
| ForegroundLineColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the moving line in the border's outline |
| ButtonTextColor |
R,G,B,A (0-255) |
9,165,200,255 |
| The color of the text in both top and bottom borders |
| ButtonTextHoveredColor |
R,G,B,A (0-255) |
81,197,249,255 |
| The color of the text in both top and bottom borders when hovered with cursor |
#Song Selection
The [SongSelect] section contains the possible modifications of song selection menu including the leaderboard panel's color, personal best panel's color, mapset panel's color, mapset banner size, enabling or disabling the map background, and adjusting the map background's brightness. The values below may provide effects for specific textures.
#Leaderboard Panel Values:
| Value |
Data Type |
Default |
| LeaderboardScoreColorEven |
R,G,B,A (0-255) |
54,54,54,255 |
| The color of the leaderboard panel in even numbers |
| LeaderboardScoreColorOdd |
R,G,B,A (0-255) |
36,36,36,255 |
| The color of the leaderboard panel in odd numbers |
| LeaderboardScoreRankColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the rank numbers |
| LeaderboardScoreRatingColor |
R,G,B,A (0-255) |
233,183,54,255 |
| The color of the rating numbers |
| LeaderboardScoreAccuracyColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the accuracy numbers |
| LeaderboardScoreUsernameSelfColor |
R,G,B,A (0-255) |
81,197,249,255 |
| The color of your username in leaderboard |
| LeaderboardScoreUsernameOtherColor |
R,G,B,A (0-255) |
251,255,182,255 |
| The color of other players name in leaderboard |
| LeaderboardTitleColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the leaderboard title |
| LeaderboardRankingTitleColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of leadorboard ranking title |
| LeaderboardDropdownColor |
R,G,B,A (0-255) |
16,200,246,255 |
| The color of the dropdown in leaderboard |
| LeaderboardStatusTextColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the leaderboard's status text |
#Personal Best Panel Values:
| Value |
Data Type |
Default |
| PersonalBestTitleColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the personal best title |
| PersonalBestTrophyColor |
R,G,B,A (0-255) |
233,183,54,255 |
| The color of the personal best trophy |
| PersonalBestRankColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the personal best rank |
| NoPersonalBestColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the non-personal best text |
#Mapset Panel
| Value |
Data Type |
Default |
| MapsetPanelSongTitleColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the mapset title |
| MapsetPanelSongArtistColor |
R,G,B,A (0-255) |
5,151,229,255 |
| The color of the text of song's artist |
| MapsetPanelCreatorColor |
R,G,B,A (0-255) |
5,135,229,255 |
| The color of the text of the map creator |
| MapsetPanelByColor |
R,G,B,A (0-255) |
117,117,117,255 |
The color of the text By: |
| MapsetPanelBannerSize |
Integer(Width, Length) |
421,82 |
| The size of the mapset panel banner |
| MapsetPanelHoveringAlpha |
Float (0.00~1.00) |
0.35 |
| The opacity of the hovered mapset panel element |
| GameModePosOffsetX |
Integer |
-18 |
| The X offset of the game mode badge on mapset panel |
| RankedStatusPosOffsetX |
Integer |
-18 |
| The X offset of the ranked status badge on mapset panel |
| MapBackgroundBrightness |
Byte (0-255) |
15 |
| The brightness of the map background |
| DisplayMapBackground |
True or False |
False |
| If true, it displays the mapset's background. Otherwise, it uses the default song select background |
#Results Screen
The [Results] section contains the possible modifications of results screen background.
#Results Screen Background
| Value |
Data Type |
Default |
| ResultsBackgroundType |
Header, Background, or None |
Header |
The type of background displayed in results screen. Background uses the mapset's background image while None uses the custom background.png. |
| ResultsBackgroundFilterAlpha |
Float (0.00~1.00) |
1 |
The opacity of the image filter used for results background. If the skin does not have a custom background-filter.png file, it uses the default one instead. |
#Gameplay
This section is to manipulate the elements for the Keys game modes
- To start manipulating elements for a specific keymode or sharedk, create a section in the file titled with the format
[{keymode}] and have all of your config properties under it.
- Relevant titles:
[SHAREDK], [1K],[2K],[3K],[4K],[5K],[6K],[7K],[8K],[9K],[10K]
#Fallbacks
Fallbacks are a great way to make a skin efficently with as few textures as possible, especially across multiple keymodes, as you can re-use the same texture multiple times instead of duplicating with a different filename.
To get started: Use the sharedk folder for all your gameplay textures and [SHAREDK] in skin.ini for all your keymode configuration. Have UseFallback to True and all *Fallbacks = Integer List under each keymode title except for [SHAREDK].
You can overwrite what you've written in [SHAREDK] under each keymode title. For example ColumnSize = 50 in [SHAREDK] with ColumnSize = 100 in [3K] will result in a ColumnSize of 100 in the 3K gamemode.
The integer lists work by starting at lane 1 with subsequent lanes separated by a comma, the number referencing the suffix to the texture in the sharedk folder. For example HoldBodyFallbacks = 1,3 in [1K] will use note-holdbody-1.png for the first lane and note-holdbody-3.png for the scratch lane in the 1K gamemode.
| Value |
Data Type |
Default |
| UseFallback |
True or False |
False |
If set to True under a keymode title, then the keymode will use the /sharedk/... folder as texture fallback. |
| HitObjectFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
| HoldBodyFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
| HoldEndFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
| MineFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
| MineBodyFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
| MineEndFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
| ReceptorFallbacks |
Integer List |
- |
Uses specific fallback texture(s) for each lane. If [4K] example 1,1,1,1,1 |
#Notes
| Value |
Data Type |
Default |
| DefaultSkin |
Arrow, Bar or Circle |
Bar |
Sets the skin's default skin. If set to Arrow without setting RotateHitObjectsByColumn to False, the hitobjects will be rotated |
| ColorObjectsBySnapDistance |
True or False |
False |
| If true, it will look for file names relative to snap distance. See the Hit-Object Sheet for more information. |
| UseHitObjectSheet |
True or False |
False |
If true, the game will look for a spritesheet named note-hitobject-sheet@{rows}x{columns}.png to use as objects. Useful for easily creating skins that use different beat snap colors. |
| UsePerLaneSpriteSheets |
True or False |
False |
If true, the game will look for spritesheets named note-hitobject-sheet-{lane}@{rows}x{columns}.png to use as objects for each lane. Only used when UseHitObjectSheet = True. |
| RotateHitObjectsByColumn |
True or False |
False |
If true, the game will rotate the notes according to the lane it's in. Recommended to set to True if a skin uses an Arrow note Hit-Object Sheet. |
| HitObjectRotations |
Integer List |
False |
Per lane HitObject rotation, each lane separated by a comma. An integer of 1 is 1 degree of rotation. |
| RotateEditorObjectsByColumn |
True or False |
False |
If true, the game will rotate the objects according to the lane it's in. Recommended to set to True if a skin uses an Arrow note Hit-Object Sheet. |
| FlipNoteImagesOnUpscroll |
True or False |
False |
| If true, the notes will be flipped upside down if upscroll is enabled |
| FlipNoteEndImagesOnUpscroll |
True or False |
False |
| If true, the note-holdends will be flipped upside down if upscroll is enabled |
| DeadNoteColor |
R,G,B,A (0-255) |
200,200,200,255 |
| The tint of the dead notes (for example, long notes released too early) |
| DrawLongNoteEnd |
True or False |
True |
| True by default. If set to False, LN ends are not rendered and LN starts don't "slide" along as you hold LNs |
| NotePadding |
Integer |
0 |
| The amount of space between each column |
| WidthForNoteHeightScale |
Integer |
0 |
The column size the notes will use for scaling the objects' heights. If 0 or below, it will automatically use ColumnSize for scaling the height. |
#Playfield
| Value |
Data Type |
Default |
| BgMaskAlpha |
Float (0.0-1.0) |
1.0 |
| The alpha channel/opacity of the Stage BG Mask |
| BgMaskPadding |
Integer |
0 |
| The amount of space between the Stage BG Mask and the edges of the stage |
| ColumnAlignment |
Integer (Percentage) |
0 |
| A percentage value of the width of the screen where the stage will be placed |
| ColumnSize |
Integer |
90 |
| The size of each column. Equal size for each column. Increasing the column size may also increase the receptor's size by scaling and adjust the visual hit position. |
| ColumnColor{1-11} |
R,G,B,A (0-255) |
255,255,255,255 |
| The color in which the Column Lighting is tinted in the specified lane |
| ColumnLightingOffsetY |
Integer |
0 |
| The Y Offset of the Column Lighting relative to the receptors |
| ColumnLightingScale |
Float (0.0-1.0) |
1.0 |
| The height scale of the column lighting to make it bigger or smaller. |
| HitPosOffsetY |
Integer |
0 |
| The offset of the hit position relative to its default location at the edge of the receptors. Setting this value higher will make the hit position lower. |
| ReceptorPosOffsetY |
Integer |
0 |
| The Y position of the receptors relative to its default location on the screen. Setting this value higher will make the receptors at higher position. |
| ReceptorsOverHitObjects |
True or False |
True |
| If true, the receptors will be over the hitobjects when they fall down and vice versa. |
| RotateReceptorsByColumn |
True or False |
False |
If true, the game will rotate the receptors according to the lane it's in. Recommended to set to True |
| ReceptorRotations |
Integer List |
- |
Per lane receptor rotation, each lane separated by a comma. An integer of 1 is 1 degree of rotation. |
| StageReceptorPadding |
Integer |
0 |
| The amount of space between between the stage background's border and first/last column |
| CoopPlayfieldPadding |
Integer |
92 |
| The amount of space between between the sides of the screen and the playfield, only active in coop play. |
#Judgement Burst and Hit Error
| Value |
Data Type |
Alignment |
Default |
| HitErrorChevronSize |
Integer |
- |
8 |
| The size of the chevron that displays the player's last hit above the hit error |
| HitErrorHeight |
Integer |
- |
10 |
| The height of the hit error |
| HitErrorPosX |
Integer |
MidCenter |
0 |
| The X position of the hit error |
| HitErrorPosY |
Integer |
MidCenter |
45 |
| The Y position of the hit error |
| HitErrorAlpha |
Float (0.0-1.0) |
- |
0.5 |
| The alpha of the hit error lines |
| HitErrorWidthScale |
Float (0.0-1.0) |
- |
1 |
| The scale factor for hit error width |
| HitErrorEarlyColor |
R,G,B,A (0-255) |
- |
9,165,200,255 |
| The hiterror chevron color for early hit |
| HitErrorLateColor |
R,G,B,A (0-255) |
- |
255,152,164,255 |
| The hiterror chevron color for late hit |
| HitErrorNeutralColor |
R,G,B,A (0-255) |
- |
255,255,255,255 |
| The hiterror chevron color for neutral hit |
| JudgementHitBurstFps |
Integer |
- |
60 |
| The frames per second the judgement hit burst animation will run at |
| JudgementBurstPosY |
Integer |
MidCenter |
0 |
| The Y Offset of the judgement hit burst |
| JudgementHitBurstBumpY |
Integer |
- |
-5 |
| The Y added to the judgement hit burst when it starts bumping |
| JudgementHitBurstBumpTime |
Integer |
- |
183 |
| The time it takes to move the judgement hit burst from its bump position to its original position |
| JudgementHitBurstScale |
Byte (0-255) |
- |
100 |
| The size of the judgement hit burst. 255 = 357x357px at 1080p |
| DisplayJudgementsInEachColumn |
True or False |
- |
False |
| Displays the judgments in each column. |
#Lighting
| Value |
Data Type |
Alignment |
Default |
| HitLightingX |
Integer |
MidCenter |
0 |
| The X position of the hit/holdlighting relative to the center of the receptor |
| HitLightingY |
Integer |
MidCenter |
0 |
| The Y position of the hit/holdlighting relative to its default position |
| HitLightingFps |
Integer |
- |
60 |
| The frames per second the hitlighting animation will run at |
| HitLightingScale |
Integer |
- |
100 |
| The size scale of the hitlighting element |
| HitLightingColumnRotation |
True or False |
- |
False |
| Determines whether the hitlighting will be rotated according to the column it's in |
| HoldLightingFps |
Integer |
- |
60 |
| The frames per second the holdlighting animation will run at |
| HoldLightingScale |
Float |
- |
100 |
| The size scale of the holdlighting element |
| HoldLightingColumnRotation |
True or False |
- |
False |
| Determines whether the holdlighting will be rotated according to the column it's in |
#Health Bar
| Value |
Data Type |
Alignment |
Default |
| HealthBarKeysAlignment |
LeftStage, RightStage or TopLeft |
Depends |
RightStage |
| Where the health bar is positioned in relation to the stage |
| HealthBarType |
Horizontal or Vertical |
- |
Vertical |
| The type of health bar your image is. If it is horizontal, specify horizontal and vice versa |
| HealthBarPosOffsetX |
Integer |
Depends |
5 |
| The health bar's X position relative to its default location |
| HealthBarPosOffsetY |
Integer |
Depends |
5 |
| The health bar's Y position relative to its default location |
| HealthBarScale |
Integer (Percentage) |
- |
100 |
| The size of the health bar display |
#Hit Bubbles
| Value |
Data Type |
Alignment |
Default |
| HitBubblesAlignment |
LeftStage, RightStage or BelowStage |
Depends |
LeftStage |
| Where the hit bubbles is positioned in relation to the stage |
| HitBubblesType |
FallDown, FallUp, FallLeft or FallRight |
- |
FallDown |
| The direction towards which the bubbles fall |
| HitBubblesPosX |
Integer |
Depends |
-10 |
| The hit bubbles X position relative to its default location |
| HitBubblesPosY |
Integer |
Depends |
170 |
| The hit bubbles Y position relative to its default location |
| HitBubblesScale |
Float |
- |
1 |
| The scale of the hit bubbles display |
| HitBubbleScale |
Float |
- |
1 |
| The scale of an individual hit bubble |
| HitBubbleBorderPadding |
Float |
- |
7 |
| The padding between the edges of the bubbles display (along line of falling) to the bubbles |
| HitBubblePadding |
Float |
- |
3 |
| The padding between any two bubbles (along line of falling) |
| HitBubblesRecordedJudgements |
Marv, Perf, Great, Good, Okay, Miss, NoMarv, All, Default or any combination of them joined by commas (,) |
- |
NoMarv |
| The judgements that will generate a bubble |
#Numbers
#Combo
| Value |
Data Type |
Alignment |
Default |
| ComboDisplayScale |
Integer |
- |
100 |
| The size of the combo display |
| ComboPosX |
Integer |
MidCenter |
0 |
| The X position of the combo display relative to its default position |
| ComboPosY |
Integer |
MidCenter |
-40 |
| The Y position of the combo display relative to its default position |
| ComboDisplayBumpY |
Integer |
- |
-5 |
| The Y added to the combo display when it starts bumping |
| ComboDisplayBumpTime |
Integer |
- |
370 |
| The time it takes to move the combo display from its bump position to its original position |
#Rating
| Value |
Data Type |
Alignment |
Default |
| RatingDisplayScale |
Integer |
- |
100 |
| The size of the combo display |
| RatingDisplayPosX |
Integer |
TopLeft |
10 |
| The X position of the display that shows the current score rating |
| RatingDisplayPosY |
Integer |
TopLeft |
15 |
| The Y position of the display that shows the current score rating |
#Accuracy
| Value |
Data Type |
Alignment |
Default |
| AccuracyDisplayScale |
Integer |
- |
100 |
| The size of the accuracy display |
| AccuracyDisplayPosX |
Integer |
TopRight |
-10 |
| The X position of the accuracy display relative to its default position |
| AccuracyDisplayPosY |
Integer |
TopRight |
5 |
| The Y position of the accuracy display relative to its default position |
#KPS
| Value |
Data Type |
Alignment |
Default |
| KpsDisplayScale |
Integer |
- |
100 |
| The size of the keys per second display |
| KpsDisplayPosX |
Integer |
TopRight |
-10 |
| The X position of the keys per second display relative to its default position |
| KpsDisplayPosY |
Integer |
TopRight |
15 |
| The Y position of the keys per second display relative to its default position |
#Score
| Value |
Data Type |
Alignment |
Default |
| ScoreDisplayScale |
Integer |
- |
100 |
| The size of the score display |
| ScoreDisplayPosX |
Integer |
TopLeft |
10 |
| The X position of the score display relative to its default position |
| ScoreDisplayPosY |
Integer |
TopLeft |
5 |
| The Y position of the score display relative to its default position |
#Judgement Counter
| Value |
Data Type |
Alignment |
Default |
| JudgementCounterAlpha |
Float (0.0-1.0) |
- |
1 |
| The alpha/opacity of the judgement counter |
| JudgementCounterFontColor |
R,G,B,A (0-255) |
- |
255,255,255,255 |
| The color of the judgement counter font |
| JudgementCounterSize |
Integer |
- |
40 |
| The width and height of the judgement counter |
| JudgeColorMarv |
R,G,B,A (0-255) |
- |
255,255,255,255 |
The color of the Marvelous counter overlay |
| JudgeColorPerf |
R,G,B,A (0-255) |
- |
255,231,107,255 |
The color of the Perfect counter overlay |
| JudgeColorGreat |
R,G,B,A (0-255) |
- |
86,254,110,255 |
The color of the Great counter overlay |
| JudgeColorGood |
R,G,B,A (0-255) |
- |
0,209,255,255 |
The color of the Good counter overlay |
| JudgeColorOkay |
R,G,B,A (0-255) |
- |
217,107,206,255 |
The color of the Okay counter overlay |
| JudgeColorMiss |
R,G,B,A (0-255) |
- |
249,100,93,255 |
The color of the Miss counter overlay |
| JudgementCounterPosX |
Integer |
MidRight |
0 |
| The horizontal position of the judgement counter relative to its default position |
| JudgementCounterPosY |
Integer |
MidRight |
0 |
| The vertical position of the judgement counter relative to its default position |
| JudgementCounterPadding |
Integer |
- |
0 |
| The amount of space between the judgement counters |
| JudgementCounterHorizontal |
True or False |
- |
False |
If set to True, the judgement counter arranges horizontally instead of vertically |
| JudgementCounterFadeToAlpha |
True or False |
- |
False |
If set to True, judgement-counter-overlay changes animation to fade with alpha instead of fading with color |
| UseJudgementColorForNumbers |
True or False |
- |
False |
If set to True, color of numbers in judgement counter will use the color based on of judge colors value set |
Additional Notes:
JudgeColor{Marv, Perf, Great, Good, Okay, Miss} values also affects: Hitlighting tint if enabled in settings, hiterror and hitbubbles.
#Stage Timing Bar
| Value |
Data Type |
Default |
| SongTimeProgressActiveColor |
R,G,B,A (0-255) |
255,231,107,255 |
| The color of the song time progress bar (active) |
| SongTimeProgressInactiveColor |
R,G,B,A (0-255) |
136,136,136,255 |
| The color of the song time progress bar (inactive) |
| SongTimeProgressScale |
Integer |
45 |
| The size of the song’s time progress |
| SongTimeProgressPositionAtTop |
True or False |
False |
If set to True, The song time progress bar will be positioned at the top of the screen |
| TimingLineColor |
R,G,B,A (0-255) |
255,255,255,255 |
| The color of the timing lines |
#Mini song progress bar
| Value |
Data Type |
Default |
| ShowMiniSongBar |
True or False |
False |
If set to True, The mini song progress bar will be displayed |
| MiniSongBarDisplayPosX |
Integer |
75 |
| The X position of the mini song progress bar |
| MiniSongBarDisplayPosY |
Integer |
0 |
| The Y position of the mini song progress bar |
| MiniSongBarDisplayWidthFactor |
Integer |
30 |
| The scaling factor of the mini song progress, where the bar's width is (screen size)/value |
| MiniSongBarDisplayHeight |
Integer |
4 |
| The Height of the mini song progress bar |
#Skip
| Value |
Data Type |
Default |
| SkipDisplayPosX |
Integer |
0 |
| The X position skip |
| SkipDisplayPosY |
Integer |
30 |
| The Y position skip |