bulk - entire MixerTwitch repo 2019-present
I should have done this a long time ago. Oh well, no time like the present!
This commit is contained in:
@@ -0,0 +1,365 @@
|
||||
import csv
|
||||
import xml.etree.ElementTree as ET
|
||||
import os
|
||||
import uuid # Import the uuid module
|
||||
from lxml import etree # Import lxml for XML handling
|
||||
from xml.dom import minidom
|
||||
import msvcrt
|
||||
|
||||
# Function to convert timecode (HH:MM:SS:FF) to total frames based on the fps
|
||||
def timecode_to_frames(timecode, fps=60):
|
||||
"""Convert a timecode (HH:MM:SS:FF) to total frames based on the fps."""
|
||||
try:
|
||||
h, m, s, f = map(int, timecode.split(':')) # Split into hours, minutes, seconds, and frames
|
||||
return (h * 3600 + m * 60 + s) * fps + f # Convert to frames
|
||||
except ValueError:
|
||||
print(f"Invalid timecode: {timecode}")
|
||||
return 0 # Return 0 or handle error as appropriate
|
||||
|
||||
# Define marker colors
|
||||
# pproColor keys:
|
||||
# default/blank/invalid = Green
|
||||
# "4281740498" # Red
|
||||
# "4289825711" # Purple
|
||||
# "4280578025" # Orange
|
||||
# "4281049552" # Yellow
|
||||
# "4294967295" # White
|
||||
# "4294741314" # Blue
|
||||
# "4292277273" # Turquoise
|
||||
marker_colors = {
|
||||
"FUNI": "4294741314", # Blue
|
||||
"SEG": "4280578025", # Orange
|
||||
"gamign": "4289825711", # Purple
|
||||
"env": "4289825711", # Purple
|
||||
"AFK": "4281049552", # Yellow
|
||||
"UNAFK": "4281049552", # Yellow
|
||||
"BEGIN": "4281049552", # Yellow
|
||||
"END": "4281049552" # Yellow
|
||||
}
|
||||
|
||||
# Get a list of all CSV files in the current directory
|
||||
csv_files = [f for f in os.listdir('.') if f.endswith('.csv')]
|
||||
|
||||
for csv_file in csv_files:
|
||||
print(f"Processing '{csv_file}'...")
|
||||
|
||||
# Extract base name for sequence name
|
||||
video_base = os.path.splitext(csv_file)[0]
|
||||
sequence_name = f"{video_base}"
|
||||
|
||||
# Function to generate the XML structure
|
||||
def generate_xml(markers, duration, sequence_name):
|
||||
# Create the root <xmeml> element
|
||||
xmeml = ET.Element("xmeml", version="4")
|
||||
|
||||
# Create the <sequence> element
|
||||
sequence = ET.SubElement(xmeml, "sequence", id="sequence")
|
||||
# Manually add the attributes with dots
|
||||
sequence.set("TL.SQAudioVisibleBase", "0")
|
||||
sequence.set("TL.SQVideoVisibleBase", "0")
|
||||
sequence.set("TL.SQVisibleBaseTime", "0")
|
||||
sequence.set("TL.SQAVDividerPosition", "0.5")
|
||||
sequence.set("TL.SQHideShyTracks", "0")
|
||||
sequence.set("TL.SQHeaderWidth", "292")
|
||||
sequence.set("Monitor.ProgramZoomOut", "0")
|
||||
sequence.set("Monitor.ProgramZoomIn", "0")
|
||||
sequence.set("TL.SQTimePerPixel", "0.19999999999999998")
|
||||
sequence.set("MZ.EditLine", "0")
|
||||
sequence.set("MZ.Sequence.PreviewFrameSizeHeight", "1080")
|
||||
sequence.set("MZ.Sequence.PreviewFrameSizeWidth", "1920")
|
||||
sequence.set("MZ.Sequence.AudioTimeDisplayFormat", "200")
|
||||
sequence.set("MZ.Sequence.PreviewRenderingClassID", "1061109567")
|
||||
sequence.set("MZ.Sequence.PreviewRenderingPresetCodec", "1634755439")
|
||||
sequence.set("MZ.Sequence.PreviewRenderingPresetPath", "EncoderPresets/SequencePreview/795454d9-d3c2-429d-9474-923ab13b7018/QuickTime.epr")
|
||||
sequence.set("MZ.Sequence.PreviewUseMaxRenderQuality", "false")
|
||||
sequence.set("MZ.Sequence.PreviewUseMaxBitDepth", "false")
|
||||
sequence.set("MZ.Sequence.EditingModeGUID", "795454d9-d3c2-429d-9474-923ab13b7018")
|
||||
sequence.set("MZ.Sequence.VideoTimeDisplayFormat", "101")
|
||||
sequence.set("MZ.WorkOutPoint", "4612930560000")
|
||||
sequence.set("MZ.WorkInPoint", "0")
|
||||
sequence.set("explodedTracks", "true")
|
||||
|
||||
# Generate a unique UUID and set it in the sequence element
|
||||
uuid_val = str(uuid.uuid4()).replace('-', '') # Generate a unique UUID without dashes
|
||||
ET.SubElement(sequence, "uuid").text = uuid_val
|
||||
|
||||
# Set the duration right after the UUID
|
||||
duration_tag = ET.SubElement(sequence, "duration")
|
||||
duration_tag.text = str(duration)
|
||||
|
||||
# Add rate (timebase and ntsc)
|
||||
rate = ET.SubElement(sequence, "rate")
|
||||
timebase = ET.SubElement(rate, "timebase")
|
||||
timebase.text = "60"
|
||||
ntsc = ET.SubElement(rate, "ntsc")
|
||||
ntsc.text = "FALSE"
|
||||
|
||||
# Set sequence name
|
||||
name = ET.SubElement(sequence, "name")
|
||||
name.text = sequence_name
|
||||
|
||||
# Create media section
|
||||
media = ET.SubElement(sequence, "media")
|
||||
video = ET.SubElement(media, "video")
|
||||
format_tag = ET.SubElement(video, "format")
|
||||
samplecharacteristics = ET.SubElement(format_tag, "samplecharacteristics")
|
||||
|
||||
# Now let's add a rate and other information under samplecharacteristics (to make it meaningful)
|
||||
rate = ET.SubElement(samplecharacteristics, "rate")
|
||||
timebase = ET.SubElement(rate, "timebase")
|
||||
timebase.text = "60"
|
||||
ntsc = ET.SubElement(rate, "ntsc")
|
||||
ntsc.text = "FALSE"
|
||||
|
||||
# Add codec information
|
||||
codec = ET.SubElement(samplecharacteristics, "codec")
|
||||
name = ET.SubElement(codec, "name")
|
||||
name.text = "Apple ProRes 422"
|
||||
appspecificdata = ET.SubElement(codec, "appspecificdata")
|
||||
appname = ET.SubElement(appspecificdata, "appname")
|
||||
appname.text = "Final Cut Pro"
|
||||
appmanufacturer = ET.SubElement(appspecificdata, "appmanufacturer")
|
||||
appmanufacturer.text = "Apple Inc."
|
||||
appversion = ET.SubElement(appspecificdata, "appversion")
|
||||
appversion.text = "7.0"
|
||||
data = ET.SubElement(appspecificdata, "data")
|
||||
qtcodec = ET.SubElement(data, "qtcodec")
|
||||
codecname1 = ET.SubElement(qtcodec, "codecname")
|
||||
codecname1.text = "Apple ProRes 422"
|
||||
codectypename = ET.SubElement(qtcodec, "codectypename")
|
||||
codectypename.text = "Apple ProRes 422"
|
||||
codecname2 = ET.SubElement(qtcodec, "codecname")
|
||||
codecname2.text = "Apple ProRes 422"
|
||||
codectypecode = ET.SubElement(qtcodec, "codectypecode")
|
||||
codectypecode.text = "apcn"
|
||||
codecvendorcode = ET.SubElement(qtcodec, "codecvendorcode")
|
||||
codecvendorcode.text = "appl"
|
||||
spatialquality = ET.SubElement(qtcodec, "spatialquality")
|
||||
spatialquality.text = "1024"
|
||||
temporalquality = ET.SubElement(qtcodec, "temporalquality")
|
||||
temporalquality.text = "0"
|
||||
keyframerate = ET.SubElement(qtcodec, "keyframerate")
|
||||
keyframerate.text = "0"
|
||||
datarate = ET.SubElement(qtcodec, "datarate")
|
||||
datarate.text = "0"
|
||||
|
||||
# Add dimension info
|
||||
width = ET.SubElement(samplecharacteristics, "width")
|
||||
width.text = "1920"
|
||||
height = ET.SubElement(samplecharacteristics, "height")
|
||||
height.text = "1080"
|
||||
anamorphic = ET.SubElement(samplecharacteristics, "anamorphic")
|
||||
anamorphic.text = "FALSE"
|
||||
pixelaspectratio = ET.SubElement(samplecharacteristics, "pixelaspectratio")
|
||||
pixelaspectratio.text = "square"
|
||||
fielddominance = ET.SubElement(samplecharacteristics, "fielddominance")
|
||||
fielddominance.text = "none"
|
||||
colordepth = ET.SubElement(samplecharacteristics, "colordepth")
|
||||
colordepth.text = "24"
|
||||
|
||||
# Create the <track> element
|
||||
track = ET.SubElement(video, "track")
|
||||
track.set("TL.SQTrackShy", "0")
|
||||
track.set("TL.SQTrackExpandedHeight", "25")
|
||||
track.set("TL.SQTrackExpanded", "0")
|
||||
track.set("MZ.TrackTargeted", "0")
|
||||
|
||||
#Add track modifiers
|
||||
enabled = ET.SubElement(track, "enabled")
|
||||
enabled.text = "TRUE"
|
||||
locked = ET.SubElement(track, "locked")
|
||||
locked.text = "FALSE"
|
||||
|
||||
# Add generator item (matte)
|
||||
generatoritem = ET.SubElement(track, "generatoritem", id="clipitem-1")
|
||||
item_name = ET.SubElement(generatoritem, "name")
|
||||
item_name.text = f"Marker Color Matte ({markers[0]['time']})"
|
||||
enabled = ET.SubElement(generatoritem, "enabled")
|
||||
enabled.text = "TRUE"
|
||||
generatoritem_duration = ET.SubElement(generatoritem, "duration")
|
||||
generatoritem_duration.text = str(duration)
|
||||
rate = ET.SubElement(generatoritem, "rate")
|
||||
timebase = ET.SubElement(rate, "timebase")
|
||||
timebase.text = "60"
|
||||
ntsc = ET.SubElement(rate, "ntsc")
|
||||
ntsc.text = "FALSE"
|
||||
start = ET.SubElement(generatoritem, "start")
|
||||
start.text = "0"
|
||||
end = ET.SubElement(generatoritem, "end")
|
||||
end.text = str(duration)
|
||||
in_time = ET.SubElement(generatoritem, "in")
|
||||
in_time.text = "0"
|
||||
out_time = ET.SubElement(generatoritem, "out")
|
||||
out_time.text = str(duration)
|
||||
alphatype = ET.SubElement(generatoritem, "alphatype")
|
||||
alphatype.text = "none"
|
||||
effect = ET.SubElement(generatoritem, "effect")
|
||||
effect_name = ET.SubElement(effect, "name")
|
||||
effect_name.text = "Color"
|
||||
effectid = ET.SubElement(effect, "effectid")
|
||||
effectid.text = "Color"
|
||||
effectcategory = ET.SubElement(effect, "effectcategory")
|
||||
effectcategory.text = "Matte"
|
||||
effecttype = ET.SubElement(effect, "effecttype")
|
||||
effecttype.text = "generator"
|
||||
mediatype = ET.SubElement(effect, "mediatype")
|
||||
mediatype.text = "video"
|
||||
parameter = ET.SubElement(effect, "parameter", authoringApp="PremierePro")
|
||||
parameterid = ET.SubElement(parameter, "parameterid")
|
||||
parameterid.text = "fillcolor"
|
||||
param_name = ET.SubElement(parameter, "name")
|
||||
param_name.text = "Color"
|
||||
value = ET.SubElement(parameter, "value")
|
||||
alpha = ET.SubElement(value, "alpha")
|
||||
alpha.text = "0"
|
||||
red = ET.SubElement(value, "red")
|
||||
red.text = "0"
|
||||
green = ET.SubElement(value, "green")
|
||||
green.text = "0"
|
||||
blue = ET.SubElement(value, "blue")
|
||||
blue.text = "0"
|
||||
filter_tag = ET.SubElement(generatoritem, "filter")
|
||||
filter_effect = ET.SubElement(filter_tag, "effect")
|
||||
filter_effect_name = ET.SubElement(filter_effect, "name")
|
||||
filter_effect_name.text = "Opacity"
|
||||
filter_effectid = ET.SubElement(filter_effect, "effectid")
|
||||
filter_effectid.text = "opacity"
|
||||
filter_effectcategory = ET.SubElement(filter_effect, "effectcategory")
|
||||
filter_effectcategory.text = "motion"
|
||||
filter_effecttype = ET.SubElement(filter_effect, "effecttype")
|
||||
filter_effecttype.text = "motion"
|
||||
filter_mediatype = ET.SubElement(filter_effect, "mediatype")
|
||||
filter_mediatype.text = "video"
|
||||
pproBypass = ET.SubElement(filter_effect, "pproBypass")
|
||||
pproBypass.text = "false"
|
||||
filter_parameter = ET.SubElement(filter_effect, "parameter", authoringApp="PremierePro")
|
||||
filter_parameterid = ET.SubElement(filter_parameter, "parameterid")
|
||||
filter_parameterid.text = "opacity"
|
||||
filter_param_name = ET.SubElement(filter_parameter, "name")
|
||||
filter_param_name.text = "opacity"
|
||||
filter_valuemin = ET.SubElement(filter_parameter, "valuemin")
|
||||
filter_valuemin.text = "0"
|
||||
filter_valuemax = ET.SubElement(filter_parameter, "valuemax")
|
||||
filter_valuemax.text = "100"
|
||||
filter_value = ET.SubElement(filter_parameter, "value")
|
||||
filter_value.text = "0"
|
||||
|
||||
# Create the <audio> element and its children
|
||||
audio = ET.SubElement(media, "audio")
|
||||
ET.SubElement(audio, "numOutputChannels").text = "2"
|
||||
format_elem = ET.SubElement(audio, "format")
|
||||
samplecharacteristics = ET.SubElement(format_elem, "samplecharacteristics")
|
||||
ET.SubElement(samplecharacteristics, "depth").text = "16"
|
||||
ET.SubElement(samplecharacteristics, "samplerate").text = "48000"
|
||||
outputs = ET.SubElement(audio, "outputs")
|
||||
for i in range(1, 3):
|
||||
group = ET.SubElement(outputs, "groups")
|
||||
ET.SubElement(group, "index").text = str(i)
|
||||
ET.SubElement(group, "numchannels").text = "1"
|
||||
ET.SubElement(group, "downmix").text = "0"
|
||||
channel = ET.SubElement(group, "channel")
|
||||
ET.SubElement(channel, "index").text = str(i)
|
||||
for i in range(1, 9):
|
||||
track = ET.SubElement(audio, "track")
|
||||
track.set("TL.SQTrackAudioKeyframeStyle", "0")
|
||||
track.set("TL.SQTrackShy", "0")
|
||||
track.set("TL.SQTrackExpandedHeight", "25")
|
||||
track.set("TL.SQTrackExpanded", "0")
|
||||
track.set("MZ.TrackTargeted", "1")
|
||||
track.set("PannerCurrentValue", "0.5")
|
||||
track.set("PannerIsInverted", "true")
|
||||
track.set("PannerStartKeyframe", "-91445760000000000,0.5,0,0,0,0,0,0")
|
||||
track.set("PannerName", "Balance")
|
||||
track.set("currentExplodedTrackIndex", "0")
|
||||
track.set("totalExplodedTrackCount", "2")
|
||||
track.set("premiereTrackType", "Stereo")
|
||||
ET.SubElement(track, "enabled").text = "TRUE"
|
||||
ET.SubElement(track, "locked").text = "FALSE"
|
||||
ET.SubElement(track, "outputchannelindex").text = str((i-1) % 2 + 1)
|
||||
|
||||
# Create the timecode section under sequence
|
||||
timecode = ET.SubElement(sequence, "timecode")
|
||||
rate = ET.SubElement(timecode, "rate")
|
||||
ET.SubElement(rate, "timebase").text = "60"
|
||||
ET.SubElement(rate, "ntsc").text = "FALSE"
|
||||
ET.SubElement(timecode, "string").text = "00:00:00:00"
|
||||
ET.SubElement(timecode, "frame").text = "0"
|
||||
ET.SubElement(timecode, "displayformat").text = "NDF"
|
||||
|
||||
# Create the labels section under sequence
|
||||
labels = ET.SubElement(sequence, "labels")
|
||||
ET.SubElement(labels, "label2").text = "Iris"
|
||||
|
||||
# Create the logginginfo section under sequence
|
||||
logginginfo = ET.SubElement(sequence, "logginginfo")
|
||||
ET.SubElement(logginginfo, "description")
|
||||
ET.SubElement(logginginfo, "scene")
|
||||
ET.SubElement(logginginfo, "shottake")
|
||||
ET.SubElement(logginginfo, "lognote")
|
||||
ET.SubElement(logginginfo, "good")
|
||||
ET.SubElement(logginginfo, "originalvideofilename")
|
||||
ET.SubElement(logginginfo, "originalaudiofilename")
|
||||
|
||||
# Add markers again but under sequence
|
||||
for marker in markers:
|
||||
marker_element = ET.SubElement(sequence, "marker")
|
||||
ET.SubElement(marker_element, "comment")
|
||||
ET.SubElement(marker_element, "name").text = marker['name']
|
||||
# Set the in and out time as the frame count
|
||||
in_frame = str(timecode_to_frames(marker['time']))
|
||||
ET.SubElement(marker_element, "in").text = in_frame
|
||||
ET.SubElement(marker_element, "out").text = "-1"
|
||||
# Set color based on marker name
|
||||
color_code = marker_colors.get(marker['name'])
|
||||
if color_code:
|
||||
ppro_color = ET.SubElement(marker_element, "pproColor")
|
||||
ppro_color.text = color_code
|
||||
print(f"Set color for marker '{marker['name']}' to '{color_code}'")
|
||||
else:
|
||||
print(f"Default color (Green) used for marker '{marker['name']}'")
|
||||
|
||||
# Create the labels section under sequence
|
||||
labels = ET.SubElement(sequence, "labels")
|
||||
ET.SubElement(labels, "label2").text = "Forest"
|
||||
|
||||
# Write to XML file
|
||||
output_file = csv_file.replace('.csv', '.xml')
|
||||
tree = ET.ElementTree(xmeml)
|
||||
tree.write(output_file, encoding="UTF-8", xml_declaration=True)
|
||||
|
||||
print(f"XML file '{output_file}' has been created successfully.")
|
||||
|
||||
|
||||
# Read the CSV file and process the data
|
||||
markers = [] # List to store markers
|
||||
|
||||
with open(csv_file, newline='', encoding='utf-8') as csvfile:
|
||||
csv_reader = csv.DictReader(csvfile, delimiter='\t')
|
||||
marker_count = 0
|
||||
|
||||
for row in csv_reader:
|
||||
marker_name = row['Marker Name']
|
||||
in_point = row['In']
|
||||
out_point = row['Out']
|
||||
|
||||
print(f"Adding marker: Name='{marker_name}', In='{in_point}', Out='{out_point}'")
|
||||
|
||||
# Add marker to list
|
||||
markers.append({'name': marker_name, 'time': in_point})
|
||||
marker_count += 1
|
||||
|
||||
print(f"Total markers added for '{csv_file}': {marker_count}")
|
||||
|
||||
# Calculate the duration using the final marker's timecode
|
||||
final_marker = markers[-1] if markers else None
|
||||
duration = 0
|
||||
if final_marker:
|
||||
duration = timecode_to_frames(final_marker['time'], fps=60)
|
||||
|
||||
generate_xml(markers, duration, sequence_name) # Pass sequence_name
|
||||
|
||||
print("------------------------------------------------------------")
|
||||
|
||||
print("All files have been processed.")
|
||||
print("Press any key to exit...")
|
||||
msvcrt.getch()
|
||||
@@ -0,0 +1 @@
|
||||
{"FileInfo":{"Version":{"Major":1,"Minor":4,"Patch":0},"CreatedAt":"2026-01-04T00:09:26.9715737-07:00","UpdatedAt":"0001-01-01T00:00:00"},"streamer":{"name":"RaincloudTheDragon","login":"raincloudthedragon","id":121308181},"clipper":null,"video":{"title":"waste.ts","description":null,"id":"2658831715","created_at":"2026-01-02T02:06:42Z","start":0,"end":161,"length":161,"viewCount":0,"game":"Five Nights at Freddy's: Security Breach","chapters":[{"id":"","startMilliseconds":0,"lengthMilliseconds":161000,"type":"GAME_CHANGE","description":"Five Nights at Freddy's: Security Breach","subDescription":"","thumbnailUrl":null,"gameId":"2143096682","gameDisplayName":"Five Nights at Freddy's: Security Breach","gameBoxArtUrl":"https://static-cdn.jtvnw.net/ttv-boxart/2143096682_IGDB-40x53.jpg"}]},"comments":[],"embeddedData":{"thirdParty":[],"firstParty":[],"twitchBadges":[],"twitchBits":[]}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,59 @@
|
||||
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||||
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c001 152.deb9585, 2024/02/06-08:36:10 " rdfhash="77196DCC325049200598B2F8EB94F892" merged="0">
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<rdf:Description rdf:about=""
|
||||
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
|
||||
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
|
||||
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
|
||||
xmpMM:InstanceID="xmp.iid:d6bcf948-734b-e341-a54e-1a1d94d6c59c"
|
||||
xmpMM:DocumentID="245f421d-4f65-979f-489d-152000000061"
|
||||
xmpMM:OriginalDocumentID="xmp.did:8ee3017e-d5b0-e545-a3a9-e3847a47d8f8"
|
||||
xmp:MetadataDate="2026-05-17T14:10:54-06:00"
|
||||
xmp:ModifyDate="2026-05-17T13:43:07-06:00">
|
||||
<xmpMM:History>
|
||||
<rdf:Seq>
|
||||
<rdf:li
|
||||
stEvt:action="saved"
|
||||
stEvt:instanceID="07bd793e-5bb9-5864-3fd0-44a70000008e"
|
||||
stEvt:when="2026-05-17T13:43:07-06:00"
|
||||
stEvt:softwareAgent="Adobe Premiere Pro 2024.0 (Windows)"
|
||||
stEvt:changed="/"/>
|
||||
<rdf:li
|
||||
stEvt:action="saved"
|
||||
stEvt:instanceID="xmp.iid:d64ecc94-a7b6-684f-84e4-fb43bbc4b289"
|
||||
stEvt:when="2026-05-17T13:49:44-06:00"
|
||||
stEvt:softwareAgent="Adobe Premiere Pro 2024.0 (Windows)"
|
||||
stEvt:changed="/metadata/xmpDM/Tracks"/>
|
||||
<rdf:li
|
||||
stEvt:action="saved"
|
||||
stEvt:instanceID="xmp.iid:d6bcf948-734b-e341-a54e-1a1d94d6c59c"
|
||||
stEvt:when="2026-05-17T14:10:54-06:00"
|
||||
stEvt:softwareAgent="Adobe Premiere Pro 2024.0 (Windows)"
|
||||
stEvt:changed="/metadata/xmpDM/Tracks"/>
|
||||
</rdf:Seq>
|
||||
</xmpMM:History>
|
||||
</rdf:Description>
|
||||
</rdf:RDF>
|
||||
</x:xmpmeta>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<?xpacket end="w"?>
|
||||
@@ -0,0 +1,26 @@
|
||||
2026-01-01
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 setup + rambling
|
||||
2:37 non-technical difficulties
|
||||
7:03 figuring out where to go
|
||||
11:08 kitchen arrival
|
||||
14:05 chickenmasher.exe
|
||||
28:11 kitchens escaped
|
||||
35:19 voiceboxing
|
||||
39:00 roxy sequence break
|
||||
51:48 roxy pass research
|
||||
1:01:04 figuring it out on my own
|
||||
1:12:18 mazercising
|
||||
1:22:24 montying
|
||||
1:49:23 freddy arms
|
||||
1:58:04 getting head
|
||||
2:22:40 fazcade
|
||||
2:36:30 deleting saves
|
||||
2:37:51 exploring
|
||||
2:44:12 woof woof
|
||||
2:48:41 sneaking past shatrox
|
||||
2:50:07 exploring
|
||||
2:53:48 freddy eyes
|
||||
2:57:31 getting to 6am
|
||||
3:01:00 goodbye.
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
2026-01-03
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
MOTD by @Gaogomon https://x.com/Gaogomon
|
||||
|
||||
0:00 starting soon
|
||||
2:00 setup + rambling
|
||||
3:21 game laggy
|
||||
6:04 verifying files
|
||||
12:10 exploring CCR pizzaplex
|
||||
37:22 wet floor bot quest
|
||||
1:13:34 troubleshooting moderation
|
||||
1:16:14 chapter 1
|
||||
1:35:26 tiktok + other stream issues
|
||||
1:42:28 back to the quest
|
||||
1:46:03 chapter 2
|
||||
1:48:19 uetools nonsense
|
||||
1:51:36 cont chapter 2
|
||||
2:12:28 brb
|
||||
2:14:08 checking twitch and uetools
|
||||
2:16:02 water
|
||||
2:16:53 cont chapter 2
|
||||
2:48:53 chapter 3
|
||||
3:13:18 chapter 4
|
||||
3:39:12 chapter 5
|
||||
4:03:28 blender showcase
|
||||
4:05:52 postramble
|
||||
4:09:54 subjective moral relativism
|
||||
4:15:23 goodbye?
|
||||
4:16:39 some additional philosophical exchange
|
||||
4:20:22 goodbye.
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,21 @@
|
||||
2026-01-08
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
2:01 setup + rambling
|
||||
4:48 trying to play previous profile
|
||||
26:28 game integrity verification
|
||||
28:55 water adrun
|
||||
30:22 scan done
|
||||
31:56 try in vain to salvage profile 2
|
||||
1:14:11 starting over @ chapter 1
|
||||
1:34:42 chapter 2
|
||||
1:46:19 chapter 3
|
||||
2:03:46 chapter 4
|
||||
2:15:22 brb
|
||||
2:18:16 chapter 5
|
||||
2:25:55 brb
|
||||
2:27:40 chapter 6
|
||||
2:38:06 chapter 7
|
||||
2:54:03 postramble
|
||||
2:54:50 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
2026-01-10
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
4:37 preramble
|
||||
6:27 dating standards calculator
|
||||
26:38 CCR exploring some rooms in the disassemble vanny ending
|
||||
32:36 secret of the mimic
|
||||
2:21:49 brb
|
||||
2:28:36 tape time
|
||||
2:37:43 strange CPU usage
|
||||
2:42:12 elevator repairman
|
||||
2:46:22 getting watner
|
||||
2:47:47 return to elevation
|
||||
2:59:46 taking call
|
||||
3:00:12 tickets please
|
||||
3:11:12 postramble
|
||||
3:11:50 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,28 @@
|
||||
2026-01-15
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
3:40 setup + rambling
|
||||
7:50 tickets please
|
||||
33:39 fleeing the ticketman
|
||||
54:54 backstage
|
||||
1:11:55 workshops
|
||||
1:20:39 finding code
|
||||
1:21:18 explore staff area
|
||||
1:24:23 collecting captain bits
|
||||
1:43:01 brb
|
||||
1:44:33 is meaning prescriptive or descriptive?
|
||||
1:46:47 becoming captain
|
||||
2:37:07 rebooting game
|
||||
2:38:02 pirate cutscene again
|
||||
2:43:48 nurse
|
||||
3:12:36 getting water
|
||||
3:15:24 on the morality of truth and lies
|
||||
3:16:41 recycling
|
||||
3:23:23 melted nurse
|
||||
3:51:39 reentering storage
|
||||
3:57:17 exploring + collectibles
|
||||
4:03:48 chica in the warehouse
|
||||
4:33:14 loading bay
|
||||
4:58:12 postramble
|
||||
5:12:45 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
2026-01-17
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 setup + rambling
|
||||
2:09 singing we are charlie kirk
|
||||
6:09 recovering
|
||||
7:56 modular parade puzzle
|
||||
29:23 collectibles and minigames
|
||||
1:03:04 admin wing
|
||||
1:39:30 secret surveillance passage
|
||||
1:42:30 data transfer intermission
|
||||
1:45:02 brb
|
||||
1:47:38 back to the basement
|
||||
1:48:56 forgot water
|
||||
1:49:25 Fundaphobia section
|
||||
2:06:05 basement escaped
|
||||
2:09:52 entering the catacombs
|
||||
2:17:59 R&D
|
||||
2:47:04 brb
|
||||
2:48:24 researching objective
|
||||
2:53:32 back to R&D
|
||||
3:08:21 inventor's house
|
||||
3:54:16 final chase
|
||||
4:04:01 bsod brb
|
||||
4:06:04 rebooting and nuking exclusive fullscreen
|
||||
4:15:23 NGplus
|
||||
4:24:23 storage
|
||||
4:38:08 south hall
|
||||
4:42:38 jackie
|
||||
4:50:38 fixing elevator
|
||||
4:56:18 research misinput
|
||||
4:57:57 back to fixing elevator
|
||||
5:03:03 exploring jackie backroom
|
||||
5:12:41 entering big top showroom
|
||||
5:14:23 checking acheivements
|
||||
5:16:43 postramble
|
||||
5:17:32 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
2026-01-22
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 preramble
|
||||
2:06 checking achievements
|
||||
6:04 big top
|
||||
6:55 secret backdoor
|
||||
32:33 trying to stow collectible
|
||||
45:38 finally back to big top
|
||||
1:02:29 escaping big top
|
||||
1:10:53 collectathoning
|
||||
1:28:28 theatre
|
||||
2:00:18 nurse dolly
|
||||
2:18:56 utterly derailed by trapaholics
|
||||
2:27:12 finally getting back to the elevator sequence
|
||||
2:30:34 back to storage, collectathoning
|
||||
2:55:25 warehouse
|
||||
3:11:10 loading bay
|
||||
3:26:41 admin wing
|
||||
3:39:46 looking for a save point
|
||||
3:56:56 fiddling with achievements
|
||||
3:57:57 return to admin wing, death
|
||||
4:02:55 kill game
|
||||
4:03:24 getting back
|
||||
4:07:53 finally, admin wing
|
||||
4:21:35 admin wing done
|
||||
4:29:20 white tiger basement
|
||||
4:39:18 looking for storytime showroom
|
||||
4:47:21 storytime showroom
|
||||
4:52:59 moon basement
|
||||
5:23:05 MOON.EXE
|
||||
6:16:13 postramble
|
||||
6:18:57 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
2026-01-24
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
0:13 eating food + rambling
|
||||
4:58 xitter
|
||||
7:55 rambling
|
||||
23:53 research
|
||||
32:32 retail showroom
|
||||
40:36 trying to return to basement 2 via admin wing
|
||||
1:03:04 clocking out
|
||||
1:07:04 parachute
|
||||
1:10:04 RnD
|
||||
1:24:35 mansion
|
||||
1:26:47 more research
|
||||
1:27:58 glitching permissions
|
||||
1:58:14 putting david to bed
|
||||
2:08:45 THIRD PLAYTHROUGH cuz ONE audio log
|
||||
2:13:00 storage
|
||||
2:19:00 jackie
|
||||
2:27:15 elevator
|
||||
2:31:15 storytime showroom
|
||||
2:46:33 big top
|
||||
2:57:12 big top chase
|
||||
3:01:13 theatre
|
||||
3:25:48 nurse dolly
|
||||
3:49:28 warehouse
|
||||
4:00:28 admin wing
|
||||
4:03:58 basement 2
|
||||
4:07:02 research
|
||||
4:14:54 seeking secret basement room
|
||||
4:30:13 checking achievements
|
||||
4:31:11 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,15 @@
|
||||
2026-01-29
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 briefest preramble
|
||||
0:50 SOTM audio and mail log hunt
|
||||
35:39 achievements get
|
||||
45:54 fnafsb saving bonnie
|
||||
1:19:26 safe spot ending
|
||||
1:28:36 scooper ending
|
||||
2:21:56 collectathon
|
||||
3:47:52 checking character gallery
|
||||
3:53:23 back to collecting
|
||||
4:11:54 chapter 8 collecting
|
||||
4:29:30 all collectibles acquired
|
||||
4:32:47 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
2026-01-31
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 preramble
|
||||
2:41 sinner's road
|
||||
14:18 recieved map and not bench
|
||||
1:43:07 simple key
|
||||
1:49:03 wormways
|
||||
2:43:14 wormways map
|
||||
2:46:29 overthinking riddle
|
||||
2:51:54 back to unexplored moss grotto
|
||||
3:20:00 postramble
|
||||
3:21:51 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,10 @@
|
||||
2026-02-05
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 setup + rambling
|
||||
5:40 dogwalk
|
||||
53:25 welcome to the game ii
|
||||
2:09:49 start over
|
||||
2:53:10 checking achievements and reviews
|
||||
2:57:13 postramble
|
||||
2:58:26 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
2026-02-07
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 setup + rambling
|
||||
3:42 opening
|
||||
12:27 messing with graphics
|
||||
16:16 entering the park
|
||||
1:09:51 hydraulic press and plushie stuffing tangent
|
||||
1:11:41 funhouse
|
||||
1:41:43 chapter 2 trailer
|
||||
1:43:13 to pharloom
|
||||
1:45:50 brb
|
||||
1:48:02 smelling brimstone
|
||||
1:49:30 blasted steps
|
||||
3:15:47 postramble
|
||||
3:16:27 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
2026-02-12
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
1:29 setup + rambling
|
||||
5:02 retrieving salvage and supplies
|
||||
35:57 the last judge
|
||||
1:28:02 brb getting water
|
||||
1:28:58 pouring gamer supps
|
||||
1:33:55 continuing the last judge
|
||||
2:18:26 the citadel
|
||||
2:26:04 underworks
|
||||
2:34:59 discrod
|
||||
2:35:56 underworking
|
||||
2:39:04 benching
|
||||
2:40:28 underworkign harder
|
||||
3:24:01 choral chambers
|
||||
3:51:15 postramble
|
||||
3:51:42 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,22 @@
|
||||
2026-02-19
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
4:50 preramble, or the lack thereof
|
||||
9:55 menu
|
||||
11:23 choral chambers
|
||||
31:37 finding clip
|
||||
33:03 hunting jacuzzi
|
||||
49:04 brb
|
||||
50:22 rambling, eating flower
|
||||
55:02 wandering
|
||||
1:05:00 dragon gone, host makeout sesh
|
||||
1:06:28 stringing up rosaries
|
||||
1:13:25 exploring bilewater
|
||||
1:34:12 discovering bench
|
||||
1:39:47 bench unshackled
|
||||
1:49:54 consuming bile
|
||||
2:20:29 mapping
|
||||
2:23:06 traversing the mist
|
||||
3:19:37 postramble
|
||||
3:22:33 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,23 @@
|
||||
2026-02-21
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 preramble
|
||||
1:09 the mist
|
||||
24:25 mist traversed, phantom time
|
||||
1:00:52 exploring citadel
|
||||
1:43:30 getting gamer supps
|
||||
1:44:58 clockwork dancers
|
||||
1:50:29 brief interruption + gamer supping
|
||||
1:52:56 cogwork dancers
|
||||
1:55:52 exploration
|
||||
2:19:04 whiteward
|
||||
2:32:25 underworks
|
||||
2:51:28 citadel
|
||||
3:27:18 brief intermission
|
||||
3:28:33 jabbering
|
||||
3:29:38 actually fighting the clockwork dancers
|
||||
5:13:25 researching clawline
|
||||
5:14:27 looking into the underworks
|
||||
5:23:43 consulting resources
|
||||
5:24:49 more searching
|
||||
5:29:41 postramble
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,21 @@
|
||||
2026-02-26
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon (technical difficulties)
|
||||
12:06 preramble
|
||||
13:55 consulting map
|
||||
20:45 unexpected visit
|
||||
22:10 return
|
||||
22:50 obtaining clawline
|
||||
39:14 obtained clawline
|
||||
1:16:47 pollip hearts
|
||||
1:37:51 new bellhart quests
|
||||
1:55:38 exploring sands of karak
|
||||
2:33:01 grinding
|
||||
2:55:48 quests
|
||||
3:31:44 exploring greymoor clawline
|
||||
3:45:00 bellhart
|
||||
3:49:28 philosophizing
|
||||
3:52:33 twitter
|
||||
3:58:21 postramble
|
||||
3:59:43 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
2026-02-28
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 preramble
|
||||
4:59 fixing game overexposure
|
||||
7:04 routing
|
||||
8:07 meat delivery
|
||||
48:07 whiteward wish
|
||||
1:11:16 researching pale oil
|
||||
1:13:58 savage beastfly wish
|
||||
1:42:26 fixing heat
|
||||
1:44:52 beastfly mode
|
||||
2:08:43 philosophy
|
||||
2:13:29 returning to wishwall
|
||||
2:21:11 broodmother wish
|
||||
3:23:01 wishwalls
|
||||
3:30:09 postramble
|
||||
3:30:54 twitter
|
||||
3:32:42 council of creatures
|
||||
3:40:07 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,21 @@
|
||||
2026-03-05
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
2:56 banecloud
|
||||
9:41 azure chess 1v1
|
||||
56:55 setting up game
|
||||
1:02:52 iron lung banecloud
|
||||
1:58:33 intermission
|
||||
2:03:00 mask off
|
||||
2:11:23 actual iron lung gaming
|
||||
2:14:13 adjusting audio
|
||||
2:14:48 cruising the blood ocean
|
||||
2:55:04 looking up achievements
|
||||
2:55:45 FeLung with cheats
|
||||
3:28:41 more achievement research
|
||||
3:29:19 ach hunt
|
||||
3:36:05 research
|
||||
3:36:35 hunting the SM-8
|
||||
3:57:57 creature council
|
||||
4:10:11 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,17 @@
|
||||
2026-03-07
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
0:13 setup + rambling
|
||||
2:32 FeLung achievemnt hunt
|
||||
29:23 research + gameswap
|
||||
35:29 silksong
|
||||
49:47 attempt to run errand, explore greymoor
|
||||
1:17:53 exploring deep docks, fighting forebrothers
|
||||
1:50:26 forebrothers defeated
|
||||
2:03:04 moar bone bottom supplies, getting more plasmium
|
||||
2:16:20 citadel supply run
|
||||
2:30:05 research
|
||||
2:30:38 citadel supply run cont
|
||||
2:51:41 postramble
|
||||
2:52:08 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
2026-03-12
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
0:25 eating food, corralling critters
|
||||
12:01 setup
|
||||
14:08 case animatronics
|
||||
35:46 setting up borderless gaming
|
||||
38:56 borderless police station
|
||||
55:23 FUNI naked normals
|
||||
56:40 blender/3d normals tangent
|
||||
1:06:57 getting banned by dikcok
|
||||
1:12:36 police station
|
||||
2:22:27 brb
|
||||
2:23:53 conversing with cretins
|
||||
2:28:45 walkthrough
|
||||
2:31:18 animatronics
|
||||
3:10:15 brb water
|
||||
3:11:02 cretin conversations
|
||||
3:12:43 respawn
|
||||
3:18:39 discord
|
||||
3:19:50 charging tablet
|
||||
3:47:37 letterboxd tangent
|
||||
3:49:23 surviving without ventilation
|
||||
4:23:21 creature convention
|
||||
4:26:49 morality scaling + trolley problem
|
||||
4:51:30 goodbye
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
2026-03-14
|
||||
https://linktr.ee/RaincloudTheDragon
|
||||
|
||||
0:00 starting soon
|
||||
3:30 tangy southern chicken
|
||||
17:07 CASE
|
||||
50:01 brb watertime
|
||||
51:41 police
|
||||
1:20:23 abandoning CASE
|
||||
1:23:27 choosing game
|
||||
1:31:47 risking rain
|
||||
2:10:31 power nap
|
||||
2:11:06 goodbye
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user