-
Notifications
You must be signed in to change notification settings - Fork 13
/
todo.txt
273 lines (266 loc) · 15.3 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
DONE - Refactored into classes
DONE - Make it so we can add sprites
DONE - Need a data structure to keep track of all the sprites and the video
DONE - Create editable text
DONE - Remove focus highlight
DONE - Savable and loadable format
DONE - Use a regex to parse the transform instead of a matrix, because it can't do multiple rotations!
DONE - Need to make the widgets as if they are inside the video, and need to scale the video to the min dimension of the screen
DONE - Code that copies a frame of the video so that the html2canvas code works
DONE - Get canvas rendering because we know it's all consistent
DONE - Get the text working with the animations, maybe need an animation event again like we had before (set value)
DONE - Bug where we can't create new elements after loading (id conflict) use a guid for ids or something
DONE - Concept of a selection, which widget we last clicked on
DONE - Draw video and sprites to canvas
DONE - Choose a framerate and play through each image, saving each into a png
DONE - Encode canvas into video (mp4/webm)
DONE - Touch does not capture on timeline (mobile)
DONE - Make the ui more functional (icons, right top aligned, responsive to size changes, etc.)
DONE - Get it built on travis-ci
DONE - Get it deployed to github pages
DONE - Move video controls and buttons to another div that doesn't get captured with html2canvas
DONE - Add modal for saving and loading
DONE - Add modal for rendering animation
DONE - Install font-awesome locally instead of using a CDN
DONE - Rendering of widgets seems to be slightly off in encoded video...
DONE - Widget already exists bug
DONE - CORS error because videoSrc has full path (https)
DONE - Add cancel button for modals that take time
DONE - Selection that doesn't rely on focus so we can click buttons (can get rid of focus hack too)
DONE - Motion tracking
DONE - To do motion, we select a single sprite and then click the motion button
DONE - From the current point in the video, wherever the sprite is located, it will attempt to track it until you click stop
DONE - So we'll play the video at half speed or so so you can respond to it
DONE - This should make a continuous animation (something we can make as a concept on the timeline)
DONE - Make our own timeline for the video/scene
DONE - Play/pause button
DONE - Scrub timeline (capture mouse)
DONE - Play pause button does not update if video changed state externally (e.g. play() pause())
DONE - Gizmos create keyframes every time we select
DONE - Changing selected widget does not update timeline keyframes
DONE - Can't delete widgets anymore
DONE - Draw all widgets using canvas
DONE - Make transparent images and overlay them using ffmpeg (without capturing video snapshots)
DONE - Dramatically speed up rendering by not using html2canvas
DONE - Directly run scenejs/timline from the renderer
DONE - Hide video during canvas rendering
DONE - Properly pack/serve ffmpeg worker, don't use https://unpkg.com/@ffmpeg/ffmpeg@v0.5.2/dist/worker.min.js
DONE - Make text via a modal text input (doesn't change, use svg)
DONE - Fix text rendering
DONE - Tabbing away from video as it's encoding messes it up (can just say don't tab away for now)
DONE - Make a PR to allow searching stickers (checkbox for stickers)
DONE - Turn the save load code into 'share' - we load the content from a url, better for users with same functionality
DONE - Make background video choosable
DONE - Add delete button (trash) and visual feedback, for mobile
DONE - Button to hide/show sprites on specific frames (show as transparent while editing)
DONE - Add 'editor' mode to renderer so we can draw transparent images
DONE - Newlines in text are broken (either disable them or)
DONE - Add full screen loading animation for blocking operations
DONE - Only add keyframes for values that changed
DONE - Import main video from giphy
DONE - Import sprite from giphy
DONE - Video sizing problem (fixed up to max)
DONE - Remove sound from exported video
DONE - Target size for images
DONE - Fix gifs with transparent frames
DONE - Android ffmpeg encoding doesn't seem to run (out of memory, break into chunks)
DONE - Tweak ffmpeg settings to encode faster (-preset...)
DONE - Range selection on timeline (last click and drag)
DONE - Delete keyframes in selected timeline range
DONE - Ask if you want to leave saved changes
DONE - Ability to make a post and store it in KV as anonymous user (just json)
DONE - Make the post from inside the app - make a new post button for now
DONE - Pre-render video and upload it
DONE - Generate a thumbnail and store it in another key
DONE - API - List posts in order of creation date (limited to N)
DONE - API - Fetch thumbnail
DONE - API - Fetch video
DONE - Get static content hosted
DONE - Remove dependence on ffmpeg (too big)
DONE - Rename posts to animations
DONE - Make a post api for title/tags/message
DONE - Get static react page that can query /post/list and show cards
DONE - Ability to view single post video
DONE - See comments on video (including first)
DONE - Separate post button on editor with title and message
DONE - Re-enable hidden video when encoding (remove that old code)
DONE - Abillity to post comments on the view thread page
DONE - Remix button that opens the code in the editor
DONE - When posting a remix, post it as a child of the parent thread
DONE - Validate parent threadId in post
DONE - Bug: remixing a comment doesn't get its own threadID (remixing it fails)
DONE - When posting a remix, don't accept a threadId, accept a parent remix id (replyId)
DONE - Add replyId to posts so we can see who the replied to
DONE - Add replyId link that uses hashtag to move up (also for remixes)
DONE - Use hashtag # to scroll to your addition after posting
DONE - Remove oldVersion for userdata
DONE - Title and message/description
DONE - Hover over thumbnail and play video
DONE - Ability to open a post in its own page (where we will show comments)
DONE - Comment on a post (every post itself is a comment too, just may or may not be the first / have a video)
DONE - Remix (edit and repost on the same thread)
DONE - Server correct mime type for video/thumbnail/json (and all json responses)
DONE - Add "Login with Google" and an authorization test path for validating the JWT
DONE - Re-encode thumbnail png to smaller dimension jpg
DONE - Completely remove thumbnails, the videos are so small and load quickly anyways, less code!
DONE - Do all validation (such as for the video) before creating the post
DONE - Ability to login
DONE - Get shareable link
DONE - Make the login required for on postCreate paths (client & server)
DONE - Bug: Google async/defer gapi script can not exist (need to wait for onload
DONE - Switch to using react-router
DONE - Bug: componentDidMount makes fetch promises that must be cancelled in componentWillUnmount (React warning)
DONE - Store user id (from google) along with posts
DONE - Refactor all post data to be in a single json document
DONE - Display user ids in thread comments
DONE - Replace Modal, ModalProgress with material UI
DONE - Replace /threads with / and make the editor into /editor
DONE - Bug: Some gif animations are too fast (min frame rate?)
DONE - Store width/height of video so we can reserve video element size (layout)
DONE - Remove firstFrameJpeg / downsampleCanvas / thumbnail (unused)
DONE - Titles are only for animations
DONE - Need to clear message after its done
DONE - Find a way to run workers/workers KV locally so we can simulate the entire environment
DONE - Share Card implementation in thread/threads
DONE - Like post or comment - (approximate, non-atomic and underestimate + actual vote by user)
DONE - Just make authorization happen right at the beginning of CF requests and it sets it on RequestInput
DONE - Make the share button work
DONE - Need to support Accept-Ranges/Range requests and 206 Partial Content from CF Workers (Safari/iOS)
DONE - Make the comment box just work on submit (enter/ mobile send)
DONE - Upgrade moveable and test new mobile touch controls
DONE - When you login, the page doesn't update (maybe just refresh, or set global state)
DONE - Make psuedo posts come from the server response on create
DONE - Make the share on the same line as a comment post (like button in its own class if needed)
DONE - Maybe we make a react specific path for sign-in that does the full screen dialog (sends events to the root app)
DONE - Bug: Keep posting/rendering modal up while logging in (or spinner? block basically & catch error on failure)
DONE - Make a system where we store changes in a local cache and append them until they are confirmed added
DONE - Need to attribute original gifs (attributions button that does a popup with a scroll list, show gif or image in list)
DONE - Last touched video continues playing (don't require touch down)
DONE - Ability to delete if you made a post
DONE - Move all database operations into its own file
DONE - Bug: warning: Form submission canceled because the form is not connected (on posting animation)
DONE - Separate out the likes / views path to speed up how quickly we can show pages
DONE - Make the site slightly less wide so that tall videos show up on desktop
DONE - Make API routes type safe
DONE - Rename post/view* to thread/view and make views only show on threads (also don't query views if threadId !== id)
DONE - Make LoginUserIdContext be a three state login so we know when it's not known yet
DONE - Redo validation to use JSON schemas (always POST JSON)
DONE - Make sure extra data in JSON is considered invalid
DONE - Validate that profile fails (extra parameter)
DONE - Change the API so that all inputs and outputs are objects (not arrays, etc)
DONE - Enforce all the constraints (max min, etc)
DONE - Optimize the ts loader to only process a file once and extract all classes into an array (or separate files)
DONE - Change 'value' to 'liked' in API_POST_LIKE
DONE - Remove constants and just have a way to output the schemas
DONE - Make a page where you can edit your profile
DONE - Bug: Remixes of remixes aren't going to the right thread
DONE - Trending
DONE - Global admin role (and ability to assign other roles from editing database)
DONE - Admin can delete posts
DONE - Track views / popularity (approximate, non-atomic and underestimate + actual view by user)
DONE - Add a test that we can run in development mode
DONE - Remove content jquery from modal and remove the share button
DONE - The makeServerUrl function should type enforce parameters
DONE - Add a loading spinner to profile
DONE - Add padding to the main screen so mobile doesn't look so bad
DONE - Make sure usernames are unique since we can pick them at the moment
DONE - Add username sanitization and checking
DONE - Integrate google analytics to get stats tracking
DONE - Loading screen for picking background video
DONE - Usage ajv and typescript schemas or something similar to validate searialized json data (client loading and server)
DONE - First remove all the old code
DONE - Move auth over
DONE - Maybe setup hosting emulator
DONE - Remove options and access control headers
DONE - Fix tests to run on firebasew
DONE - Update all the ports used by the hosting emulator (and webpack dev server) 5000 and up...
DONE - Add is dev environment check back, and in production don't allow posts from test user
DONE - Turn all ArrayBuffer on the server to just Buffer
DONE - Read and profile user using firestore rather than db functions
DONE - Remove cache.ts since it's not needed
DONE - Bug: Once you've closed login you can't do it again
DONE - Refactor handlers to be independent of Workers
DONE - Hook up the gifygram.com domain to point at it (buy a new service?)
DONE - When we pick a username is has to be unique
DONE - Move all the database code back into handlers
DONE - Put likes and views directly on the post itself - remove them from metadata
DONE - Remove list cache
DONE - Make sure Firefox works
DONE - Hook up firebase analytics
DONE - Import main video from disk
DONE - Import sprite from disk
DONE - Remove replying to for now
DONE - Start all sprites & text in the center and auto keyframe them
DONE - Use the same font for text in editor as we do for our logo (Arvo)
DONE - Bug: Clear keyframes in range does ALL keyframes, not just selected object keyframes
DONE - Warnings on all buttons that require a selection
DONE - Put deletes into transaction & delete views / likes / related posts
DONE - Rename the repo
DONE - Refactor CircularProgress spinner into a simple class (centered vertically too)
DONE - Make editor load in async so we reduce main.js size (most people will just browse)
DONE - Confirmation of destructive action on leaving editor (unsaved changes)
DONE - Figure out the whole reply id thing
DONE - No empty comments
DONE - Ensure background never hides buttons in editor
DONE - Highlight key frames as they are selected
DONE - Ability to replace or change text (interchange too)
DONE - Bug: On load does not clear confirmation of destructive action
DONE - Scenejs Keyframe bug where it doesn't seek correctly
DONE - Timestamp or "minutes ago" on comments / animation posts
DONE - Make remixes appear on the front page
DONE - Need to make front page remix link use a hashtag to scroll to the post
DONE - Need to track views per remix (use url hash)
DONE - Turn amended requests into direct firebase db access if possible
DONE - Redirect madeitfor.fun to gifygram.com
DONE - Remove the whole cached boolean and pending icon
DONE - Bug: Motion tracked object gets deselected on occasio
DONE - Custom dialog for listing stickers / videos
DONE - Replace the buttons with material ui buttons
- Tutorial video for animator
- Agree privacy / etc
- Link user ids in thread/threads to profile page (/user/someone)
- Tags/keywords
- Infinite scrolling using masonry
- Flag post or comment
- Admin view only flagged posts
- Search by tag
- View a user profile
- Points for user profile
- Show posts on a user profile
- Admin can ban/unban user on profile
- Reply button on the comments like Scratch
- Replies are tabbed in (just one level)
- Ability to type @someone in comments
- Remove Font Awesome (play/pause button is the only usage)
- Animation tutorial
- Picking the background video
- Adding a sprite
- Animating the sprite from one position to another
- Adding text
- Deleting an object
- Motion tracking
- Post your animation
- Get a staging environment
- Get individual dev environments for testing (copy of database?)
- Get publish to production using CI and npm version ...
- Get tests running on CI builds (docker/puppeteer)
- Bug: Motion track first/last frame is offset (almost like it's wrapping first/last)
- Bug: Widgets after encoding does not always match current video frame (widgets in wrong position)
- Visiblity toggle kinda sucks in animator, we should just make it a timeline thing
- Import main video from youtube (clip the video)
- Export dialog (gif, mp4, webm), fps, max size / keep aspect, etc...
- Customize text styles (font, color, outline, etc)
- Hire animators and meme creators to create stupid meme content
- Facial recognition
- Green screening
- Frame by frame masking
Sound (postponed):
- Use media scene and change to playing the scenejs rather than seeking it on every video frame
- Individual audio elements need to seek properly
- Use media scene delay to set audio start time
- Create sound object
- Play sounds as we seek / animate
- Import sound from disk
- Sound from "text to speech"
- Import sound from some other sound service
- Enable exported video sound (remove -an in videoEncoder.ts)