mirror of
https://github.com/fmhy/edit.git
synced 2026-01-12 23:11:06 +11:00
Compare commits
2 commits
7318161158
...
a52510a373
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a52510a373 | ||
|
|
076fcbdcee |
14 changed files with 440 additions and 434 deletions
|
|
@ -1,395 +1,401 @@
|
||||||
/**
|
/**
|
||||||
* Copyright (c) 2025 taskylizard. Apache License 2.0.
|
* Copyright (c) 2025 taskylizard. Apache License 2.0.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ref, onMounted, computed } from 'vue'
|
import { ref, onMounted, computed } from 'vue'
|
||||||
import type { DisplayMode, ThemeState, Theme, ModeColors } from './types'
|
import type { DisplayMode, ThemeState, Theme, ModeColors } from './types'
|
||||||
import { themeRegistry } from './configs'
|
import { themeRegistry } from './configs'
|
||||||
|
|
||||||
const STORAGE_KEY_THEME = 'vitepress-theme-name'
|
const STORAGE_KEY_THEME = 'vitepress-theme-name'
|
||||||
const STORAGE_KEY_MODE = 'vitepress-display-mode'
|
const STORAGE_KEY_MODE = 'vitepress-display-mode'
|
||||||
const STORAGE_KEY_AMOLED = 'vitepress-amoled-enabled'
|
const STORAGE_KEY_AMOLED = 'vitepress-amoled-enabled'
|
||||||
|
|
||||||
export class ThemeHandler {
|
export class ThemeHandler {
|
||||||
private state = ref<ThemeState>({
|
private state = ref<ThemeState>({
|
||||||
currentTheme: 'christmas',
|
currentTheme: 'christmas',
|
||||||
currentMode: 'light' as DisplayMode,
|
currentMode: 'light' as DisplayMode,
|
||||||
theme: themeRegistry.christmas
|
theme: themeRegistry.christmas
|
||||||
})
|
})
|
||||||
private amoledEnabled = ref(false)
|
private amoledEnabled = ref(false)
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.initializeTheme()
|
this.initializeTheme()
|
||||||
}
|
}
|
||||||
|
|
||||||
private initializeTheme() {
|
private initializeTheme() {
|
||||||
if (typeof window === 'undefined') return
|
if (typeof window === 'undefined') return
|
||||||
|
|
||||||
// Load saved preferences
|
// Load saved preferences
|
||||||
const savedTheme = localStorage.getItem(STORAGE_KEY_THEME) || 'christmas'
|
const savedTheme = localStorage.getItem(STORAGE_KEY_THEME) || 'christmas'
|
||||||
const savedMode = localStorage.getItem(STORAGE_KEY_MODE) as DisplayMode | null
|
const savedMode = localStorage.getItem(STORAGE_KEY_MODE) as DisplayMode | null
|
||||||
const savedAmoled = localStorage.getItem(STORAGE_KEY_AMOLED) === 'true'
|
const savedAmoledPref = localStorage.getItem(STORAGE_KEY_AMOLED)
|
||||||
|
|
||||||
// Set theme
|
// Set theme
|
||||||
if (themeRegistry[savedTheme]) {
|
if (themeRegistry[savedTheme]) {
|
||||||
this.state.value.currentTheme = savedTheme
|
this.state.value.currentTheme = savedTheme
|
||||||
this.state.value.theme = themeRegistry[savedTheme]
|
this.state.value.theme = themeRegistry[savedTheme]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set amoled preference
|
// Set amoled preference
|
||||||
this.amoledEnabled.value = savedAmoled
|
this.amoledEnabled.value = savedAmoledPref === null ? true : savedAmoledPref === 'true'
|
||||||
|
|
||||||
// Set mode
|
// Set mode
|
||||||
if (savedMode) {
|
if (savedMode) {
|
||||||
this.state.value.currentMode = savedMode
|
this.state.value.currentMode = savedMode
|
||||||
} else {
|
} else {
|
||||||
// Detect system preference for initial mode
|
// Detect system preference for initial mode
|
||||||
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
|
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||||
this.state.value.currentMode = prefersDark ? 'dark' : 'light'
|
this.state.value.currentMode = prefersDark ? 'dark' : 'light'
|
||||||
}
|
}
|
||||||
|
|
||||||
this.applyTheme()
|
|
||||||
|
this.applyTheme()
|
||||||
// Listen for system theme changes (only if user hasn't set a preference)
|
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
// Listen for system theme changes (only if user hasn't set a preference)
|
||||||
if (!localStorage.getItem(STORAGE_KEY_MODE)) {
|
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
||||||
this.state.value.currentMode = e.matches ? 'dark' : 'light'
|
if (!localStorage.getItem(STORAGE_KEY_MODE)) {
|
||||||
this.applyTheme()
|
this.state.value.currentMode = e.matches ? 'dark' : 'light'
|
||||||
}
|
this.applyTheme()
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
|
}
|
||||||
private applyTheme() {
|
|
||||||
if (typeof document === 'undefined') return
|
private applyTheme() {
|
||||||
|
if (typeof document === 'undefined') return
|
||||||
const { currentMode, theme } = this.state.value
|
|
||||||
const modeColors = theme.modes[currentMode]
|
const { currentMode, theme } = this.state.value
|
||||||
|
const modeColors = theme.modes[currentMode]
|
||||||
this.applyDOMClasses(currentMode)
|
|
||||||
this.applyCSSVariables(modeColors, theme)
|
this.applyDOMClasses(currentMode)
|
||||||
}
|
this.applyCSSVariables(modeColors, theme)
|
||||||
|
}
|
||||||
private applyDOMClasses(mode: DisplayMode) {
|
|
||||||
const root = document.documentElement
|
private applyDOMClasses(mode: DisplayMode) {
|
||||||
|
const root = document.documentElement
|
||||||
// Remove all mode classes
|
|
||||||
root.classList.remove('dark', 'light', 'amoled')
|
// Remove all mode classes
|
||||||
|
root.classList.remove('dark', 'light', 'amoled')
|
||||||
// Add current mode class
|
|
||||||
root.classList.add(mode)
|
// Add current mode class
|
||||||
|
root.classList.add(mode)
|
||||||
// Add amoled class if enabled in dark mode
|
|
||||||
if (mode === 'dark' && this.amoledEnabled.value) {
|
// Add amoled class if enabled in dark mode
|
||||||
root.classList.add('amoled')
|
if (mode === 'dark' && this.amoledEnabled.value) {
|
||||||
}
|
root.classList.add('amoled')
|
||||||
|
}
|
||||||
// Add dark class for backward compatibility with VitePress
|
|
||||||
if (mode === 'dark') {
|
// Add dark class for backward compatibility with VitePress
|
||||||
root.classList.add('dark')
|
if (mode === 'dark') {
|
||||||
}
|
root.classList.add('dark')
|
||||||
}
|
}
|
||||||
|
|
||||||
private applyCSSVariables(colors: ModeColors, theme: Theme) {
|
// Remove amoled class if current mode is not 'dark'
|
||||||
if (typeof document === 'undefined') return
|
if (mode !== 'dark') {
|
||||||
|
root.classList.remove('amoled')
|
||||||
const root = document.documentElement
|
}
|
||||||
|
}
|
||||||
// Clear ALL inline styles related to theming to ensure clean slate
|
|
||||||
const allStyleProps = Array.from(root.style)
|
private applyCSSVariables(colors: ModeColors, theme: Theme) {
|
||||||
allStyleProps.forEach(prop => {
|
if (typeof document === 'undefined') return
|
||||||
if (prop.startsWith('--vp-')) {
|
|
||||||
root.style.removeProperty(prop)
|
const root = document.documentElement
|
||||||
}
|
|
||||||
})
|
// Clear ALL inline styles related to theming to ensure clean slate
|
||||||
let bgColor = colors.bg
|
const allStyleProps = Array.from(root.style)
|
||||||
let bgAltColor = colors.bgAlt
|
allStyleProps.forEach(prop => {
|
||||||
let bgElvColor = colors.bgElv
|
if (prop.startsWith('--vp-')) {
|
||||||
|
root.style.removeProperty(prop)
|
||||||
if (this.state.value.currentMode === 'dark' && this.amoledEnabled.value) {
|
}
|
||||||
bgColor = '#000000'
|
})
|
||||||
bgAltColor = '#000000'
|
let bgColor = colors.bg
|
||||||
bgElvColor = 'rgba(0, 0, 0, 0.9)'
|
let bgAltColor = colors.bgAlt
|
||||||
}
|
let bgElvColor = colors.bgElv
|
||||||
|
|
||||||
// Apply brand colors only if theme specifies them
|
if (this.state.value.currentMode === 'dark' && this.amoledEnabled.value) {
|
||||||
// Otherwise, remove inline styles to let ColorPicker CSS take effect
|
bgColor = '#000000'
|
||||||
if (colors.brand && (colors.brand[1] || colors.brand[2] || colors.brand[3] || colors.brand.soft)) {
|
bgAltColor = '#000000'
|
||||||
if (colors.brand[1]) root.style.setProperty('--vp-c-brand-1', colors.brand[1])
|
bgElvColor = 'rgba(0, 0, 0, 0.9)'
|
||||||
if (colors.brand[2]) root.style.setProperty('--vp-c-brand-2', colors.brand[2])
|
}
|
||||||
if (colors.brand[3]) root.style.setProperty('--vp-c-brand-3', colors.brand[3])
|
|
||||||
if (colors.brand.soft) root.style.setProperty('--vp-c-brand-soft', colors.brand.soft)
|
// Apply brand colors only if theme specifies them
|
||||||
} else {
|
// Otherwise, remove inline styles to let ColorPicker CSS take effect
|
||||||
// Remove inline brand color styles so ColorPicker CSS can apply
|
if (colors.brand && (colors.brand[1] || colors.brand[2] || colors.brand[3] || colors.brand.soft)) {
|
||||||
root.style.removeProperty('--vp-c-brand-1')
|
if (colors.brand[1]) root.style.setProperty('--vp-c-brand-1', colors.brand[1])
|
||||||
root.style.removeProperty('--vp-c-brand-2')
|
if (colors.brand[2]) root.style.setProperty('--vp-c-brand-2', colors.brand[2])
|
||||||
root.style.removeProperty('--vp-c-brand-3')
|
if (colors.brand[3]) root.style.setProperty('--vp-c-brand-3', colors.brand[3])
|
||||||
root.style.removeProperty('--vp-c-brand-soft')
|
if (colors.brand.soft) root.style.setProperty('--vp-c-brand-soft', colors.brand.soft)
|
||||||
}
|
} else {
|
||||||
|
// Remove inline brand color styles so ColorPicker CSS can apply
|
||||||
// Apply background colors
|
root.style.removeProperty('--vp-c-brand-1')
|
||||||
root.style.setProperty('--vp-c-bg', bgColor)
|
root.style.removeProperty('--vp-c-brand-2')
|
||||||
root.style.setProperty('--vp-c-bg-alt', bgAltColor)
|
root.style.removeProperty('--vp-c-brand-3')
|
||||||
root.style.setProperty('--vp-c-bg-elv', bgElvColor)
|
root.style.removeProperty('--vp-c-brand-soft')
|
||||||
if (colors.bgMark) {
|
}
|
||||||
root.style.setProperty('--vp-c-bg-mark', colors.bgMark)
|
|
||||||
}
|
// Apply background colors
|
||||||
|
root.style.setProperty('--vp-c-bg', bgColor)
|
||||||
// Apply text colors - always set them to ensure proper theme switching
|
root.style.setProperty('--vp-c-bg-alt', bgAltColor)
|
||||||
if (colors.text) {
|
root.style.setProperty('--vp-c-bg-elv', bgElvColor)
|
||||||
if (colors.text[1]) root.style.setProperty('--vp-c-text-1', colors.text[1])
|
if (colors.bgMark) {
|
||||||
if (colors.text[2]) root.style.setProperty('--vp-c-text-2', colors.text[2])
|
root.style.setProperty('--vp-c-bg-mark', colors.bgMark)
|
||||||
if (colors.text[3]) root.style.setProperty('--vp-c-text-3', colors.text[3])
|
}
|
||||||
} else {
|
|
||||||
// Remove inline styles if theme doesn't specify text colors
|
// Apply text colors - always set them to ensure proper theme switching
|
||||||
// This allows CSS variables from style.scss to take effect
|
if (colors.text) {
|
||||||
root.style.removeProperty('--vp-c-text-1')
|
if (colors.text[1]) root.style.setProperty('--vp-c-text-1', colors.text[1])
|
||||||
root.style.removeProperty('--vp-c-text-2')
|
if (colors.text[2]) root.style.setProperty('--vp-c-text-2', colors.text[2])
|
||||||
root.style.removeProperty('--vp-c-text-3')
|
if (colors.text[3]) root.style.setProperty('--vp-c-text-3', colors.text[3])
|
||||||
}
|
} else {
|
||||||
|
// Remove inline styles if theme doesn't specify text colors
|
||||||
// Debug: log applied text color variables so we can inspect in console
|
// This allows CSS variables from style.scss to take effect
|
||||||
try {
|
root.style.removeProperty('--vp-c-text-1')
|
||||||
// eslint-disable-next-line no-console
|
root.style.removeProperty('--vp-c-text-2')
|
||||||
console.log('[ThemeHandler] applied text vars', {
|
root.style.removeProperty('--vp-c-text-3')
|
||||||
theme: theme.name,
|
}
|
||||||
mode: this.state.value.currentMode,
|
|
||||||
vp_text_1: root.style.getPropertyValue('--vp-c-text-1'),
|
// Debug: log applied text color variables so we can inspect in console
|
||||||
vp_text_2: root.style.getPropertyValue('--vp-c-text-2'),
|
try {
|
||||||
vp_text_3: root.style.getPropertyValue('--vp-c-text-3')
|
// eslint-disable-next-line no-console
|
||||||
})
|
console.log('[ThemeHandler] applied text vars', {
|
||||||
} catch (e) {
|
theme: theme.name,
|
||||||
// ignore
|
mode: this.state.value.currentMode,
|
||||||
}
|
vp_text_1: root.style.getPropertyValue('--vp-c-text-1'),
|
||||||
|
vp_text_2: root.style.getPropertyValue('--vp-c-text-2'),
|
||||||
// Apply button colors
|
vp_text_3: root.style.getPropertyValue('--vp-c-text-3')
|
||||||
root.style.setProperty('--vp-button-brand-bg', colors.button.brand.bg)
|
})
|
||||||
root.style.setProperty('--vp-button-brand-border', colors.button.brand.border)
|
} catch (e) {
|
||||||
root.style.setProperty('--vp-button-brand-text', colors.button.brand.text)
|
// ignore
|
||||||
root.style.setProperty('--vp-button-brand-hover-border', colors.button.brand.hoverBorder)
|
}
|
||||||
root.style.setProperty('--vp-button-brand-hover-text', colors.button.brand.hoverText)
|
|
||||||
root.style.setProperty('--vp-button-brand-hover-bg', colors.button.brand.hoverBg)
|
// Apply button colors
|
||||||
root.style.setProperty('--vp-button-brand-active-border', colors.button.brand.activeBorder)
|
root.style.setProperty('--vp-button-brand-bg', colors.button.brand.bg)
|
||||||
root.style.setProperty('--vp-button-brand-active-text', colors.button.brand.activeText)
|
root.style.setProperty('--vp-button-brand-border', colors.button.brand.border)
|
||||||
root.style.setProperty('--vp-button-brand-active-bg', colors.button.brand.activeBg)
|
root.style.setProperty('--vp-button-brand-text', colors.button.brand.text)
|
||||||
root.style.setProperty('--vp-button-alt-bg', colors.button.alt.bg)
|
root.style.setProperty('--vp-button-brand-hover-border', colors.button.brand.hoverBorder)
|
||||||
root.style.setProperty('--vp-button-alt-text', colors.button.alt.text)
|
root.style.setProperty('--vp-button-brand-hover-text', colors.button.brand.hoverText)
|
||||||
root.style.setProperty('--vp-button-alt-hover-bg', colors.button.alt.hoverBg)
|
root.style.setProperty('--vp-button-brand-hover-bg', colors.button.brand.hoverBg)
|
||||||
root.style.setProperty('--vp-button-alt-hover-text', colors.button.alt.hoverText)
|
root.style.setProperty('--vp-button-brand-active-border', colors.button.brand.activeBorder)
|
||||||
|
root.style.setProperty('--vp-button-brand-active-text', colors.button.brand.activeText)
|
||||||
// Apply custom block colors
|
root.style.setProperty('--vp-button-brand-active-bg', colors.button.brand.activeBg)
|
||||||
const blocks = ['info', 'tip', 'warning', 'danger'] as const
|
root.style.setProperty('--vp-button-alt-bg', colors.button.alt.bg)
|
||||||
blocks.forEach((block) => {
|
root.style.setProperty('--vp-button-alt-text', colors.button.alt.text)
|
||||||
const blockColors = colors.customBlock[block]
|
root.style.setProperty('--vp-button-alt-hover-bg', colors.button.alt.hoverBg)
|
||||||
root.style.setProperty(`--vp-custom-block-${block}-bg`, blockColors.bg)
|
root.style.setProperty('--vp-button-alt-hover-text', colors.button.alt.hoverText)
|
||||||
root.style.setProperty(`--vp-custom-block-${block}-border`, blockColors.border)
|
|
||||||
root.style.setProperty(`--vp-custom-block-${block}-text`, blockColors.text)
|
// Apply custom block colors
|
||||||
root.style.setProperty(`--vp-custom-block-${block}-text-deep`, blockColors.textDeep)
|
const blocks = ['info', 'tip', 'warning', 'danger'] as const
|
||||||
})
|
blocks.forEach((block) => {
|
||||||
|
const blockColors = colors.customBlock[block]
|
||||||
// Apply selection color
|
root.style.setProperty(`--vp-custom-block-${block}-bg`, blockColors.bg)
|
||||||
root.style.setProperty('--vp-c-selection-bg', colors.selection.bg)
|
root.style.setProperty(`--vp-custom-block-${block}-border`, blockColors.border)
|
||||||
|
root.style.setProperty(`--vp-custom-block-${block}-text`, blockColors.text)
|
||||||
// Apply home hero colors (if defined)
|
root.style.setProperty(`--vp-custom-block-${block}-text-deep`, blockColors.textDeep)
|
||||||
if (colors.home) {
|
})
|
||||||
root.style.setProperty('--vp-home-hero-name-color', colors.home.heroNameColor)
|
|
||||||
root.style.setProperty('--vp-home-hero-name-background', colors.home.heroNameBackground)
|
// Apply selection color
|
||||||
root.style.setProperty('--vp-home-hero-image-background-image', colors.home.heroImageBackground)
|
root.style.setProperty('--vp-c-selection-bg', colors.selection.bg)
|
||||||
root.style.setProperty('--vp-home-hero-image-filter', colors.home.heroImageFilter)
|
|
||||||
} else {
|
// Apply home hero colors (if defined)
|
||||||
// Remove home hero color styles if theme doesn't specify them
|
if (colors.home) {
|
||||||
root.style.removeProperty('--vp-home-hero-name-color')
|
root.style.setProperty('--vp-home-hero-name-color', colors.home.heroNameColor)
|
||||||
root.style.removeProperty('--vp-home-hero-name-background')
|
root.style.setProperty('--vp-home-hero-name-background', colors.home.heroNameBackground)
|
||||||
root.style.removeProperty('--vp-home-hero-image-background-image')
|
root.style.setProperty('--vp-home-hero-image-background-image', colors.home.heroImageBackground)
|
||||||
root.style.removeProperty('--vp-home-hero-image-filter')
|
root.style.setProperty('--vp-home-hero-image-filter', colors.home.heroImageFilter)
|
||||||
}
|
} else {
|
||||||
|
// Remove home hero color styles if theme doesn't specify them
|
||||||
// Apply fonts (if defined)
|
root.style.removeProperty('--vp-home-hero-name-color')
|
||||||
if (theme.fonts?.body) {
|
root.style.removeProperty('--vp-home-hero-name-background')
|
||||||
root.style.setProperty('--vp-font-family-base', theme.fonts.body)
|
root.style.removeProperty('--vp-home-hero-image-background-image')
|
||||||
} else {
|
root.style.removeProperty('--vp-home-hero-image-filter')
|
||||||
root.style.removeProperty('--vp-font-family-base')
|
}
|
||||||
}
|
|
||||||
if (theme.fonts?.heading) {
|
// Apply fonts (if defined)
|
||||||
root.style.setProperty('--vp-font-family-heading', theme.fonts.heading)
|
if (theme.fonts?.body) {
|
||||||
} else {
|
root.style.setProperty('--vp-font-family-base', theme.fonts.body)
|
||||||
root.style.removeProperty('--vp-font-family-heading')
|
} else {
|
||||||
}
|
root.style.removeProperty('--vp-font-family-base')
|
||||||
|
}
|
||||||
// Apply border radius (if defined)
|
if (theme.fonts?.heading) {
|
||||||
if (theme.borderRadius) {
|
root.style.setProperty('--vp-font-family-heading', theme.fonts.heading)
|
||||||
root.style.setProperty('--vp-border-radius', theme.borderRadius)
|
} else {
|
||||||
} else {
|
root.style.removeProperty('--vp-font-family-heading')
|
||||||
root.style.removeProperty('--vp-border-radius')
|
}
|
||||||
}
|
|
||||||
|
// Apply border radius (if defined)
|
||||||
// Apply spacing (if defined)
|
if (theme.borderRadius) {
|
||||||
if (theme.spacing) {
|
root.style.setProperty('--vp-border-radius', theme.borderRadius)
|
||||||
if (theme.spacing.small) root.style.setProperty('--vp-spacing-small', theme.spacing.small)
|
} else {
|
||||||
else root.style.removeProperty('--vp-spacing-small')
|
root.style.removeProperty('--vp-border-radius')
|
||||||
if (theme.spacing.medium) root.style.setProperty('--vp-spacing-medium', theme.spacing.medium)
|
}
|
||||||
else root.style.removeProperty('--vp-spacing-medium')
|
|
||||||
if (theme.spacing.large) root.style.setProperty('--vp-spacing-large', theme.spacing.large)
|
// Apply spacing (if defined)
|
||||||
else root.style.removeProperty('--vp-spacing-large')
|
if (theme.spacing) {
|
||||||
} else {
|
if (theme.spacing.small) root.style.setProperty('--vp-spacing-small', theme.spacing.small)
|
||||||
root.style.removeProperty('--vp-spacing-small')
|
else root.style.removeProperty('--vp-spacing-small')
|
||||||
root.style.removeProperty('--vp-spacing-medium')
|
if (theme.spacing.medium) root.style.setProperty('--vp-spacing-medium', theme.spacing.medium)
|
||||||
root.style.removeProperty('--vp-spacing-large')
|
else root.style.removeProperty('--vp-spacing-medium')
|
||||||
}
|
if (theme.spacing.large) root.style.setProperty('--vp-spacing-large', theme.spacing.large)
|
||||||
|
else root.style.removeProperty('--vp-spacing-large')
|
||||||
// Apply custom properties (if defined)
|
} else {
|
||||||
if (theme.customProperties) {
|
root.style.removeProperty('--vp-spacing-small')
|
||||||
Object.entries(theme.customProperties).forEach(([key, value]) => {
|
root.style.removeProperty('--vp-spacing-medium')
|
||||||
root.style.setProperty(key, value)
|
root.style.removeProperty('--vp-spacing-large')
|
||||||
})
|
}
|
||||||
}
|
|
||||||
|
// Apply custom properties (if defined)
|
||||||
// Apply custom logo (if defined)
|
if (theme.customProperties) {
|
||||||
if (theme.logo) {
|
Object.entries(theme.customProperties).forEach(([key, value]) => {
|
||||||
root.style.setProperty('--vp-theme-logo', `url(${theme.logo})`)
|
root.style.setProperty(key, value)
|
||||||
} else {
|
})
|
||||||
root.style.removeProperty('--vp-theme-logo')
|
}
|
||||||
}
|
|
||||||
}
|
// Apply custom logo (if defined)
|
||||||
|
if (theme.logo) {
|
||||||
public setTheme(themeName: string) {
|
root.style.setProperty('--vp-theme-logo', `url(${theme.logo})`)
|
||||||
if (!themeRegistry[themeName]) {
|
} else {
|
||||||
console.warn(`Theme "${themeName}" not found. Using christmas theme.`)
|
root.style.removeProperty('--vp-theme-logo')
|
||||||
themeName = 'christmas'
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.state.value.currentTheme = themeName
|
public setTheme(themeName: string) {
|
||||||
this.state.value.theme = themeRegistry[themeName]
|
if (!themeRegistry[themeName]) {
|
||||||
localStorage.setItem(STORAGE_KEY_THEME, themeName)
|
console.warn(`Theme "${themeName}" not found. Using christmas theme.`)
|
||||||
this.applyTheme()
|
themeName = 'christmas'
|
||||||
|
}
|
||||||
// Force re-apply ColorPicker colors if theme doesn't specify brand colors
|
|
||||||
this.ensureColorPickerColors()
|
this.state.value.currentTheme = themeName
|
||||||
}
|
this.state.value.theme = themeRegistry[themeName]
|
||||||
|
localStorage.setItem(STORAGE_KEY_THEME, themeName)
|
||||||
public setMode(mode: DisplayMode) {
|
this.applyTheme()
|
||||||
this.state.value.currentMode = mode
|
|
||||||
localStorage.setItem(STORAGE_KEY_MODE, mode)
|
// Force re-apply ColorPicker colors if theme doesn't specify brand colors
|
||||||
this.applyTheme()
|
this.ensureColorPickerColors()
|
||||||
}
|
}
|
||||||
|
|
||||||
public toggleMode() {
|
public setMode(mode: DisplayMode) {
|
||||||
const currentMode = this.state.value.currentMode
|
this.state.value.currentMode = mode
|
||||||
|
localStorage.setItem(STORAGE_KEY_MODE, mode)
|
||||||
// Toggle between light and dark
|
this.applyTheme()
|
||||||
const newMode: DisplayMode = currentMode === 'light' ? 'dark' : 'light'
|
}
|
||||||
|
|
||||||
this.setMode(newMode)
|
public toggleMode() {
|
||||||
}
|
const currentMode = this.state.value.currentMode
|
||||||
|
|
||||||
public setAmoledEnabled(enabled: boolean) {
|
// Toggle between light and dark
|
||||||
this.amoledEnabled.value = enabled
|
const newMode: DisplayMode = currentMode === 'light' ? 'dark' : 'light'
|
||||||
localStorage.setItem(STORAGE_KEY_AMOLED, enabled.toString())
|
|
||||||
this.applyTheme()
|
this.setMode(newMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
public getAmoledEnabled() {
|
public setAmoledEnabled(enabled: boolean) {
|
||||||
return this.amoledEnabled.value
|
this.amoledEnabled.value = enabled
|
||||||
}
|
localStorage.setItem(STORAGE_KEY_AMOLED, enabled.toString())
|
||||||
|
this.applyTheme()
|
||||||
public toggleAmoled() {
|
}
|
||||||
this.setAmoledEnabled(!this.amoledEnabled.value)
|
|
||||||
}
|
public getAmoledEnabled() {
|
||||||
|
return this.amoledEnabled.value
|
||||||
public getAmoledEnabledRef() {
|
}
|
||||||
return this.amoledEnabled
|
|
||||||
}
|
public toggleAmoled() {
|
||||||
|
this.setAmoledEnabled(!this.amoledEnabled.value)
|
||||||
private ensureColorPickerColors() {
|
}
|
||||||
// If theme doesn't specify brand colors, force ColorPicker to reapply its selection
|
|
||||||
const currentMode = this.state.value.currentMode
|
public getAmoledEnabledRef() {
|
||||||
const modeColors = this.state.value.theme.modes[currentMode]
|
return this.amoledEnabled
|
||||||
|
}
|
||||||
if (!modeColors.brand || !modeColors.brand[1]) {
|
|
||||||
// Trigger a custom event that ColorPicker can listen to
|
private ensureColorPickerColors() {
|
||||||
if (typeof window !== 'undefined') {
|
// If theme doesn't specify brand colors, force ColorPicker to reapply its selection
|
||||||
window.dispatchEvent(new CustomEvent('theme-changed-apply-colors'))
|
const currentMode = this.state.value.currentMode
|
||||||
}
|
const modeColors = this.state.value.theme.modes[currentMode]
|
||||||
}
|
|
||||||
}
|
if (!modeColors.brand || !modeColors.brand[1]) {
|
||||||
|
// Trigger a custom event that ColorPicker can listen to
|
||||||
public getState() {
|
if (typeof window !== 'undefined') {
|
||||||
return this.state
|
window.dispatchEvent(new CustomEvent('theme-changed-apply-colors'))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public getMode() {
|
}
|
||||||
return this.state.value.currentMode
|
|
||||||
}
|
public getState() {
|
||||||
|
return this.state
|
||||||
public getTheme() {
|
}
|
||||||
return this.state.value.currentTheme
|
|
||||||
}
|
public getMode() {
|
||||||
|
return this.state.value.currentMode
|
||||||
public getCurrentTheme() {
|
}
|
||||||
return this.state.value.theme
|
|
||||||
}
|
public getTheme() {
|
||||||
|
return this.state.value.currentTheme
|
||||||
public getAvailableThemes() {
|
}
|
||||||
return Object.keys(themeRegistry).map(key => ({
|
|
||||||
name: key,
|
public getCurrentTheme() {
|
||||||
displayName: themeRegistry[key].displayName
|
return this.state.value.theme
|
||||||
}))
|
}
|
||||||
}
|
|
||||||
|
public getAvailableThemes() {
|
||||||
public isDarkMode() {
|
return Object.keys(themeRegistry).map(key => ({
|
||||||
const mode = this.state.value.currentMode
|
name: key,
|
||||||
return mode === 'dark'
|
displayName: themeRegistry[key].displayName
|
||||||
}
|
}))
|
||||||
|
}
|
||||||
public isAmoledMode() {
|
|
||||||
return this.state.value.currentMode === 'dark' && this.amoledEnabled.value
|
public isDarkMode() {
|
||||||
}
|
const mode = this.state.value.currentMode
|
||||||
}
|
return mode === 'dark'
|
||||||
|
}
|
||||||
// Global theme handler instance
|
|
||||||
let themeHandlerInstance: ThemeHandler | null = null
|
public isAmoledMode() {
|
||||||
|
return this.state.value.currentMode === 'dark' && this.amoledEnabled.value
|
||||||
export function useThemeHandler() {
|
}
|
||||||
if (!themeHandlerInstance) {
|
}
|
||||||
themeHandlerInstance = new ThemeHandler()
|
|
||||||
}
|
// Global theme handler instance
|
||||||
return themeHandlerInstance
|
let themeHandlerInstance: ThemeHandler | null = null
|
||||||
}
|
|
||||||
|
export function useThemeHandler() {
|
||||||
// Composable for use in Vue components
|
if (!themeHandlerInstance) {
|
||||||
export function useTheme() {
|
themeHandlerInstance = new ThemeHandler()
|
||||||
const handler = useThemeHandler()
|
}
|
||||||
const state = handler.getState()
|
return themeHandlerInstance
|
||||||
|
}
|
||||||
onMounted(() => {
|
|
||||||
// Ensure theme is applied on mount
|
// Composable for use in Vue components
|
||||||
handler.setMode(handler.getMode())
|
export function useTheme() {
|
||||||
})
|
const handler = useThemeHandler()
|
||||||
|
const state = handler.getState()
|
||||||
return {
|
|
||||||
mode: computed(() => state.value.currentMode),
|
onMounted(() => {
|
||||||
themeName: computed(() => state.value.currentTheme),
|
// Ensure theme is applied on mount
|
||||||
theme: computed(() => state.value.theme),
|
handler.setMode(handler.getMode())
|
||||||
setMode: (mode: DisplayMode) => handler.setMode(mode),
|
})
|
||||||
setTheme: (themeName: string) => handler.setTheme(themeName),
|
|
||||||
toggleMode: () => handler.toggleMode(),
|
return {
|
||||||
getAvailableThemes: () => handler.getAvailableThemes(),
|
mode: computed(() => state.value.currentMode),
|
||||||
isDarkMode: () => handler.isDarkMode(),
|
themeName: computed(() => state.value.currentTheme),
|
||||||
isAmoledMode: () => handler.isAmoledMode(),
|
theme: computed(() => state.value.theme),
|
||||||
amoledEnabled: handler.getAmoledEnabledRef(),
|
setMode: (mode: DisplayMode) => handler.setMode(mode),
|
||||||
setAmoledEnabled: (enabled: boolean) => handler.setAmoledEnabled(enabled),
|
setTheme: (themeName: string) => handler.setTheme(themeName),
|
||||||
toggleAmoled: () => handler.toggleAmoled(),
|
toggleMode: () => handler.toggleMode(),
|
||||||
state
|
getAvailableThemes: () => handler.getAvailableThemes(),
|
||||||
}
|
isDarkMode: () => handler.isDarkMode(),
|
||||||
}
|
isAmoledMode: () => handler.isAmoledMode(),
|
||||||
|
amoledEnabled: handler.getAmoledEnabledRef(),
|
||||||
|
setAmoledEnabled: (enabled: boolean) => handler.setAmoledEnabled(enabled),
|
||||||
|
toggleAmoled: () => handler.toggleAmoled(),
|
||||||
|
state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -329,6 +329,7 @@
|
||||||
|
|
||||||
* ⭐ **[Exportify](https://exportify.app/)** / [GitHub](https://github.com/watsonbox/exportify) or [spotify-backup](https://github.com/caseychu/spotify-backup) - Export Playlists
|
* ⭐ **[Exportify](https://exportify.app/)** / [GitHub](https://github.com/watsonbox/exportify) or [spotify-backup](https://github.com/caseychu/spotify-backup) - Export Playlists
|
||||||
* ⭐ **[spotgen](https://epsil.github.io/spotgen)**, [chat jams](https://www.chatjams.ai/), [Unheard.FM](https://unheard.fm/) or [Chosic](https://www.chosic.com/) - Playlist Generators
|
* ⭐ **[spotgen](https://epsil.github.io/spotgen)**, [chat jams](https://www.chatjams.ai/), [Unheard.FM](https://unheard.fm/) or [Chosic](https://www.chosic.com/) - Playlist Generators
|
||||||
|
* [Spoqify](https://spoqify.com/) - Anonymous Playlist Generator
|
||||||
* [SpotTransfer](https://spot-transfer.vercel.app/) / [GitHub](https://github.com/Pushan2005/SpotTransfer), [Trikatuka](https://trikatuka.aknakn.eu/) or [Spotify2YouTubeMusic](https://github.com/mahdi-y/Spotify2YoutubeMusic) - Playlist Transfer Tools
|
* [SpotTransfer](https://spot-transfer.vercel.app/) / [GitHub](https://github.com/Pushan2005/SpotTransfer), [Trikatuka](https://trikatuka.aknakn.eu/) or [Spotify2YouTubeMusic](https://github.com/mahdi-y/Spotify2YoutubeMusic) - Playlist Transfer Tools
|
||||||
* [Playlist Hospital](https://playlisthospital.com/) - Restore Disabled Songs in Spotify Playlists
|
* [Playlist Hospital](https://playlisthospital.com/) - Restore Disabled Songs in Spotify Playlists
|
||||||
* [Spotlistr](https://www.spotlistr.com/) - Platform-to-Spotify Playlist Converter
|
* [Spotlistr](https://www.spotlistr.com/) - Platform-to-Spotify Playlist Converter
|
||||||
|
|
@ -677,7 +678,6 @@
|
||||||
* [Music-Map](https://www.music-map.com/), [Musicroamer](https://www.musicroamer.com/), [Music Galaxy](https://galaxy.spotifytrack.net/), [Unchartify](https://unchartify.com/) / [Telegram](https://t.me/spotifyuncharted), [SAGE](https://hate5six.com/sage), [LivePlasma](https://liveplasma.com/) or [GNOD](https://www.gnod.com/) - Artist Discovery Tools
|
* [Music-Map](https://www.music-map.com/), [Musicroamer](https://www.musicroamer.com/), [Music Galaxy](https://galaxy.spotifytrack.net/), [Unchartify](https://unchartify.com/) / [Telegram](https://t.me/spotifyuncharted), [SAGE](https://hate5six.com/sage), [LivePlasma](https://liveplasma.com/) or [GNOD](https://www.gnod.com/) - Artist Discovery Tools
|
||||||
* [Kworb](https://kworb.net/), [Spotify Charts](https://charts.spotify.com/home) or [SuperFridayChart](https://www.superfridaychart.com/) - Music Top Charts
|
* [Kworb](https://kworb.net/), [Spotify Charts](https://charts.spotify.com/home) or [SuperFridayChart](https://www.superfridaychart.com/) - Music Top Charts
|
||||||
* [BoilTheFrog](http://boilthefrog.playlistmachinery.com/) - Create Playlist from 2 Artists
|
* [BoilTheFrog](http://boilthefrog.playlistmachinery.com/) - Create Playlist from 2 Artists
|
||||||
* [Spoqify](https://spoqify.com/) - Anonymous Playlist Generator
|
|
||||||
* [Chosic](https://www.chosic.com/), [lazyrecords](https://lazyrecords.app/), [SongsLikeX](https://songslikex.com/), [Discover Quickly](https://discoverquickly.com/), [TapeFear](https://www.tapefear.com/), [Dubolt](https://dubolt.com/) or [Playlost.fm](https://playlost.fm/) - Song Discovery Tools
|
* [Chosic](https://www.chosic.com/), [lazyrecords](https://lazyrecords.app/), [SongsLikeX](https://songslikex.com/), [Discover Quickly](https://discoverquickly.com/), [TapeFear](https://www.tapefear.com/), [Dubolt](https://dubolt.com/) or [Playlost.fm](https://playlost.fm/) - Song Discovery Tools
|
||||||
* [Random Song](https://randomsong.org/), [Random Song Generator](https://randomsonggenerator.com/), [SampleRoulette](https://www.sampleroulette.io/) or [Samplette](https://samplette.io/) - Play Random YouTube Songs
|
* [Random Song](https://randomsong.org/), [Random Song Generator](https://randomsonggenerator.com/), [SampleRoulette](https://www.sampleroulette.io/) or [Samplette](https://samplette.io/) - Play Random YouTube Songs
|
||||||
* [Best Ever Albums](https://www.besteveralbums.com/index.php) - Discover Albums
|
* [Best Ever Albums](https://www.besteveralbums.com/index.php) - Discover Albums
|
||||||
|
|
|
||||||
|
|
@ -665,7 +665,7 @@
|
||||||
|
|
||||||
* 🌐 **[Awesome Kotlin](https://kotlin.link/)** - Kotlin Resources / [GitHub](https://github.com/Heapy/awesome-kotlin)
|
* 🌐 **[Awesome Kotlin](https://kotlin.link/)** - Kotlin Resources / [GitHub](https://github.com/Heapy/awesome-kotlin)
|
||||||
* 🌐 **[Obfuscator List](https://github.com/3000IQPlay/obfuscator-list)** - Java Obfuscator Index
|
* 🌐 **[Obfuscator List](https://github.com/3000IQPlay/obfuscator-list)** - Java Obfuscator Index
|
||||||
* [Recaf](https://www.coley.software/Recaf/) - Java Bytecode Editor
|
* [Recaf](https://www.coley.software/Recaf/) - Java Bytecode Editor / [GUI](https://github.com/Col-E/Recaf-Launcher/)
|
||||||
* [bytecode-viewer](https://bytecodeviewer.com), [jd-gui](https://github.com/java-decompiler/jd-gui), [Krakatau](https://github.com/Storyyeller/Krakatau), [Luyten](https://github.com/deathmarine/Luyten), [Vineflower](https://github.com/Vineflower/vineflower) or [Fernflower](https://github.com/fesh0r/fernflower) - Java Decompilers
|
* [bytecode-viewer](https://bytecodeviewer.com), [jd-gui](https://github.com/java-decompiler/jd-gui), [Krakatau](https://github.com/Storyyeller/Krakatau), [Luyten](https://github.com/deathmarine/Luyten), [Vineflower](https://github.com/Vineflower/vineflower) or [Fernflower](https://github.com/fesh0r/fernflower) - Java Decompilers
|
||||||
* [JEnv For Windows](https://github.com/FelixSelter/JEnv-for-Windows) - Change Java Version
|
* [JEnv For Windows](https://github.com/FelixSelter/JEnv-for-Windows) - Change Java Version
|
||||||
* [WhichJDK](https://whichjdk.com/) - JDK Version Cheatsheet / Info
|
* [WhichJDK](https://whichjdk.com/) - JDK Version Cheatsheet / Info
|
||||||
|
|
|
||||||
|
|
@ -997,6 +997,7 @@
|
||||||
* 🌐 **[Awesome YouTubers](https://github.com/JoseDeFreitas/awesome-youtubers)** - YouTube Dev Channels Indexes
|
* 🌐 **[Awesome YouTubers](https://github.com/JoseDeFreitas/awesome-youtubers)** - YouTube Dev Channels Indexes
|
||||||
* 🌐 **[ProgrammingLearningResources](https://rentry.co/ProgrammingLearningResources)**, [r/LearnProgramming Wiki](https://www.reddit.com/r/learnprogramming/wiki/faq#wiki_getting_started), [Programming Learning Index](https://github.com/bobeff/programming-math-science) or [A-to-Z-Resources-for-Students](https://github.com/dipakkr/A-to-Z-Resources-for-Students) - Programming Learning Resources
|
* 🌐 **[ProgrammingLearningResources](https://rentry.co/ProgrammingLearningResources)**, [r/LearnProgramming Wiki](https://www.reddit.com/r/learnprogramming/wiki/faq#wiki_getting_started), [Programming Learning Index](https://github.com/bobeff/programming-math-science) or [A-to-Z-Resources-for-Students](https://github.com/dipakkr/A-to-Z-Resources-for-Students) - Programming Learning Resources
|
||||||
* 🌐 **[Python Discord](https://pythondiscord.com/resources/)** - Python Learning Resources
|
* 🌐 **[Python Discord](https://pythondiscord.com/resources/)** - Python Learning Resources
|
||||||
|
* 🌐 **[Roadmap](https://roadmap.sh/)** - Developer Roadmaps / [GitHub](https://github.com/kamranahmedse/developer-roadmap)
|
||||||
* 🌐 **[Path to Senior Engineer](https://github.com/jordan-cutler/path-to-senior-engineer-handbook)** or [Professional Programming](https://github.com/charlax/professional-programming) - Software Engineer Resources
|
* 🌐 **[Path to Senior Engineer](https://github.com/jordan-cutler/path-to-senior-engineer-handbook)** or [Professional Programming](https://github.com/charlax/professional-programming) - Software Engineer Resources
|
||||||
* ↪️ **[Programming Books](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/reading#wiki_.25B7_programming_books)** - Read / Download Programming Books
|
* ↪️ **[Programming Books](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/reading#wiki_.25B7_programming_books)** - Read / Download Programming Books
|
||||||
* ⭐ **[freeCodeCamp](https://www.freecodecamp.org/)** - Programming / Courses / Interactive
|
* ⭐ **[freeCodeCamp](https://www.freecodecamp.org/)** - Programming / Courses / Interactive
|
||||||
|
|
@ -1010,7 +1011,6 @@
|
||||||
* [Learn Git Branching](https://learngitbranching.js.org/) - Interactive Git Branching Guide
|
* [Learn Git Branching](https://learngitbranching.js.org/) - Interactive Git Branching Guide
|
||||||
* [Git Time](https://git.bradwoods.io/) - Git Learning Game
|
* [Git Time](https://git.bradwoods.io/) - Git Learning Game
|
||||||
* [DevToolTips](https://devtoolstips.org/) - Developer Tips
|
* [DevToolTips](https://devtoolstips.org/) - Developer Tips
|
||||||
* [Roadmap](https://roadmap.sh/) - Developer Roadmaps / [GitHub](https://github.com/kamranahmedse/developer-roadmap)
|
|
||||||
* [Checki0](https://checkio.org/) - Code Learning Games
|
* [Checki0](https://checkio.org/) - Code Learning Games
|
||||||
* [Scrimba](https://scrimba.com/) - Interactive Programming Courses
|
* [Scrimba](https://scrimba.com/) - Interactive Programming Courses
|
||||||
* [CloudSkillsBoost](https://www.cloudskillsboost.google/paths) - Programming Courses
|
* [CloudSkillsBoost](https://www.cloudskillsboost.google/paths) - Programming Courses
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,6 @@
|
||||||
* [PDFGrep](https://pdfgrep.org/) or [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF) - PDF Text Search
|
* [PDFGrep](https://pdfgrep.org/) or [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF) - PDF Text Search
|
||||||
* [PDFEncrypt](https://pdfencrypt.net/) - PDF File Encryption
|
* [PDFEncrypt](https://pdfencrypt.net/) - PDF File Encryption
|
||||||
* [GraphPaper](https://incompetech.com/graphpaper/) - PDF Graphs
|
* [GraphPaper](https://incompetech.com/graphpaper/) - PDF Graphs
|
||||||
* [Aspose](https://products.aspose.app/pdf/annotation) or [pdf-unstamper](https://github.com/hwding/pdf-unstamper) - PDF Watermark Remover
|
|
||||||
* [PDF Fixer](https://pdffixer.com/) - Repair Damaged PDFs
|
* [PDF Fixer](https://pdffixer.com/) - Repair Damaged PDFs
|
||||||
* [OpenSign](https://github.com/OpenSignLabs/OpenSign), [Signature PDF](https://pdf.24eme.fr/) / [GitHub](https://github.com/24eme/signaturepdf), [FalsiScan](https://gitlab.com/edouardklein/falsisign), [JustSignPDF](https://justsignpdf.com/) or [Adobe Sign](https://www.adobe.com/acrobat/online/sign-pdf.html) - PDF Signature Tools
|
* [OpenSign](https://github.com/OpenSignLabs/OpenSign), [Signature PDF](https://pdf.24eme.fr/) / [GitHub](https://github.com/24eme/signaturepdf), [FalsiScan](https://gitlab.com/edouardklein/falsisign), [JustSignPDF](https://justsignpdf.com/) or [Adobe Sign](https://www.adobe.com/acrobat/online/sign-pdf.html) - PDF Signature Tools
|
||||||
* [Google Drive PDF Downloader](https://github.com/zeltox/Google-Drive-PDF-Downloader) - Download Protected Google Drive PDFs
|
* [Google Drive PDF Downloader](https://github.com/zeltox/Google-Drive-PDF-Downloader) - Download Protected Google Drive PDFs
|
||||||
|
|
@ -394,7 +393,7 @@
|
||||||
* [PCloud](https://www.pcloud.com/) - 10GB Free / 1 Year / ~$4 for 1TB
|
* [PCloud](https://www.pcloud.com/) - 10GB Free / 1 Year / ~$4 for 1TB
|
||||||
* [FEB](https://www.febbox.com/) - 1TB Free / 1 Month / ~$4 for 2TB
|
* [FEB](https://www.febbox.com/) - 1TB Free / 1 Month / ~$4 for 2TB
|
||||||
* [Keybase](https://keybase.io/) - 250GB / Forever / [GitHub](https://github.com/keybase/client)
|
* [Keybase](https://keybase.io/) - 250GB / Forever / [GitHub](https://github.com/keybase/client)
|
||||||
* [Proton Drive](https://proton.me/drive) - 2GB Free (or 5GB for tasks) / 1 Year / ~$10 for 1TB
|
* [Proton Drive](https://proton.me/drive) - 5GB Free / 1 Year / ~$10 for 1TB / [Note](https://proton.me/support/more-free-storage-existing-users)
|
||||||
* [JumpShare](https://jumpshare.com/) - 2GB Free / 1 Year / $8.25 for 1TB
|
* [JumpShare](https://jumpshare.com/) - 2GB Free / 1 Year / $8.25 for 1TB
|
||||||
* [FileLu](https://filelu.com/) - 10GB / Forever / **[Expiry Warning](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#filelu-warning)**
|
* [FileLu](https://filelu.com/) - 10GB / Forever / **[Expiry Warning](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#filelu-warning)**
|
||||||
* [CyberFile](https://cyberfile.me/) - 10GB Free
|
* [CyberFile](https://cyberfile.me/) - 10GB Free
|
||||||
|
|
|
||||||
|
|
@ -921,6 +921,7 @@
|
||||||
* ⭐ **[Bloxstrap](https://bloxstraplabs.com/)** / [Discord](https://discord.com/invite/nKjV3mGq6R) / [GitHub](https://github.com/bloxstraplabs/bloxstrap) or [Fishstrap](https://fishstrap.app/) / [GitHub](https://github.com/fishstrap/fishstrap) - Roblox Player Bootstrapper
|
* ⭐ **[Bloxstrap](https://bloxstraplabs.com/)** / [Discord](https://discord.com/invite/nKjV3mGq6R) / [GitHub](https://github.com/bloxstraplabs/bloxstrap) or [Fishstrap](https://fishstrap.app/) / [GitHub](https://github.com/fishstrap/fishstrap) - Roblox Player Bootstrapper
|
||||||
* ⭐ **[Rolimon's](https://www.rolimons.com/games)**, [Rotrends](https://rotrends.com/) or [RoMonitor Stats](https://romonitorstats.com/) - Roblox Analytics / Stats
|
* ⭐ **[Rolimon's](https://www.rolimons.com/games)**, [Rotrends](https://rotrends.com/) or [RoMonitor Stats](https://romonitorstats.com/) - Roblox Analytics / Stats
|
||||||
* [Roblox Studio Mod Manager](https://github.com/MaximumADHD/Roblox-Studio-Mod-Manager) - Roblox Studio Bootstrapper
|
* [Roblox Studio Mod Manager](https://github.com/MaximumADHD/Roblox-Studio-Mod-Manager) - Roblox Studio Bootstrapper
|
||||||
|
* [Rojo](https://github.com/rojo-rbx/rojo) - Use External Code Editors for Roblox Studio Projects
|
||||||
* [Better Discovery](https://www.roblox.com/games/15317947079/) - Game Discovery
|
* [Better Discovery](https://www.roblox.com/games/15317947079/) - Game Discovery
|
||||||
* [RBXServers](https://rbxservers.xyz/) or [FreeVIPServers](https://freevipservers.net/) - Roblox VIP Servers
|
* [RBXServers](https://rbxservers.xyz/) or [FreeVIPServers](https://freevipservers.net/) - Roblox VIP Servers
|
||||||
* [RobloxDen](https://robloxden.com/) or [Rocodes](https://rocodes.gg/) - Track Roblox Promo Codes
|
* [RobloxDen](https://robloxden.com/) or [Rocodes](https://rocodes.gg/) - Track Roblox Promo Codes
|
||||||
|
|
|
||||||
|
|
@ -275,7 +275,7 @@
|
||||||
* ⭐ **[Heroic Games Launcher](https://heroicgameslauncher.com/)** - Epic / GOG / Prime Games Launcher / [Discord](https://discord.com/invite/rHJ2uqdquK) / [GitHub](https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher)
|
* ⭐ **[Heroic Games Launcher](https://heroicgameslauncher.com/)** - Epic / GOG / Prime Games Launcher / [Discord](https://discord.com/invite/rHJ2uqdquK) / [GitHub](https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher)
|
||||||
* ⭐ **[Lutris](https://lutris.net/)** - Games Manager / [Discord](https://discord.com/invite/Pnt5CuY)
|
* ⭐ **[Lutris](https://lutris.net/)** - Games Manager / [Discord](https://discord.com/invite/Pnt5CuY)
|
||||||
* ⭐ **[proton-ge-custom](https://github.com/GloriousEggroll/proton-ge-custom)** - Play Windows Games on Linux / [Guide](https://www.reddit.com/r/LinuxCrackSupport/comments/yqfirv/how_to_install_fitgirl_or_dodi_windows_repacks_in/)
|
* ⭐ **[proton-ge-custom](https://github.com/GloriousEggroll/proton-ge-custom)** - Play Windows Games on Linux / [Guide](https://www.reddit.com/r/LinuxCrackSupport/comments/yqfirv/how_to_install_fitgirl_or_dodi_windows_repacks_in/)
|
||||||
* ⭐ **[ProtonPlus](https://github.com/Vysp3r/ProtonPlus)**, [ProtonUp-QT](https://github.com/DavidoTek/ProtonUp-Qt/) or [Proton Sarek](https://github.com/pythonlover02/Proton-Sarek) (old gpus) - Linux Game Launcher Compatibility Managers
|
* ⭐ **[ProtonPlus](https://github.com/Vysp3r/ProtonPlus)**, [ProtonUp-QT](https://davidotek.github.io/protonup-qt/) / [GitHub](https://github.com/DavidoTek/ProtonUp-Qt/) or [Proton Sarek](https://github.com/pythonlover02/Proton-Sarek) (old gpus) - Linux Game Launcher Compatibility Managers
|
||||||
* ⭐ **[Kapital Sin](https://www.kapitalsin.com/forum/index.php?board=4.0)** - Linux Games / Use [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators)
|
* ⭐ **[Kapital Sin](https://www.kapitalsin.com/forum/index.php?board=4.0)** - Linux Games / Use [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators)
|
||||||
* ⭐ **[Torrminatorr](https://forum.torrminatorr.com/)** - Linux Games / Sign-Up Required
|
* ⭐ **[Torrminatorr](https://forum.torrminatorr.com/)** - Linux Games / Sign-Up Required
|
||||||
* ⭐ **[johncena141](https://1337x.to/user/johncena141/)**, [2](https://1337x.to/user/johncena141/) - Linux Games / [Search](https://games.melroy.org/) / [Support](https://gitlab.com/jc141x/portal)
|
* ⭐ **[johncena141](https://1337x.to/user/johncena141/)**, [2](https://1337x.to/user/johncena141/) - Linux Games / [Search](https://games.melroy.org/) / [Support](https://gitlab.com/jc141x/portal)
|
||||||
|
|
|
||||||
|
|
@ -1477,7 +1477,7 @@ Emailed me to say they are shutting down
|
||||||
* [EnigmaLabs](https://enigmalabs.io/) or [UFO Casebook](https://www.ufocasebook.com/) - UFO Sighting Lists / Tracking
|
* [EnigmaLabs](https://enigmalabs.io/) or [UFO Casebook](https://www.ufocasebook.com/) - UFO Sighting Lists / Tracking
|
||||||
* [BFRO](https://bfro.net/) - Bigfoot Research Site
|
* [BFRO](https://bfro.net/) - Bigfoot Research Site
|
||||||
* [TheShadowlands](https://theshadowlands.net/) - Oldschool Paranormal Research Site
|
* [TheShadowlands](https://theshadowlands.net/) - Oldschool Paranormal Research Site
|
||||||
* [BreezeWiki](https://breezewiki.com/) - Fandom Frontend / [Mirrors](https://docs.breezewiki.com/Links.html#(part._.Mirrors))
|
* [BreezeWiki](https://breezewiki.com/) / [Mirrors](https://docs.breezewiki.com/Links.html#(part._.Mirrors)) or [Phantom](https://ph.kuuro.net/) / [GitHub](https://codeberg.org/phantom-org/phantom) - Fandom Frontends
|
||||||
* [BlackDrago](https://www.blackdrago.com/) - Dragon Encyclopedia
|
* [BlackDrago](https://www.blackdrago.com/) - Dragon Encyclopedia
|
||||||
* [FutureTimeline](https://www.futuretimeline.net/) - Timeline of Future Predictions
|
* [FutureTimeline](https://www.futuretimeline.net/) - Timeline of Future Predictions
|
||||||
* [Doomsday Scoreboard](https://doomsday.march1studios.com/) - Past & Predicted Apocalypse Events / Failed Prediction Scoreboard
|
* [Doomsday Scoreboard](https://doomsday.march1studios.com/) - Past & Predicted Apocalypse Events / Failed Prediction Scoreboard
|
||||||
|
|
|
||||||
|
|
@ -392,7 +392,6 @@
|
||||||
* [Mrkaj](https://mrkaj.si/) - Movies / TV / Anime / 1080p / Region Locked
|
* [Mrkaj](https://mrkaj.si/) - Movies / TV / Anime / 1080p / Region Locked
|
||||||
* [uzi](https://uzi.si) - Movies / TV / Anime / Region Locked
|
* [uzi](https://uzi.si) - Movies / TV / Anime / Region Locked
|
||||||
* [Dupe](https://dupe.cz/) - Movies / TV / Anime / Concerts / 1080p / Region Locked
|
* [Dupe](https://dupe.cz/) - Movies / TV / Anime / Concerts / 1080p / Region Locked
|
||||||
* [uzi](https://uzi.si) - Movies / TV / Anime / Region Locked
|
|
||||||
* [svetserialu](https://svetserialu.io/) - Movies / TV / Anime / 1080p
|
* [svetserialu](https://svetserialu.io/) - Movies / TV / Anime / 1080p
|
||||||
* [sledujfilmy](https://ww.sledujfilmy.io/) or [serialy](https://sledujserialy.io/) - Movies / TV / Anime / 1080p
|
* [sledujfilmy](https://ww.sledujfilmy.io/) or [serialy](https://sledujserialy.io/) - Movies / TV / Anime / 1080p
|
||||||
* [najserialy](https://www.najserialy.io/) - Movies / TV / Anime / 1080p
|
* [najserialy](https://www.najserialy.io/) - Movies / TV / Anime / 1080p
|
||||||
|
|
|
||||||
|
|
@ -296,9 +296,9 @@
|
||||||
|
|
||||||
* ↪️ **[Temp Mail Sites](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools#wiki_.25B7_temp_mail)** - Create Temporary / Throwaway Emails
|
* ↪️ **[Temp Mail Sites](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools#wiki_.25B7_temp_mail)** - Create Temporary / Throwaway Emails
|
||||||
* ↪️ **[Email Aliasing](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools#wiki_.25B7_email_aliasing)** - Create Permanent Anonymous Emails
|
* ↪️ **[Email Aliasing](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools#wiki_.25B7_email_aliasing)** - Create Permanent Anonymous Emails
|
||||||
* ⭐ **[Proton Mail](https://proton.me/mail)** - Encrypted Email / [.onion](https://protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion/) / [Subreddit](https://www.reddit.com/r/ProtonMail/) / [GitHub](https://github.com/ProtonMail)
|
* ⭐ **[Proton Mail](https://proton.me/mail)** - 1GB Free / Encrypted Email / [.onion](https://protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion/) / [Subreddit](https://www.reddit.com/r/ProtonMail/) / [GitHub](https://github.com/ProtonMail) / [Note](https://proton.me/support/more-free-storage-existing-users)
|
||||||
* [Tuta](https://tuta.com/) - Encrypted Email / [Subreddit](https://www.reddit.com/r/tutanota/) / [GitHub](https://github.com/tutao/tutanota)
|
* [Tuta](https://tuta.com/) - 2GB Free / Encrypted Email / [Subreddit](https://www.reddit.com/r/tutanota/) / [GitHub](https://github.com/tutao/tutanota)
|
||||||
* [Disroot](https://disroot.org/en/services/email) - Encrypted Email
|
* [Disroot](https://disroot.org/en/services/email) - 2GB Free / Encrypted Email
|
||||||
* [DNMX](https://dnmx.cc/) - Onion-Based Email
|
* [DNMX](https://dnmx.cc/) - Onion-Based Email
|
||||||
* [Mailvelope](https://mailvelope.com/) - Give Emails PGP Encryption / [GitHub](https://github.com/mailvelope/mailvelope)
|
* [Mailvelope](https://mailvelope.com/) - Give Emails PGP Encryption / [GitHub](https://github.com/mailvelope/mailvelope)
|
||||||
* [Email Privacy Tester](https://www.emailprivacytester.com/) - Email Privacy Test / [GitLab](https://gitlab.com/mikecardwell/ept3)
|
* [Email Privacy Tester](https://www.emailprivacytester.com/) - Email Privacy Test / [GitLab](https://gitlab.com/mikecardwell/ept3)
|
||||||
|
|
|
||||||
|
|
@ -203,7 +203,7 @@
|
||||||
|
|
||||||
* ⭐ **[TheMoeWay](https://learnjapanese.moe/)** / [Discord](https://discord.gg/nhqjydaR8j)
|
* ⭐ **[TheMoeWay](https://learnjapanese.moe/)** / [Discord](https://discord.gg/nhqjydaR8j)
|
||||||
|
|
||||||
[Kakugo](https://github.com/blastrock/kakugo), [Marshall's Site](https://marshallyin.com/), [HeyJapan](https://heyjapan.net/), [Renshuu](https://www.renshuu.org/), [GuideToJapanese](https://guidetojapanese.org/), [jpdb](https://jpdb.io/), [NativShark](https://www.nativshark.com/), [Donkuri](https://donkuri.github.io/learn-japanese/), [Tofugu](https://www.tofugu.com/)
|
[Kakugo](https://github.com/blastrock/kakugo), [Marshall's Site](https://marshallyin.com/), [HeyJapan](https://heyjapan.net/), [Renshuu](https://www.renshuu.org/), [GuideToJapanese](https://guidetojapanese.org/), [jpdb](https://jpdb.io/), [NativShark](https://www.nativshark.com/), [Donkuri](https://donkuri.github.io/learn-japanese/), [Tofugu](https://www.tofugu.com/), [KanaDojo](https://kanadojo.com/en) / [GitHub](https://github.com/lingdojo/kana-dojo)
|
||||||
|
|
||||||
### YouTube Channels
|
### YouTube Channels
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
* ⭐ **[sfsu](https://github.com/winpax/sfsu/)** or [hok](https://github.com/chawyehsu/hok) - Fast Scoop Utilities
|
* ⭐ **[sfsu](https://github.com/winpax/sfsu/)** or [hok](https://github.com/chawyehsu/hok) - Fast Scoop Utilities
|
||||||
* [Chocolatey](https://chocolatey.org/) - Package Manager / [GUI](https://github.com/chocolatey/ChocolateyGUI) / [GitHub](https://github.com/chocolatey/choco)
|
* [Chocolatey](https://chocolatey.org/) - Package Manager / [GUI](https://github.com/chocolatey/ChocolateyGUI) / [GitHub](https://github.com/chocolatey/choco)
|
||||||
* [RuckZuck](https://ruckzuck.tools/) - Package Manager
|
* [RuckZuck](https://ruckzuck.tools/) - Package Manager
|
||||||
* [RepoHub](https://repo-hub.com/) - Package Manager / Web-Based / [GitHub](https://github.com/yusufipk/RepoHub)\
|
* [RepoHub](https://repo-hub.com/) - Package Manager / Web-Based / [GitHub](https://github.com/yusufipk/RepoHub)
|
||||||
* [Topgrade](https://github.com/topgrade-rs/topgrade) - CLI Package Manager
|
* [Topgrade](https://github.com/topgrade-rs/topgrade) - CLI Package Manager
|
||||||
* [Silent Install](https://www.silentinstall.org/) - Build Multi-Program Installers
|
* [Silent Install](https://www.silentinstall.org/) - Build Multi-Program Installers
|
||||||
* [0Install](https://0install.net/) - Decentralized Cross-Platform Package Manager
|
* [0Install](https://0install.net/) - Decentralized Cross-Platform Package Manager
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@
|
||||||
* [DaMagNet](https://damag.net/) - DHT-Based
|
* [DaMagNet](https://damag.net/) - DHT-Based
|
||||||
* [TorrentDownload](https://www.torrentdownload.info/)
|
* [TorrentDownload](https://www.torrentdownload.info/)
|
||||||
* [TorrentQuest](https://torrentquest.com/)
|
* [TorrentQuest](https://torrentquest.com/)
|
||||||
* [TorrentCORE](https://torrentcore.xyz/)
|
|
||||||
* [Cleanbay](https://cleanbay.netlify.app/)
|
* [Cleanbay](https://cleanbay.netlify.app/)
|
||||||
* [CloudTorrents](https://cloudtorrents.com/)
|
* [CloudTorrents](https://cloudtorrents.com/)
|
||||||
* [Torrents-CSV](https://torrents-csv.com/)
|
* [Torrents-CSV](https://torrents-csv.com/)
|
||||||
|
|
|
||||||
|
|
@ -10,28 +10,25 @@
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
* ⭐ **[Cineby](https://www.cineby.gd/)**, [2](https://www.bitcine.app/) or [Fmovies+](https://www.fmovies.gd/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/C2zGTdUbHE)
|
* ⭐ **[Cineby](https://www.cineby.gd/)**, [2](https://www.bitcine.app/) or [Fmovies+](https://www.fmovies.gd/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/C2zGTdUbHE)
|
||||||
* ⭐ **[P-Stream](https://pstream.mov/)** - Movies / TV / Anime / Auto-Next / Watch Parties / [Notes](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#movie-web) / [Discord](https://discord.gg/uHU4knYRPa) / [GitHub](https://github.com/p-stream)
|
* ⭐ **[XPrime](https://xprime.stream/)**, [2](https://xprime.today/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/pDjg5ccSgg)
|
||||||
* ⭐ **[XPrime](https://xprime.stream/)**, [2](https://xprime.today/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/pDjg5ccSgg)
|
* ⭐ **[VeloraTV](https://veloratv.ru/)** or [456movie](https://456movie.net/), [2](https://345movie.net/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/4SJ5c9gZUQ)
|
||||||
* ⭐ **[VeloraTV](https://veloratv.ru/)** or [456movie](https://456movie.net/), [2](https://345movie.net/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/4SJ5c9gZUQ)
|
* ⭐ **[FlickyStream](https://flickystream.ru/)** or [CineMora](https://cinemora.ru/) - Movies / TV / Anime / [Discord](https://discord.com/invite/flickystream)
|
||||||
* ⭐ **[Flixer](https://flixer.sh)**, [Hexa](https://hexa.su/) or [Vidora](https://watch.vidora.su/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.com/invite/yvwWjqvzjE)
|
* ⭐ **[Cinegram](https://cinegram.net/)** - Movies / TV / Anime / Auto-Next
|
||||||
* [Aether](https://aether.mom/), [2](https://legacy.aether.mom/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/MadMF7xb5q)
|
* [Aether](https://aether.mom/), [2](https://legacy.aether.mom/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/MadMF7xb5q)
|
||||||
* [FlickyStream](https://flickystream.ru/) or [CineMora](https://cinemora.ru/) - Movies / TV / Anime / [Discord](https://discord.com/invite/flickystream)
|
|
||||||
* [Rive](https://rivestream.org/), [2](https://rivestream.net/), [3](https://www.rivestream.app/) or [CorsFlix](https://watch.corsflix.net), [2](https://watch.corsflix.dpdns.org/), [3](https://corsflix.net) - Movies / TV / Anime / Auto-Next / [Status](https://rentry.co/rivestream) / [Discord](https://discord.gg/6xJmJja8fV)
|
|
||||||
* [1Shows](https://www.1shows.ru/), [1Flex](https://www.1flex.ru/) or [RgShows](https://www.rgshows.ru/) - Movies / TV / Anime / [Auto Next](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#rgshows-autoplay) / [Guide](https://www.rgshows.ru/guide.html) / [Discord](https://discord.com/invite/K4RFYFspG4)
|
* [1Shows](https://www.1shows.ru/), [1Flex](https://www.1flex.ru/) or [RgShows](https://www.rgshows.ru/) - Movies / TV / Anime / [Auto Next](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#rgshows-autoplay) / [Guide](https://www.rgshows.ru/guide.html) / [Discord](https://discord.com/invite/K4RFYFspG4)
|
||||||
* [Cinegram](https://cinegram.net/) - Movies / TV / Anime / Auto-Next
|
* [Rive](https://rivestream.org/), [2](https://rivestream.net/), [3](https://www.rivestream.app/) or [CorsFlix](https://watch.corsflix.net), [2](https://watch.corsflix.dpdns.org/), [3](https://corsflix.net) - Movies / TV / Anime / Auto-Next / [Status](https://rentry.co/rivestream) / [Discord](https://discord.gg/6xJmJja8fV)
|
||||||
* [SpenFlix](https://watch.spencerdevs.xyz/), [2](https://spenflix.ru/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/RF8vMBRtTs)
|
|
||||||
* [FilmCave](https://filmcave.ru/) - Movies / TV / Anime / Auto-Next / [Telegram](https://t.me/fmcave) / [Discord](https://discord.gg/BtpYzMbDjH)
|
* [FilmCave](https://filmcave.ru/) - Movies / TV / Anime / Auto-Next / [Telegram](https://t.me/fmcave) / [Discord](https://discord.gg/BtpYzMbDjH)
|
||||||
* [Cinema.BZ](https://cinema.bz/) - Movies / TV / Anime / Auto-Next / [Telegram](https://t.me/cinemabz)
|
* [Cinema.BZ](https://cinema.bz/) - Movies / TV / Anime / Auto-Next / [Telegram](https://t.me/cinemabz)
|
||||||
* [PopcornMovies](https://popcornmovies.org/) - Movies / TV / Anime / [Discord](https://discord.com/invite/JAxTMkmcpd)
|
* [SpenFlix](https://watch.spencerdevs.xyz/), [2](https://spenflix.ru/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/RF8vMBRtTs)
|
||||||
* [Cinetaro](https://cinetaro.buzz/) - Movies / TV / Anime / 3rd Party Host
|
* [Cinetaro](https://cinetaro.buzz/) - Movies / TV / Anime / 3rd Party Host
|
||||||
* [Smashystream](https://smashystream.com/), [2](https://flix.smashystream.xyz/), [3](https://smashystream.xyz/) - Movies / TV / Anime / [Telegram](https://telegram.me/+vekZX4KtMPtiYmRl) / [Discord](https://discord.com/invite/tcdcxrbDkE)
|
* [Smashystream](https://smashystream.com/), [2](https://flix.smashystream.xyz/), [3](https://smashystream.xyz/) - Movies / TV / Anime / [Telegram](https://telegram.me/+vekZX4KtMPtiYmRl) / [Discord](https://discord.com/invite/tcdcxrbDkE)
|
||||||
* [TVids](https://www.tvids.to/), [2](https://www.tvids.net/), [3](https://watch-tvseries.net/), [4](https://tvids.me/), [5](https://tvids.tv/) - Movies / TV / Anime / Auto-Next
|
* [TVids](https://www.tvids.to/), [2](https://www.tvids.net/), [3](https://watch-tvseries.net/), [4](https://tvids.me/), [5](https://tvids.tv/) - Movies / TV / Anime / Auto-Next
|
||||||
* [StreamM4u](https://streamm4u.com.co/), [2](https://m4uhd.page/) - Movies / TV / Anime / [Clones](https://rentry.co/sflix#streamm4u-clones)
|
* [StreamM4u](https://streamm4u.com.co/), [2](https://m4uhd.page/) - Movies / TV / Anime / [Clones](https://rentry.co/sflix#streamm4u-clones)
|
||||||
* [BFLIX](https://bflix.sh/) - Movies / TV
|
* [BFLIX](https://bflix.sh/) - Movies / TV
|
||||||
* [MovieHD](https://moviehd.us) - Movies / [Telegram](https://t.me/+NthvAOpP0oNkMWU1)
|
* [MovieHD](https://moviehd.us) - Movies / [Telegram](https://t.me/+NthvAOpP0oNkMWU1)
|
||||||
* [PrimeWire](https://www.primewire.mov/), [2](https://www.primewire.tf/) - Movies / TV / Anime / Mostly 3rd Party Hosts
|
|
||||||
* [StreamDB](https://streamdb.space/) - Movies / TV / 3rd Party Hosts / [Telegram](https://t.me/streamdb_online)
|
* [StreamDB](https://streamdb.space/) - Movies / TV / 3rd Party Hosts / [Telegram](https://t.me/streamdb_online)
|
||||||
|
* [PrimeWire](https://www.primewire.mov/), [2](https://www.primewire.tf/) - Movies / TV / Anime / Mostly 3rd Party Hosts
|
||||||
* [ProjectFreeTV](https://projectfreetv.sx/) - Movies / TV / Anime / 3rd Party Hosts
|
* [ProjectFreeTV](https://projectfreetv.sx/) - Movies / TV / Anime / 3rd Party Hosts
|
||||||
* [Downloads-Anymovies](https://www.downloads-anymovies.co/) - Movies / 3rd Party Hosts
|
* [Downloads-Anymovies](https://www.downloads-anymovies.co/) - Movies / 3rd Party Hosts
|
||||||
* [Streaming CSE](https://cse.google.com/cse?cx=006516753008110874046:cfdhwy9o57g##gsc.tab=0), [2](https://cse.google.com/cse?cx=006516753008110874046:o0mf6t-ugea##gsc.tab=0), [3](https://cse.google.com/cse?cx=98916addbaef8b4b6), [4](https://cse.google.com/cse?cx=0199ade0b25835f2e) - Multi-Site Search
|
* [Streaming CSE](https://cse.google.com/cse?cx=006516753008110874046:cfdhwy9o57g##gsc.tab=0), [2](https://cse.google.com/cse?cx=006516753008110874046:o0mf6t-ugea##gsc.tab=0), [3](https://cse.google.com/cse?cx=98916addbaef8b4b6), [4](https://cse.google.com/cse?cx=0199ade0b25835f2e) - Multi-Site Search
|
||||||
|
|
@ -44,30 +41,33 @@
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
* ⭐ **[BEECH](https://www.beech.watch/)** - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/FekgaSAtJa)
|
* ⭐ **[Flixer](https://flixer.sh)**, [Hexa](https://hexa.su/) or [Vidora](https://watch.vidora.su/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.com/invite/yvwWjqvzjE)
|
||||||
* ⭐ **[CinemaOS](https://cinemaos.live/)**, [2](https://cinemaos.tech/), [3](https://cinemaos.me/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/38yFnFCJnA)
|
* ⭐ **[BEECH](https://www.beech.watch/)** - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/FekgaSAtJa)
|
||||||
* ⭐ **[Filmex](https://filmex.to/)**, [2](https://fmovies4u.com/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.com/invite/WWrWnG8qmh)
|
* ⭐ **[CinemaOS](https://cinemaos.live/)**, [2](https://cinemaos.tech/), [3](https://cinemaos.me/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/38yFnFCJnA)
|
||||||
* ⭐ **[Cinezo](https://www.cinezo.net/)** or [Yenime](https://yenime.net/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/Gx27YMK73d)
|
* ⭐ **[Filmex](https://filmex.to/)**, [2](https://fmovies4u.com/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.com/invite/WWrWnG8qmh)
|
||||||
|
* ⭐ **[Vidbox](https://vidbox.cc/)**, [2](https://cinehd.cc/), [3](https://hotflix.to/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/VGQKGPM9Ej)
|
||||||
|
* [P-Stream](https://pstream.mov/) - Movies / TV / Anime / Auto-Next / [Notes](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#movie-web) / [Discord](https://discord.gg/uHU4knYRPa) / [GitHub](https://github.com/p-stream)
|
||||||
* [Primeshows](https://www.primeshows.live/) or [Netflex](https://netflex.uk/) - Movies / TV / Anime / [Discord](https://discord.com/invite/t2PnzRgKeM)
|
* [Primeshows](https://www.primeshows.live/) or [Netflex](https://netflex.uk/) - Movies / TV / Anime / [Discord](https://discord.com/invite/t2PnzRgKeM)
|
||||||
* [Vidbox](https://vidbox.cc/), [2](https://cinehd.cc/), [3](https://hotflix.to/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/VGQKGPM9Ej)
|
|
||||||
* [Bludclart](https://watch.bludclart.com/), [2](https://watch.streamflix.one/) - Movies / TV / Anime / [Add Sources](https://greasyfork.org/en/scripts/538940) / [Discord](https://discord.gg/5Am2QQW6qZ)
|
|
||||||
* [LordFlix](https://lordflix.club/) - Movies / TV / Anime / Auto-Next / Watch Parties / [Discord](https://discord.gg/JeMDzxSbhH)
|
|
||||||
* [Poprink](https://popr.ink/), [2](https://nidoe.me/) - Movies / TV / Anime / Watch Parties / [Telegram](https://t.me/vlopstreaming) / [Discord](https://discord.gg/GzXQWKUbjh)
|
|
||||||
* [Willow](https://willow.arlen.icu/), [2](https://salix.pages.dev/) - Movies / TV / Anime / [4K Guide](https://rentry.co/willow-guide) / [Telegram](https://t.me/+8OiKICptQwA4YTJk) / [Discord](https://discord.com/invite/gmXvwcmxWR)
|
* [Willow](https://willow.arlen.icu/), [2](https://salix.pages.dev/) - Movies / TV / Anime / [4K Guide](https://rentry.co/willow-guide) / [Telegram](https://t.me/+8OiKICptQwA4YTJk) / [Discord](https://discord.com/invite/gmXvwcmxWR)
|
||||||
|
* [LordFlix](https://lordflix.club/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/JeMDzxSbhH)
|
||||||
* [VoidFlix](https://voidflix.pages.dev/) or [Flixzy](https://flixzy.pages.dev/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/GDfP8S243T)
|
* [VoidFlix](https://voidflix.pages.dev/) or [Flixzy](https://flixzy.pages.dev/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/GDfP8S243T)
|
||||||
* [Cinevibe](https://cinevibe.asia/) - Movies / TV / Anime / [Discord](https://discord.com/invite/4BU2XbAPdu)
|
* [Cinezo](https://www.cinezo.net/) or [Yenime](https://yenime.net/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/Gx27YMK73d)
|
||||||
* [Mapple.tv](https://mappl.tv/) - Movies / TV / Anime / Watch Parties / [Discord](https://discord.gg/V8XUhQb2MZ)
|
* [Bludclart](https://watch.bludclart.com/), [2](https://watch.streamflix.one/) - Movies / TV / Anime / [Add Sources](https://greasyfork.org/en/scripts/538940) / [Discord](https://discord.gg/5Am2QQW6qZ)
|
||||||
|
* [Poprink](https://popr.ink/), [2](https://nidoe.me/) - Movies / TV / Anime / [Telegram](https://t.me/vlopstreaming) / [Discord](https://discord.gg/GzXQWKUbjh)
|
||||||
* [HydraHD](https://hydrahd.com/), [2](https://hydrahd.ru/) - Movies / TV / Anime / Auto-Next / [Status](https://hydrahd.info/)
|
* [HydraHD](https://hydrahd.com/), [2](https://hydrahd.ru/) - Movies / TV / Anime / Auto-Next / [Status](https://hydrahd.info/)
|
||||||
* [Netplay](https://netplayz.live/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/NCH4rzxJ36)
|
* [Netplay](https://netplayz.live/) - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/NCH4rzxJ36)
|
||||||
* [TMovie](https://tmovie.tv/), [2](https://tmovie.cc) - Movies / TV / Anime / [Discord](https://discord.com/invite/R7a6yWMmfK)
|
* [TMovie](https://tmovie.tv/), [2](https://tmovie.cc) - Movies / TV / Anime / [Discord](https://discord.com/invite/R7a6yWMmfK)
|
||||||
* [1PrimeShows](https://1primeshow.online/) - Movies / TV / Anime / [Discord](https://discord.gg/7JKJSbnHqf)
|
* [1PrimeShows](https://1primeshow.online/) - Movies / TV / Anime / [Discord](https://discord.gg/7JKJSbnHqf)
|
||||||
* [Youflex](https://youflex.live/) - Movies / TV / Anime
|
* [Youflex](https://youflex.live/) - Movies / TV / Anime
|
||||||
|
* [Mapple.tv](https://mappl.tv/) - Movies / TV / Anime / [Discord](https://discord.gg/V8XUhQb2MZ)
|
||||||
|
* [Cinevibe](https://cinevibe.asia/) - Movies / TV / Anime / [Discord](https://discord.com/invite/4BU2XbAPdu)
|
||||||
* [Flicker](https://flickermini.pages.dev/), [2](https://flickeraddon.pages.dev/) - Movies / TV / Anime / [Proxy](https://flickerminiproxy.pages.dev/) / [Note](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#flicker-proxy) / [Subreddit](https://www.reddit.com/r/flickermini/)
|
* [Flicker](https://flickermini.pages.dev/), [2](https://flickeraddon.pages.dev/) - Movies / TV / Anime / [Proxy](https://flickerminiproxy.pages.dev/) / [Note](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#flicker-proxy) / [Subreddit](https://www.reddit.com/r/flickermini/)
|
||||||
* [AuroraScreen](https://www.aurorascreen.org/) - Movies / TV / Anime / [Discord](https://discord.com/invite/kPUWwAQCzk)
|
* [AuroraScreen](https://www.aurorascreen.org/) - Movies / TV / Anime / [Discord](https://discord.com/invite/kPUWwAQCzk)
|
||||||
* [Redflix](https://redflix.co/), [2](https://redflix.club/) - Movies / TV / Anime / [Discord](https://discord.gg/wp5SkSWHW5)
|
* [Redflix](https://redflix.co/), [2](https://redflix.club/) - Movies / TV / Anime / [Discord](https://discord.gg/wp5SkSWHW5)
|
||||||
* [Cinepeace](https://cinepeace.in/) - Movies / TV / Anime / [Discord](https://discord.gg/htmB2TbK)
|
* [Cinepeace](https://cinepeace.in/) - Movies / TV / Anime / [Discord](https://discord.gg/htmB2TbK)
|
||||||
* [Flixvo](https://flixvo.live/), [2](https://flixvo.fun/) - Movies / TV / Anime
|
* [Flixvo](https://flixvo.live/), [2](https://flixvo.fun/) - Movies / TV / Anime
|
||||||
* [BoredFlix](https://www.boredflix.com/) - Movies / TV / Anime / [Discord](https://discord.gg/VHDedCcbGY)
|
* [BoredFlix](https://www.boredflix.com/) - Movies / TV / Anime / [Discord](https://discord.gg/VHDedCcbGY)
|
||||||
|
* [PopcornMovies](https://popcornmovies.org/) - Movies / TV / Anime / [Discord](https://discord.com/invite/JAxTMkmcpd)
|
||||||
* [Cinema Deck](https://cinemadeck.com/), [2](https://cinemadeck.st/) - Movies / TV / Anime / [Status](https://cinemadeck.com/official-domains) / [Discord](https://discord.com/invite/tkGPsX5NTT)
|
* [Cinema Deck](https://cinemadeck.com/), [2](https://cinemadeck.st/) - Movies / TV / Anime / [Status](https://cinemadeck.com/official-domains) / [Discord](https://discord.com/invite/tkGPsX5NTT)
|
||||||
* [AlienFlix](https://alienflix.net/), [2](https://hexawatch.cc/) - Movies / TV / Anime
|
* [AlienFlix](https://alienflix.net/), [2](https://hexawatch.cc/) - Movies / TV / Anime
|
||||||
* [CineBolt](https://cinebolt.net/) - Movies / TV / Anime / [Discord](https://discord.gg/7ZbCzMPt6f)
|
* [CineBolt](https://cinebolt.net/) - Movies / TV / Anime / [Discord](https://discord.gg/7ZbCzMPt6f)
|
||||||
|
|
@ -99,7 +99,6 @@
|
||||||
|
|
||||||
* ⭐ **[yFlix](https://yflix.to/)** or [1Movies](https://1movies.bz/) - Movies / TV / Anime / Auto-Next / [Clones](https://rentry.co/sflix#yflix-clones)
|
* ⭐ **[yFlix](https://yflix.to/)** or [1Movies](https://1movies.bz/) - Movies / TV / Anime / Auto-Next / [Clones](https://rentry.co/sflix#yflix-clones)
|
||||||
* ⭐ **[EE3](https://ee3.me/)** or [RIPS](https://rips.cc/) - Movies / Invite Codes: `mpgh` or `1hack` / Sign-Up Required
|
* ⭐ **[EE3](https://ee3.me/)** or [RIPS](https://rips.cc/) - Movies / Invite Codes: `mpgh` or `1hack` / Sign-Up Required
|
||||||
* ⭐ **[Qstream](https://qstream.pages.dev/)** - Movies / TV / Anime
|
|
||||||
* ⭐ **[NEPU](https://nepu.to/)** - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/nepu)
|
* ⭐ **[NEPU](https://nepu.to/)** - Movies / TV / Anime / Auto-Next / [Discord](https://discord.gg/nepu)
|
||||||
* [LookMovie](https://lookmovie2.to/) - Movies / TV / Auto-Next / 480p / [Clones](https://proxymirrorlookmovie.github.io/)
|
* [LookMovie](https://lookmovie2.to/) - Movies / TV / Auto-Next / 480p / [Clones](https://proxymirrorlookmovie.github.io/)
|
||||||
* [Vidsrc.cx](https://vidsrc.cx/) - Movies / TV
|
* [Vidsrc.cx](https://vidsrc.cx/) - Movies / TV
|
||||||
|
|
@ -230,6 +229,7 @@
|
||||||
* [Gojo](https://animetsu.to/), [2](https://animetsu.cc/) - Sub / Dub
|
* [Gojo](https://animetsu.to/), [2](https://animetsu.cc/) - Sub / Dub
|
||||||
* [AnimeZ](https://animeyy.com/) - Sub / Dub
|
* [AnimeZ](https://animeyy.com/) - Sub / Dub
|
||||||
* [JustAnime](https://justanime.to/) - Sub / Dub / Auto-Next / [Discord](https://discord.gg/P3yqksmGun)
|
* [JustAnime](https://justanime.to/) - Sub / Dub / Auto-Next / [Discord](https://discord.gg/P3yqksmGun)
|
||||||
|
* [AniKuro]((https://anikuro.to/), [2](https://anikuro.ru/) - Sub / Dub / [Status](https://anikuro.site/) / [Telegram](https://t.me/+DrD7eAO7R69mZGM0) / [Discord](https://discord.com/invite/Svc9yFjQBq)
|
||||||
* [AnimeNoSub](https://animenosub.to/) - Sub / Dub
|
* [AnimeNoSub](https://animenosub.to/) - Sub / Dub
|
||||||
* [Anime Nexus](https://anime.nexus/) - Sub / Dub / [Discord](https://discord.gg/AfMau96ppt)
|
* [Anime Nexus](https://anime.nexus/) - Sub / Dub / [Discord](https://discord.gg/AfMau96ppt)
|
||||||
* [Anixl](https://anixl.to/) - Sub / Dub / [Discord](https://discord.gg/prmJz2av76)
|
* [Anixl](https://anixl.to/) - Sub / Dub / [Discord](https://discord.gg/prmJz2av76)
|
||||||
|
|
@ -410,7 +410,7 @@
|
||||||
* [Channel 99](https://www.pracdev.org/channel99/) - Random Streams
|
* [Channel 99](https://www.pracdev.org/channel99/) - Random Streams
|
||||||
* [EXP TV](https://linktr.ee/exp.tv) - Rare / Vintage / Obscure Media Stream
|
* [EXP TV](https://linktr.ee/exp.tv) - Rare / Vintage / Obscure Media Stream
|
||||||
* [YTCH](https://ytch.tv/) or [FreeTVz](https://freetvz.com/) - Random TV Style YouTube
|
* [YTCH](https://ytch.tv/) or [FreeTVz](https://freetvz.com/) - Random TV Style YouTube
|
||||||
* [TV.Jest](https://tv.jest.one/), [Split TV](https://split-tv.co.il/) or [WorldNews24](https://worldnews24.tv/) - News
|
* [TV.Jest](https://tv.jest.one/), [Split TV](https://split-tv.co.il/), [StreamSports99 News](https://streamsports99.su/news) or [WorldNews24](https://worldnews24.tv/) - News
|
||||||
* [SHOWROOM](https://showroom-live.com/) - Live Performance Broadcasts
|
* [SHOWROOM](https://showroom-live.com/) - Live Performance Broadcasts
|
||||||
* [KCNA](https://kcnawatch.us/korea-central-tv-livestream) - North Korean Live TV
|
* [KCNA](https://kcnawatch.us/korea-central-tv-livestream) - North Korean Live TV
|
||||||
* [TitanTV](https://titantv.com/) - Live TV Listings
|
* [TitanTV](https://titantv.com/) - Live TV Listings
|
||||||
|
|
@ -435,6 +435,7 @@
|
||||||
* ⭐ **[LiveTV](https://livetv.sx/enx/)**
|
* ⭐ **[LiveTV](https://livetv.sx/enx/)**
|
||||||
* ⭐ **[TimStreams](https://timstreams.site/)**, [2](https://timstreams.online/) - Live Events / [Status](https://timstreams.online/) / [Discord](https://discord.com/invite/p3aJ7rJGrz)
|
* ⭐ **[TimStreams](https://timstreams.site/)**, [2](https://timstreams.online/) - Live Events / [Status](https://timstreams.online/) / [Discord](https://discord.com/invite/p3aJ7rJGrz)
|
||||||
* ⭐ **[WeAreChecking](https://wac.rip/)** - Live Events / Motorsports / [Discord](https://discord.com/invite/wearechecking)
|
* ⭐ **[WeAreChecking](https://wac.rip/)** - Live Events / Motorsports / [Discord](https://discord.com/invite/wearechecking)
|
||||||
|
* [StreamSports99](https://streamsports99.su), [2](https://streamsports99.website/) / [Discord](https://discord.gg/QXKvEbyrVc) / [Telegram](https://t.me/streamsports99)
|
||||||
* [Streamex](https://streamex.cc/) or [CrackStreams](https://crackstreams.li/), [2](https://streameast.art/), [3](https://hesgoal.lol/) - Stream Aggregator / [Discord](https://discord.gg/G4HxTYejNT)
|
* [Streamex](https://streamex.cc/) or [CrackStreams](https://crackstreams.li/), [2](https://streameast.art/), [3](https://hesgoal.lol/) - Stream Aggregator / [Discord](https://discord.gg/G4HxTYejNT)
|
||||||
* [Sportsurge](https://v2.sportsurge.net/home5/) - Stream Aggregator
|
* [Sportsurge](https://v2.sportsurge.net/home5/) - Stream Aggregator
|
||||||
* [SportDB](https://hoofoot.ru/) - Stream Aggregator
|
* [SportDB](https://hoofoot.ru/) - Stream Aggregator
|
||||||
|
|
@ -595,9 +596,9 @@
|
||||||
* ⭐ **[Acer Movies](https://rentry.co/FMHYB64#acer)** - Movies / TV / Anime / [Discord](https://discord.com/invite/hpkMqrwRCE)
|
* ⭐ **[Acer Movies](https://rentry.co/FMHYB64#acer)** - Movies / TV / Anime / [Discord](https://discord.com/invite/hpkMqrwRCE)
|
||||||
* ⭐ **[Scloud](https://rentry.co/FMHYB64#scloud)** - Movies / TV / 4K / [Telegram](https://t.me/scloudmediahub)
|
* ⭐ **[Scloud](https://rentry.co/FMHYB64#scloud)** - Movies / TV / 4K / [Telegram](https://t.me/scloudmediahub)
|
||||||
* ⭐ **[111477](https://rentry.co/FMHYB64#directory-111477)** - Movies / TV / Anime / Directory / [Desktop App](https://playtorrio.pages.dev/) (unofficial) / [Discord](https://discord.gg/YjkP4pANpg)
|
* ⭐ **[111477](https://rentry.co/FMHYB64#directory-111477)** - Movies / TV / Anime / Directory / [Desktop App](https://playtorrio.pages.dev/) (unofficial) / [Discord](https://discord.gg/YjkP4pANpg)
|
||||||
* ⭐ **[DDLBase](https://ddlbase.com/)** - Movies / 4K / 3D / Remuxes
|
|
||||||
* ⭐ **[VegaMovies](https://vegamovies.gripe/)**, [2](https://moviesflix.ad/) - Movies / TV / Anime / 4K / [Telegram](https://telegram.dog/vega_officials)
|
* ⭐ **[VegaMovies](https://vegamovies.gripe/)**, [2](https://moviesflix.ad/) - Movies / TV / Anime / 4K / [Telegram](https://telegram.dog/vega_officials)
|
||||||
* ⭐ **[Pahe](https://pahe.ink/)** - Movies / TV / Anime / 4K / [Ad-Bypass (Must Have)](https://greasyfork.org/en/scripts/443277) / [Discord](https://discord.gg/4AvaCsd2J4)
|
* ⭐ **[Pahe](https://pahe.ink/)** - Movies / TV / Anime / 4K / [Ad-Bypass (Must Have)](https://greasyfork.org/en/scripts/443277) / [Discord](https://discord.gg/4AvaCsd2J4)
|
||||||
|
* ⭐ **[DDLBase](https://ddlbase.com/)** - Movies / 4K / 3D / Remuxes
|
||||||
* ⭐ **[MovieParadise](https://movieparadise.org/)** - Movies / TV / [Sign-Up Code (Important)](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#movieparadise-code)
|
* ⭐ **[MovieParadise](https://movieparadise.org/)** - Movies / TV / [Sign-Up Code (Important)](https://github.com/fmhy/FMHY/wiki/FMHY%E2%80%90Notes.md#movieparadise-code)
|
||||||
* ⭐ **[Rive](https://rivestream.org/)**, [2](https://rivestream.net/) - Movies / TV / Anime / [Status](https://rentry.co/rivestream) / [Discord](https://discord.gg/6xJmJja8fV)
|
* ⭐ **[Rive](https://rivestream.org/)**, [2](https://rivestream.net/) - Movies / TV / Anime / [Status](https://rentry.co/rivestream) / [Discord](https://discord.gg/6xJmJja8fV)
|
||||||
* ⭐ **[1Shows](https://www.1shows.ru/)** or [RgShows](https://www.rgshows.ru/) - Movies / TV / Anime / [Discord](https://discord.com/invite/K4RFYFspG4)
|
* ⭐ **[1Shows](https://www.1shows.ru/)** or [RgShows](https://www.rgshows.ru/) - Movies / TV / Anime / [Discord](https://discord.com/invite/K4RFYFspG4)
|
||||||
|
|
@ -780,6 +781,7 @@
|
||||||
* [TPB Movies](https://thepiratebay.org/search.php?q=top100:200) - Movies / TV / 4K / **Avoid Software / Games**
|
* [TPB Movies](https://thepiratebay.org/search.php?q=top100:200) - Movies / TV / 4K / **Avoid Software / Games**
|
||||||
* [LimeTorrents](https://www.limetorrents.lol/) - Movies / TV
|
* [LimeTorrents](https://www.limetorrents.lol/) - Movies / TV
|
||||||
* [Youplex Torrents](https://torrents.youplex.site/) - Movies / TV / Anime / 4K
|
* [Youplex Torrents](https://torrents.youplex.site/) - Movies / TV / Anime / 4K
|
||||||
|
* [Kontrast](https://kontrast.top/) - ovies / TV
|
||||||
* [MSearch](https://msearch.vercel.app/) - Movies / TV
|
* [MSearch](https://msearch.vercel.app/) - Movies / TV
|
||||||
* [RARBGLite](https://rarbglite.github.io/) - RARBG Movie Magnet Archive
|
* [RARBGLite](https://rarbglite.github.io/) - RARBG Movie Magnet Archive
|
||||||
* [Public Domain Movie Torrents](https://www.publicdomaintorrents.info/) - Movies
|
* [Public Domain Movie Torrents](https://www.publicdomaintorrents.info/) - Movies
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue