mirror of
https://github.com/DerTyp7/obs-twitch-camera-frame.git
synced 2025-10-29 04:42:13 +01:00
first commit
This commit is contained in:
3
config.js
Normal file
3
config.js
Normal file
@@ -0,0 +1,3 @@
|
||||
const CONFIG = {
|
||||
apiKey: "1e8d3bcbc24f95e64672521ccdcf6020e2d64d30",
|
||||
};
|
||||
99
css/animations.css
Normal file
99
css/animations.css
Normal file
@@ -0,0 +1,99 @@
|
||||
@keyframes subAnimation {
|
||||
0% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-1),
|
||||
var(--border-color-2)
|
||||
)
|
||||
1;
|
||||
}
|
||||
10% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-flash-1),
|
||||
var(--border-color-flash-2)
|
||||
)
|
||||
1;
|
||||
}
|
||||
50% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-flash-2),
|
||||
var(--border-color-flash-1)
|
||||
)
|
||||
1;
|
||||
}
|
||||
80% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-flash-1),
|
||||
var(--border-color-flash-2)
|
||||
)
|
||||
1;
|
||||
}
|
||||
100% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-2),
|
||||
var(--border-color-1)
|
||||
)
|
||||
1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes borderAnimation {
|
||||
0% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-2),
|
||||
var(--border-color-1)
|
||||
)
|
||||
1;
|
||||
}
|
||||
50% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-1),
|
||||
var(--border-color-2)
|
||||
)
|
||||
1;
|
||||
}
|
||||
100% {
|
||||
border-image: linear-gradient(
|
||||
to top,
|
||||
var(--border-color-2),
|
||||
var(--border-color-1)
|
||||
)
|
||||
1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes backgroundAnimation {
|
||||
0% {
|
||||
background: var(--border-color-2);
|
||||
}
|
||||
50% {
|
||||
background: var(--border-color-1);
|
||||
}
|
||||
100% {
|
||||
background: var(--border-color-2);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes backgroundSubAnimation {
|
||||
0% {
|
||||
background: var(--border-color-1);
|
||||
}
|
||||
10% {
|
||||
background: var(--border-color-flash-1);
|
||||
}
|
||||
50% {
|
||||
background: var(--border-color-flash-2);
|
||||
}
|
||||
80% {
|
||||
background: var(--border-color-flash-1);
|
||||
}
|
||||
100% {
|
||||
background: var(--border-color-2);
|
||||
}
|
||||
}
|
||||
57
css/style.css
Normal file
57
css/style.css
Normal file
@@ -0,0 +1,57 @@
|
||||
@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap");
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: white;
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
body,
|
||||
html {
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
#frame {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
display: block;
|
||||
border: 10px solid var(--border-color-1);
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
background-color: transparent;
|
||||
box-sizing: border-box;
|
||||
border-image: linear-gradient(
|
||||
to right,
|
||||
var(--border-color-1),
|
||||
var(--border-color-2)
|
||||
)
|
||||
1;
|
||||
transition: border linear 200ms;
|
||||
z-index: 100;
|
||||
animation-name: borderAnimation;
|
||||
animation-iteration-count: infinite;
|
||||
animation-fill-mode: forwards;
|
||||
animation-timing-function: linear;
|
||||
animation-duration: 20s;
|
||||
}
|
||||
|
||||
#subCount {
|
||||
background: var(--border-color-2);
|
||||
height: 20px;
|
||||
padding: 5px;
|
||||
padding-bottom: 10px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
right: 10px;
|
||||
font-size: 17pt;
|
||||
animation-iteration-count: infinite;
|
||||
animation-fill-mode: forwards;
|
||||
animation-timing-function: linear;
|
||||
animation-duration: 20s;
|
||||
animation-name: backgroundAnimation;
|
||||
}
|
||||
7
css/variables.css
Normal file
7
css/variables.css
Normal file
@@ -0,0 +1,7 @@
|
||||
:root {
|
||||
--border-color-1: rgb(139, 0, 0);
|
||||
--border-color-2: rgb(255, 74, 74);
|
||||
|
||||
--border-color-flash-1: rgb(220, 32, 15);
|
||||
--border-color-flash-2: rgb(210, 220, 15);
|
||||
}
|
||||
20
frame.html
Normal file
20
frame.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="stylesheet" href="css/variables.css" />
|
||||
<link rel="stylesheet" href="css/animations.css" />
|
||||
<link rel="stylesheet" href="css/style.css" />
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="frame"></div>
|
||||
<div id="subCount">0</div>
|
||||
<script src="config.js"></script>
|
||||
<script src="js/socket.io.min.js"></script>
|
||||
<script src="js/app.js"></script>
|
||||
<script src="js/socket.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
36
js/app.js
Normal file
36
js/app.js
Normal file
@@ -0,0 +1,36 @@
|
||||
const subCount = document.getElementById("subCount");
|
||||
const frame = document.getElementById("frame");
|
||||
|
||||
let subCountNumber = 0;
|
||||
|
||||
function updateSubCount() {
|
||||
fetch(
|
||||
`https://api.tipeeestream.com/v1.0/events/forever.json?apiKey=${CONFIG.apiKey}`
|
||||
)
|
||||
.then((res) => res.json())
|
||||
.then((json) => {
|
||||
subCountNumber = json.datas.subscribers;
|
||||
subCount.innerText = subCountNumber;
|
||||
});
|
||||
}
|
||||
|
||||
function sub(subName) {
|
||||
frame.style.animationName = "subAnimation";
|
||||
frame.style.animationDuration = "2s";
|
||||
|
||||
subCount.style.animationName = "backgroundSubAnimation";
|
||||
subCount.style.animationDuration = "2s";
|
||||
|
||||
subCount.innerText = subName + " " + subCountNumber;
|
||||
|
||||
setTimeout(() => {
|
||||
frame.style.animationName = "borderAnimation";
|
||||
frame.style.animationDuration = "20s";
|
||||
|
||||
subCount.style.animationName = "backgroundAnimation";
|
||||
subCount.style.animationDuration = "20s";
|
||||
subCount.innerText = subCountNumber;
|
||||
updateSubCount();
|
||||
}, 2000);
|
||||
}
|
||||
updateSubCount();
|
||||
7
js/socket.io.min.js
vendored
Normal file
7
js/socket.io.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
24
js/socket.js
Normal file
24
js/socket.js
Normal file
@@ -0,0 +1,24 @@
|
||||
fetch("https://api.tipeeestream.com/v2.0/site/socket")
|
||||
.then((res) => res.json())
|
||||
.then((json) => {
|
||||
if (json.code == 200) {
|
||||
const socket = io(`${json.datas.host}:${json.datas.port}`, {
|
||||
query: {
|
||||
access_token: CONFIG.apiKey,
|
||||
},
|
||||
});
|
||||
|
||||
socket.on("connect", () => {
|
||||
console.log("Connected");
|
||||
socket.emit("join-room", {
|
||||
room: CONFIG.apiKey,
|
||||
username: "DerTyp876",
|
||||
});
|
||||
});
|
||||
socket.on("new-event", (data) => {
|
||||
if (data.event.type == "subscription") {
|
||||
sub(data.event.parameters.username);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
2
update.bat
Normal file
2
update.bat
Normal file
@@ -0,0 +1,2 @@
|
||||
powershell ./update.ps1
|
||||
pause
|
||||
55
update.ps1
Normal file
55
update.ps1
Normal file
@@ -0,0 +1,55 @@
|
||||
Write-Output "Starting update..."
|
||||
|
||||
$currentVersionString = (Get-Content .\meta.json | ConvertFrom-Json).version
|
||||
Write-Output "Current version: $currentVersion"
|
||||
|
||||
Write-Output "Searching for newest version..."
|
||||
$newestVersionString = ""
|
||||
$req = Invoke-WebRequest https://github.com/DerTyp876/obs-twitch-camera-frame/releases/latest
|
||||
|
||||
foreach ($tag in $req.ParsedHtml.body.getElementsByTagName('h1')) {
|
||||
if ($tag.innerText[0] -eq "v") {
|
||||
$newestVersionString = $tag.innerText
|
||||
}
|
||||
}
|
||||
|
||||
if ($newestVersionString -ne "") {
|
||||
Write-Output "Newest version found: $newestVersion"
|
||||
|
||||
|
||||
$currentVersion = ($currentVersionString -replace "v").split(".")
|
||||
$newestVersion = ($newestVersionString -replace "v").split(".")
|
||||
|
||||
if ($currentVersion[0] -gt $newestVersion[0]) {
|
||||
Write-Output "Current version is up to date!"
|
||||
}
|
||||
elseif ($currentVersion[1] -gt $newestVersion[1]) {
|
||||
Write-Output "Current version is up to date!"
|
||||
}
|
||||
elseif ($currentVersion[2] -ge $newestVersion[2]) {
|
||||
Write-Output "Current version is up to date!"
|
||||
}
|
||||
else {
|
||||
Write-Output "Updating to newer version..."
|
||||
|
||||
Remove-Item * -Recurse -Force -Confirm
|
||||
|
||||
mkdir ./temp
|
||||
attrib +h ./temp
|
||||
Write-Output "Downloading newer version..."
|
||||
Invoke-WebRequest -Uri "https://github.com/DerTyp876/obs-twitch-camera-frame/archive/refs/tags/$newestVersionString.zip" -OutFile "./temp/$newestVersionString.zip"
|
||||
Write-Output "Extracting archive..."
|
||||
Expand-Archive -Path "./temp/$newestVersionString.zip" -DestinationPath "./temp/"
|
||||
Get-ChildItem -Path "./temp/ts5-obs-overlay-$($newestVersionString -replace 'v')" -Recurse | Move-Item -Destination "./"
|
||||
|
||||
Remove-Item "./temp" -Recurse -Force -Confirm
|
||||
|
||||
Write-Output "You are now up to date again!"
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Output "No new version found!"
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user