a beginner's guide to customising your neocities site ♡
Your site is made up of several HTML files and a folder of images. Here's what each one is:
| File | What it is |
|---|---|
index.html | Your home page - the first thing people see. Always the most important file. |
gallery.html | Your Art Gallery page - shows a grid of your artworks loaded from the images/artgallery/ folder. |
diary.html | Your Media / Diary page - shows a grid of photos, videos, or audio from the images/media/ folder. |
not_found.html | Your 404 error page - shown if someone follows a broken link on your site. |
images/ | A folder containing all the decorative images, gifs, fonts, cursors, and your art/media uploads. |
images/ folder, so replacing one image updates it everywhere it's used.
Neocities has a free tier and a paid Supporter tier. Here's exactly what you can and can't do on a free account:
| File type | Free account? |
|---|---|
HTML files (.html) | ✓ Yes |
CSS files (.css) | ✓ Yes |
JavaScript files (.js) | ✓ Yes |
| Images - PNG, JPG, GIF, WEBP, SVG | ✓ Yes |
Font files (.ttf, .woff) | ✓ Yes |
Text files (.txt, .md) | ✓ Yes |
| Total storage | 1 GB on free accounts |
| MP3 / audio files | ✗ Supporter only - see Section 7b for workarounds |
| MP4 / video files | ✗ Supporter only - see Section 7b for workarounds |
| Custom domain name | ✗ Supporter only |
| Private / unlisted site | ✗ Supporter only |
The easiest way is using Neocities' built-in browser editor — no downloads or installs needed.
index.html. This opens the built-in code editor.images/ folder, either drag it there in the Dashboard after uploading, or name it images/myimage.png (including the folder path) when you upload.
All the personalised text lives inside the HTML files. Here's exactly where to find each piece.
The big glowing title at the top of every page. Open each HTML file and search for:
<h1>Killing Heart♡Darling!</h1>
Replace the text with your own site name. The ♡ is the hollow heart ♡ - keep it, remove it, or add more. This line appears in every HTML file, so update it in index.html, gallery.html, diary.html, and not_found.html separately.
Each page has a short quote that tickers across the browser tab. Search near the bottom of each file inside a <script> tag:
var q = "Life, although it may only be an accumulation of anguish... ♥ ";
var original = '\'Whatever our souls are made of, yours and mine are the same.\' ♥ ';
Replace the text inside the quotes with whatever you want. Leave a couple of spaces at the end so it loops cleanly.
Each page has a small description box in the left sidebar. Search for welcome-body to find it:
<div class="welcome-body">
welcome to my little gallery! here i keep all my drawings.
<br><br>
click any piece to view it in full...
<div style="...">
art is the blood of the soul <!-- small italic quote -->
</div>
</div>
Change any text between the tags. The <br><br> makes a blank line - keep those. Also update the pink title above it by searching for welcome-title:
<div class="welcome-title">♡ art gallery</div>
Search for class="np" to find the sidebar nav links:
<a href="index.html" class="np"><img src="images/kuromi-1.gif" class="nav-kuromi"> Home</a>
<a href="gallery.html" class="np"><img src="images/kuromi-2.gif" class="nav-kuromi"> Art Gallery</a>
<a href="diary.html" class="np"><img src="images/kuromi-3.gif" class="nav-kuromi"> Diary</a>
Change the label text ("Home", "Art Gallery", "Diary") to suit your pages. To add a new page, copy one line and update the href filename and label. To change the small gif, replace images/kuromi-1.gif with the path to any gif you've uploaded.
The dark bar at the bottom of each page. Search for class="pgfoot":
<footer class="pgfoot">
Killing Heart♡Darling!
<span class="fdot">|</span>
<a href="index.html">home</a>
...
</footer>
Change the site name at the start and update the link labels to match your pages. The <span class="fdot">|</span> bits are the separator dots - leave those alone.
Several places across the site contain the placeholder address https://yoursite.neocities.org. You need to replace every occurrence of this with your real Neocities URL before sharing your site. Here's exactly where each one appears:
<!-- search for: yoursite.neocities.org -->
<textarea ...><a href="https://yoursite.neocities.org">
<img src="https://yoursite.neocities.org/images/button.png"...>
</a></textarea>
This is the code visitors copy to put your button on their site. Both URLs must point to your real address — the first is your homepage, the second is your button image.
<a href="https://neocities.org" target="_blank" rel="noopener">neocities profile</a>
The footer on every page links to the Neocities homepage by default. Replace https://neocities.org with your own profile URL, which looks like https://neocities.org/site/yoursite.
yoursite and replace every instance with your actual username.
When someone right-clicks a small popup appears. Search for nocopy-popup:
<div class="nocopy-popup-title">please don't steal</div>
<div class="nocopy-popup-body">all art here belongs to me, please ask before reposting ♡</div>
Change both lines to whatever you like. Keep it short - this popup is tiny!
All decorative images live in the images/ folder. The easiest swap: upload your new image with the exact same filename and the site uses it automatically.
A small gif hanging off the top-right corner of the main card. Search for hanging-charm:
<img class="hanging-charm" src="images/hanging-charm.gif">
The gallery uses images/black-charm.gif instead. Upload a new gif with the same name to replace it, or upload it with any name and update the src to match.
Small decorative gifs between sidebar sections. Search for class="divider":
<div class="divider"><img src="images/coffin.gif"></div>
<div class="divider"><img src="images/bat-divider.gif"></div>
Replace the src values with paths to any gifs you've uploaded - roses, stars, sparkles, hearts, anything.
Two images (images/cursor-1.png and images/cursor-2.png) are swapped every 400ms to make the cursor look animated. To change it, upload your own images with those exact names. Tips:
The site cycles through icon-1.png, icon-2.png, icon-3.png, and icon-4.png every 500ms. Upload your own square images with those names - 32×32 or 64×64 pixels. For a static icon upload four identical images.
setInterval(function(){ fi=(fi+1)%icons.length; setFavicon(fi); }, 500);
The home page has more unique sections than any other page. Here's every editable part and exactly where to find it.
The card in the left column with your photo and personal details. Search for profile-box to find it.
To change the profile picture, upload your image to the images/ folder and update the src:
<img src="images/pfp.png" alt="pfp.png">
To change the info fields, find the profile-about div and replace the text here values after each label. Don't delete the <span> tags — just change the text that follows them:
<div><span style="color:var(--pk3);">name:</span> text here</div>
<div><span style="color:var(--pk3);">age:</span> text here</div>
<div><span style="color:var(--pk3);">from:</span> text here</div>
<div><span style="color:var(--pk3);">likes:</span> text here</div>
You can rename the labels (name, age, from, likes) to anything — just change the text inside the <span> tag.
The main about/intro box in the centre column. Search for welcome-box. There are three things to edit inside it.
The italic subtitle at the top:
<div class="welcome-title">* welcome to Killing Heart Darling!</div>
The welcome image that floats to the right — replace welcome.png with your own image filename:
<img src="images/welcome.png" style="float:right;width:130px;height:130px;...">
The main body text — replace the long block of text here with your actual about/intro:
<!-- replace this with your own text -->
text here text here text here ...
The scrollable log in the centre column. Search for Update Log. New entries go at the top — copy the date label and description for each new update:
<div style="color:var(--pk2);font-family:'Playfair Display'...">18 APR 2026</div>
finished the art gallery
Paste a new date div and description above the existing entries each time you update the site. The box scrolls automatically when it gets long.
The box to the right of the update log — currently empty. Search for image-box-img. To add an image, put an <img> tag inside it:
<!-- before (empty) -->
<div class="image-box-img"></div>
<!-- after (with image) -->
<div class="image-box-img">
<img src="images/myimage.png" alt="description">
</div>
The scrolling row of stamps in the centre column. Search for stamp-inner. Each stamp is one <img> line pointing to a file in images/stamps/:
<img src="images/stamps/stamp1.gif" alt="stamp 1">
<img src="images/stamps/stamp2.gif" alt="stamp 2">
... and so on
To add a stamp upload your gif to images/stamps/ and copy one line with the new filename. To remove one delete the whole <img> line. Stamps should be around 99×56 pixels.
The general-purpose content box in the lower centre column. Search for Box Title to find it:
<div class="sh-plain">Box Title</div>
<div class="sbody">text here text here...</div>
This box can hold anything — a "currently" section, favourite quotes, interests, a to-do list. Just replace the heading and body text.
The player in the right column. Search for music-box. Three things to update — the song title, artist name, and audio file source:
<div class="mp-title">Song Title Here</div>
<div class="mp-artist">Artist Name</div>
...
<source src="images/song.mp3" type="audio/mpeg">
On a free Neocities account you can't upload MP3s directly, so upload your song to Catbox.moe and paste the direct link into the src attribute. See Section 7b for details.
The black box at the top of the right column where visitors can grab your 88×31 button. Search for site-btn-box. Update the button image and the embed code in the textarea:
<!-- your button image -->
<img src="images/button.png" width="88" height="31">
<!-- the code visitors copy to link back to you -->
<textarea ...><a href="https://yoursite.neocities.org">
<img src="https://yoursite.neocities.org/images/button.png"...>
</a></textarea>
Upload your button image as images/button.png (88×31 pixels). Then update both the image src and the two URLs in the textarea with your actual Neocities site address.
The lace-bordered box in the right column for crediting resources and code help. Search for Credits. Each credit is a category label followed by one or more links:
<!-- category label -->
<div style="...">code</div>
<a href="https://lacepicnic.neocities.org" target="_blank">lacepicnic</a>
<div style="...">sozai</div>
<a href="https://nyaa.neocities.org" target="_blank">nyaa.neocities</a>
To add a credit copy a label div and link pair and paste it inside the sbody div. "Sozai" is Japanese for resources/assets — a common Neocities convention for crediting graphics sources.
The box at the bottom of the right column. Search for cmt-box:
<span class="cmt-user">your name</span>
<span class="cmt-time">1 day ago</span>
<div class="cmt-body">text here text here...</div>
Change the name, timestamp, and body text to whatever you want — a quote, a note to visitors, a fun fact.
The list of external links in the right column. Search for links-box. Each link is one <a> line — replace the # with your real URL and update the label text:
<a href="#"><img src="images/kuromi-4.gif"> Instagram</a>
<a href="#"><img src="images/kuromi-5.gif"> Spotify</a>
To add a link copy any <a> line and paste it below. To remove one delete the whole line.
The grid of friend/affiliate buttons at the bottom of the right column. Search for btns-scroll. Replace each placeholder <div class="btn-slot"> with a real button image, optionally wrapped in a link:
<!-- placeholder -->
<div class="btn-slot">88x31</div>
<!-- real button with link -->
<a href="https://friendsite.neocities.org" target="_blank">
<img src="images/friend-button.gif" alt="friend site">
</a>
images/ folder, and use that. Downloading and re-uploading is safer than hotlinking, since the original host could remove the file at any time.
The gallery (gallery.html) auto-builds a grid from the images/artgallery/ folder. You don't write any HTML per image - just upload files and update one number.
Images must be numbered: 1.png, 2.jpg, 3.gif, etc. The page tries each number up to the count you've set. Supported formats: .png, .gif, .webp, .jpg.
images/artgallery/ on Neocities, named as the next number - if you have 1–9, name the new one 10.png.gallery.html and search for GALLERY_COUNT:
var GALLERY_COUNT = 9;images/artgallery/ folder to display correctly. There is no workaround for this; it's a restriction enforced by those hosts.
1.png, 2.png, and 4.png but no 3.png, entry 3 will show as an empty placeholder. Keep numbering continuous.
The media page (diary.html) works the same as the gallery - images go in images/media/, numbered from 1 upwards. The extra feature is you can attach a title, caption, and date to each entry.
images/media/ on Neocities, named as the next number (e.g. 10.jpg).diary.html and find MEDIA_COUNT:
var MEDIA_COUNT = 9;MEDIA_INFO block just below and add a new line:
MEDIA_INFO[10] = { title: 'your title', caption: 'a little caption', date: '23 apr 2026' };
images/media/ folder. The only exception is audio files (covered in Section 7b).
Neocities free accounts cannot host video or audio files. Here's how to handle each type.
Streamable (streamable.com) is a free video hosting site. You upload a video, get a link, and use that on your site. This is the recommended solution for your media page.
.mov files - they will never work regardless of where they're hosted. Use the free tool Handbrake (handbrake.fr) or the online converter at cloudconvert.com to convert .mov → .mp4 before uploading anywhere.
.mp4 file.https://streamable.com/n93n8h)..txt file named after the entry number (e.g. 3.txt) and paste just the Streamable URL inside it. Upload this file to images/media/ on Neocities. The media page will detect it automatically and embed the video.
/* contents of 3.txt */
https://streamable.com/n93n8h
.mov is Apple's proprietary format and browsers do not support it. Even on a Supporter account where you could technically upload it, it still won't play. Always convert to .mp4 first. Handbrake and CloudConvert are both free.
Unlike images and video, audio files can be hosted on Catbox.moe and embedded on your site. Catbox's blocking only affects image and video content, not audio. This makes Catbox the right choice for the "now playing" / song title box if your site has one.
.mp3 or .wav file, and copy the direct link it gives you.<audio> tag (search for <audio) and update its src:
<audio autoplay loop>
<source src="https://files.catbox.moe/xxxxxx.mp3" type="audio/mpeg">
</audio>
images/artgallery/ on Neocitiesimages/media/ on Neocities.txt fileAll four pages share the same colour scheme, defined with CSS variables at the top of each file's <style> section. Search for :root in any HTML file:
:root {
--pk1: #D1D1D1; /* light grey - borders and dashes */
--pk2: #b898a8; /* dusty mauve - links, headings, accents */
--pk3: #7a4a5a; /* deep rose - main text colour */
--pk4: #FDF5FE; /* very pale pink - light backgrounds */
--pk5: #F9F4F6; /* near-white pink - sidebar background */
--bg: #FDF8F5; /* overall page background */
--white: #ffffff; /* pure white */
--txt: #7a4a5a; /* body text */
}
Replace the hex values (#xxxxxx) with your chosen colours. Tips:
--pk2 and --pk3 are the most visible - changing just these two transforms the whole feel.:root block in each HTML file separately since the CSS is embedded in each page.--white as #ffffff unless you specifically want tinted card backgrounds.The header stripe pattern is separate. To change it, search for repeating-linear-gradient inside the .hdr CSS rule and update the colours there.
To add a new page (like an "About Me"), the easiest approach is to duplicate an existing page.
gallery.html or diary.html from your Dashboard - these are the simplest templates to start from.about.html.<title> tag at the top:
<title>About Me ♡ Killing Heart Darling!</title>class="col-mid") and replace everything inside it with your own content. Write text in <p> tags, add images with <img src="...">.about.html to your Neocities Dashboard.class="np") and add:
<a href="about.html" class="np"><img src="images/kuromi-4.gif" class="nav-kuromi"> About Me</a>
<p>Your text here.</p>. For a heading, use <h3 class="sub-title">Heading</h3> - the sub-title class styles it to match the rest of the site automatically.
| Problem | What to check |
|---|---|
| An image isn't showing up | Check the filename in src="..." matches exactly - including uppercase/lowercase letters. Neocities is case-sensitive. Also check the image is actually in the right folder. |
| Gallery or media grid is empty | Images must be numbered from 1 and inside the correct folder (images/artgallery/ or images/media/). Also check GALLERY_COUNT or MEDIA_COUNT is at least 1. |
| Images show as broken icons (small X) | You're almost certainly linking to an image on Catbox or another external host. These block external embedding. Images must be uploaded directly to your Neocities images/ folder. |
| Video won't play | Check it's an .mp4 - .mov files will never play in a browser, full stop. Convert to MP4. Also make sure you're using a Streamable link in a .txt file, not a Catbox link. |
| A gif works on my computer but not the live site | The file exists on your computer but hasn't been uploaded to Neocities yet. Go to your Dashboard and upload it. |
| Page layout looks broken | You probably deleted part of a tag. Paste your code into validator.w3.org (free, online) and it will highlight exactly where the error is. |
| Cursor is invisible | The cursor script hides the default cursor and replaces it with cursor-1.png/cursor-2.png. If those files are missing, there's no cursor at all. Upload them to fix it. |
| Can't undo a mistake | Ctrl+Z works in the editor if you haven't saved yet. If you already saved, you need your local backup - which is exactly why making one before editing is so important. |
| Changes aren't showing on the live site | Hard refresh: Ctrl+Shift+R (Cmd+Shift+R on Mac). Browsers cache old versions aggressively. Also double-check you actually clicked Save. |
| Lace borders / decorations are missing | These use files like images/vertical-lace2.png, images/rhinestone.png, images/header-lace.png, images/lace-box.png. If any are missing from your images/ folder on Neocities, that decoration won't show. |