Automation › Jobs and queue shows the exact line for your server.
2. Add your TMDB key
Movies and series are imported from TMDB. Get a free key at themoviedb.org › Settings › API, then paste the API read access token into System › Integrations. AniList and TVmaze need no key.
3. Fill the library
Import a few titles from Content › Explore and import, or many at once from Automation › Bulk import. See Adding titles.
4. Add your first site
Create it: Sites › All sites › Add site
Point its domain: the site’s Domains and install
Logo, colours and layout: Site settings, Theme settings and Design and blocks
Themes you uploaded are kept. Only the built-in ones are replaced.
Remote sites
When a newer edge file is out, the site’s Domains and install says so. Click Update edge, or for older edges, download the installer again and replace index.php.
Queue and scheduler
Background work: imports, bots, link checks and site syncs.
Automation › Jobs and queue shows whether the scheduler is running, with a setup guide filled in for your server.
Per site: shown by the rules, always shown or hidden, with its own SEO text.
Status and trash
Draft
Hidden from every site.
Published
On every site whose rules match it.
Scheduled
Published by itself when its publish date passes.
Archived
Kept, but off the sites.
Move to trash can be undone. Titles in the trash can be restored or deleted permanently.
Also here
Refresh pulls the latest details from the source. Your own edits to text are kept.
Collections, Genres, Tags and People organise the library. Tags drive site content rules.
Links and media › Media library holds your own uploads, such as logos. Title artwork is never downloaded.
Adding titles
Import one, a list, or thousands. Or let a bot keep the library up to date.
One titleContent › Library › New title
Search by name, or paste a TMDB, AniList or TVmaze link or an IMDb id. Choose the status and tags, and whether to bring seasons, episodes and cast. For a video, paste its link or embed code.
Or choose Create by hand and fill it in yourself.
Explore and importContent
Browse TMDB, AniList and TVmaze lists, such as popular or trending, tick what you want and click Import selected, or Import whole list for several pages at once.
Bulk importAutomation
Paste ids or links
One per line, up to 2,000. Links, IMDb ids, or bare ids for the chosen provider.
CSV file
Columns provider,id,media, or one link per line. Up to 2 MB.
Imports run in the background. Each batch has a report, and Retry for the ones that failed.
BotsAutomation
A bot does one job on a schedule, from every 15 minutes to weekly:
Import a provider list
Such as TMDB trending or this anime season.
Refresh ongoing titles
New episodes and dates for shows still airing.
Check links
Re-checks links and marks dead ones.
Build sitemaps
Keeps every site’s sitemap fresh.
Five bots come ready. Link checker and Sitemaps are on; turn the others on when you’re ready. Bots need the cron job.
API keysSystem › Integrations
TMDB
Needed for movies, series and IMDb ids. Free at themoviedb.org.
AniList, TVmaze
No key. Switch them off if you don’t use them.
YouTube
Optional. Adds length, description and upload date to videos.
Set the import language, region and whether adult titles are skipped in System › General and System › Integrations.
Links and players
Where titles play. All under Links and media.
Add links
Open a title › Links › Add links and paste one address or embed code per line. For a series, spread them across episodes. Each link has:
PlayerStream or downloadQualityAudioFormatSizeLabel
Edit the Audio languages and Format choices in System › Links and players.
Players
Embed
Plays in a frame, such as a video host’s player.
Direct file
Plays an MP4 or HLS stream in the built-in player.
Auto
Builds a link for every title from a template, such as https://host/embed/{tmdb_id}. No pasting needed.
Manual
Only plays the links you add.
Priority sets the order. Each site can offer all of them or its own list.
Keeping links alive
Link checker
Re-checks active links every 72 hours. After 3 failed checks a link is marked dead.
Dead page phrases
Words such as “File not found” that mark a link dead even when the page loads.
Link hosts
Every host found in your links. Allow or block each one; blocked hosts never play.
Reports
Visitors report broken links. Mark the link dead, disable it, or dismiss the report.
Subtitles
Upload or link .vtt, .srt or .ass files, up to 2 MB, and set a default track. SRT is converted for you.
Safe playback
Pages never hold a link’s address, only a signed token that expires after 6 hours.
At play time the link, its host, the title and the player are all checked again.
For the strictest setup, turn on Only play links from allowed hosts in System › Links and players.
Sites
Each site shows part of your library on its own domain, with its own theme.
Add a siteSites › All sites
Click Add site and choose where it runs: On this server or On another host.
Enter the Site name, a tagline and the domain. A local site can get its domain later.
Pick a theme. Its content types fill in for you.
Leave Content empty to show the whole library, or narrow it now. Then Create site.
A local site goes live at once. A remote site waits until you install it. See Domains and remote sites.
Content rules
Which titles the site shows. Open the site › Content rules.
Content types
Movies, series, anime and so on. None chosen shows every type.
Tags
Only titles tagged, with any or all of the tags, and titles never to show.
Filters
Genres, countries, original language, minimum rating, release dates and adult titles.
The side panel counts what your rules match as you change them. Save and rebuild applies them; big libraries rebuild in the background.
Site settings
Status
Online, Maintenance or Draft. Maintenance and Draft show visitors an “unavailable” page.
Branding
Logo, logo on dark and favicon.
Footer
Footer text, a notice and social links.
Custom code
Your own tags inside <head> and before </body>, such as analytics.
Statuses
Online
Live and answering
Awaiting install
A remote site whose file isn’t uploaded yet
Degraded
A remote site that stopped checking in
Offline
A remote site not seen for an hour
Maintenance, Draft
Closed to visitors by you
Domains and remote sites
Point a domain at this server, or run the site on another host.
DomainsSite › Domains and install
Add each domain the site answers on and tick HTTPS where it has a certificate. The primary one is used in links, sitemaps and canonical addresses.
Local siteOn this server
At your registrar, add an A record for the domain, pointing at the Server address the page shows. Cloudflare-proxied records work too.
Add the domain to the same hosting account as the control panel: an alias in cPanel or Plesk, or a server_name in your nginx or Apache config.
Remote siteOn another host
Click Download index.php. The file already holds the site’s key.
Upload it to the domain’s empty web root, such as public_html. The host needs PHP 7.4 or newer with cURL.
Open the site. It connects on the first visit.
The control panel must be reachable from the internet. Remote sites fetch their pages from its APP_URL.
How a remote site works
Pages come from the control panel and are cached in bk-cache, next to index.php.
If the control panel is down, visitors still get cached pages.
It checks in every few minutes while it has visitors, and picks up purges then.
Revoke access gives the site a new key. The old file stops working until you upload a new download.
Themes and design
Pick a theme, then arrange each page with blocks.
Built-in themes
Kitt Movie
Movies and TV shows: big hero, landscape trending cards.
Kitt Anime
Dark first: airing this season, latest episodes, weekly schedule.
Kitt Drama
Asian dramas: ranked trending rows, country chips, airing schedule.
Kitt Manga
Reading first: chapter updates, top charts and a vertical or paged reader.
Kitt Tube
A video portal: category chips, 16:9 grids and an up-next list.
Kitt Embed
An embed provider: a link builder and a player other websites frame.
Kitt Core
The shared base the others build on.
Switch in the site’s Theme settings › Change theme. Each theme keeps its own layouts and settings, so switching back restores them.
Design and blocks
Open the site › Design and blocks and pick a page, such as Home or Title.
Add, drag, hide or duplicate blocks. Each block has its own Settings, and Visibility for devices and dates.
Preview on desktop, tablet and mobile. Changes save as a draft.
Click Publish to make them live.
History keeps the last 15 published versions. Restore one, or start again from the theme’s layout, as a draft.
Also per site
Theme settings
Colours, fonts and defaults, grouped by the theme.
Menus
Header, footer and mobile. An empty mobile menu uses the header’s.
Pages
Your own pages. Starters for About, DMCA, Privacy and Contact.
Add a themeSites › Themes
Upload theme takes a .zip with theme.json at the top, up to 20 MB. It’s checked before anything is replaced, and problems are listed by file and line.
Uploads keep the last 3 versions for 30 days, to Restore from the theme’s page. Theme authors: see docs/THEMES.md.
SEO and URLs
Titles, descriptions and addresses for every page. Open the site › SEO and URLs.
Basics
Title separator, default search engine setting, Google and Bing verification, X handle and a default share image.
Templates
Set the title, description and robots for each kind of page. Click a field to see its placeholders and a search preview:
{site_name}{title}{year}{overview|155}
URLs
Choose the address pattern for each page type, such as /genre/{slug}.
Changing a pattern on a live site breaks links people and search engines already have.
Sitemap and robots.txt
/sitemap.xml is built for you. Leave robots.txt empty to use the automatic one, which points to the sitemap.
Players, embeds and feeds
Which players a site offers, and how other websites use yours.
PlayersSite › Players
By default a site offers every player. Drag to set the order and switch players off to make a custom list. The first one on is what visitors see first.
EmbedsSite › Embed and feeds
Set Allow embedding to Any website or Only these domains. Other sites then frame your player:
/embed/movie/27205
/embed/series/1399/1/1
The id can be a TMDB or IMDb id, tmdb-27205, or id-123 for your own. The page lists the formats for every content type.
Feeds page with ?page= or an ?after= cursor, up to 100 items a page.
The Kitt Embed theme turns on embedding and feeds for you.
Users and roles
Who can sign in to the control panel, and what they can do.
RolesSystem › Users
Role
Can manage
Owner
Everything, including other owners
Admin
Everything except owners
Editor
Library, links, media and imports
Moderator
Links, players, subtitles and reports
Sites, themes and system settings are for owners and admins only. The last active owner can’t be removed.
Activity log
Every change made in the control panel, with who made it and when. System › Activity log
Keep it private
Move the control panel off /admin with BLACKKITT_ADMIN_PATH, or onto its own domain. See .env settings.
Switch off users who no longer need access. Inactive users can’t sign in.
.env settings
Most setup lives in the control panel. These few stay in .env.
The ones you might change
APP_URL
Your control panel’s address, with https://. Remote sites call it.
APP_ENV
production on a live server
APP_DEBUG
Always false on a live server. When true, error pages show your settings.
BLACKKITT_ADMIN_PATH
The control panel’s path. admin by default.
BLACKKITT_ADMIN_DOMAIN
Optional. Run the control panel on a domain of its own.
DB_*
Database connection. DB_CONNECTION is mysql or mariadb.
SESSION_LIFETIME
Minutes before a signed-in admin is signed out
After editing
The settings are cached. Refresh them:
php artisan config:clear
php artisan optimize
Set in the control panel
API keys, caching, the queue mode and link rules are in System. Change them there, not in .env.
Troubleshooting
The usual problems, and the fix for each.
The control panel won’t load
Check the domain points at the public folder, not the project folder.
Read the latest error in storage/logs/laravel.log.
After an upgrade, clear and rebuild the caches:
php artisan optimize:clear
php artisan optimize
A site shows the wrong page
Check the domain is listed in the site’s Domains and install, and that its DNS points at this server. A domain that belongs to no site shows a “not found” page.
A remote site won’t connect
Open the site. Its setup page lists what failed: PHP version, cURL, a writable cache folder, or the connection.
The host must allow outgoing HTTPS, and APP_URL must be a public address.
If you downloaded the installer again or revoked access, upload the newest index.php.
Changes don’t show on a site
Design changes need Publish. Otherwise purge the site in its Cache page. New titles only appear on sites whose content rules match them.
Imports never finish
The cron job isn’t running. Check Automation › Jobs and queue, which says when the scheduler last ran. See Queue and scheduler.
Uploaded images don’t show
php artisan storage:link --force
If it says the link already exists, delete the public/storage folder and run it again. Your uploads are safe in storage/app/public.
The installer says “Already installed”
It locks itself after installing. To start over, delete storage/app/installed.lock and set APP_ENV to local.