deadline-cloud-for-after-effects is an "alpha release" and during my testing trying to get this up and running on a customer managed fleet on AWS I was have had to make several changes to get it working correctly.
What was the solution? (How)
Each of these commits are aimed to be mostly separate features or fixes however in my testing some of them do build on others.
Ensure we include the compiled jsx file in builds This ensures that pypi wheel builds include the client ipc.jsx library. Note it does not build that jsxbundle. That needs to be included in your CI build system
Change the AfterFx IPC model to a blocking listen In my testing, locally the listen IPC call works great...However on AWS and Windows Server the async calls never seem to trigger. This change does have implications that you will see in the next commit. Because the IPC is blocking on the AfterFx.exe side we cannot call aerender to hijack AfterFx.exe and do a render. The render command must come through the IPC now.
Implement a socket IPC waiting system for ae_client I was having some scenarios where AfterEffects would take longer than the 15 seconds to first boot, this change allows it to take longer on customer systems that may be configured differently (think EBS performance or AfterEffects versions).
How was this change tested?
I have been working with @epmog and using farm-2573f61b9d784c7fa38e61dbdc39172f to do all of my testing.
Did you run the "Job Bundle Output Tests"? If not, why not? If so, paste the test results here.
=================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.13, pytest-8.2.2, pluggy-1.5.0
rootdir: /mnt/d/Work/deadline-cloud-for-after-effects
configfile: pyproject.toml
plugins: cov-5.0.0, xdist-3.6.1
28 workers [1 item]
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
./home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/inorout.py:503: CoverageWarning: Module deadline/ae_adaptor was never imported. (module-not-imported)
self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
[100%]/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
/home/alex/.local/share/hatch/env/virtual/deadline-cloud-for-after-effects/htS2rqdm/deadline-cloud-for-after-effects/lib/python3.10/site-packages/coverage/control.py:888: CoverageWarning: No data was collected. (no-data-collected)
self._warn("No data was collected.", slug="no-data-collected")
---------- coverage: platform linux, python 3.10.13-final-0 ----------
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------
src/deadline/ae_adaptor/AEAdaptor/__init__.py 3 3 0% 3-6
src/deadline/ae_adaptor/AEAdaptor/adaptor.py 176 176 0% 3-404
src/deadline/ae_adaptor/AEClient/__init__.py 2 2 0% 3-5
src/deadline/ae_adaptor/AEClient/ae_client.py 63 63 0% 3-116
src/deadline/ae_adaptor/AEClient/ae_handler.py 59 59 0% 3-142
src/deadline/ae_adaptor/AEClient/ipc.py 21 21 0% 13-38
src/deadline/ae_adaptor/__init__.py 0 0 100%
------------------------------------------------------------------------------
TOTAL 324 324 0%
Coverage HTML written to dir build/coverage
Coverage XML written to file build/coverage/coverage.xml
=================================================================================== slowest 5 durations ====================================================================================
0.20s call test/test_copyright_headers.py::test_copyright_headers
(2 durations < 0.005s hidden. Use -vv to show these durations.)
==================================================================================== 1 passed in 11.21s ====================================================================================
Was this change documented?
Yes see FAQ.md and DEVELOPMENT.md
Is this a breaking change?
Yes, mainly around the listenBlocking IPC call now.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
What was the problem/requirement? (What/Why)
deadline-cloud-for-after-effects
is an "alpha release" and during my testing trying to get this up and running on a customer managed fleet on AWS I was have had to make several changes to get it working correctly.What was the solution? (How)
Each of these commits are aimed to be mostly separate features or fixes however in my testing some of them do build on others.
listen
IPC call works great...However on AWS and Windows Server the async calls never seem to trigger. This change does have implications that you will see in the next commit. Because the IPC is blocking on the AfterFx.exe side we cannot callaerender
to hijack AfterFx.exe and do a render. The render command must come through the IPC now.aerender
does not work anymore with the blocking IPC.How was this change tested?
I have been working with @epmog and using
farm-2573f61b9d784c7fa38e61dbdc39172f
to do all of my testing.Did you run the "Job Bundle Output Tests"? If not, why not? If so, paste the test results here.
Was this change documented?
Yes see
FAQ.md
andDEVELOPMENT.md
Is this a breaking change?
Yes, mainly around the
listenBlocking
IPC call now.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.